6.1 컨테이너 리소스를 제한해야 하는 이유
Docker는 컨테이너 리소스 관리에 탁월해서 시스템 성능을 효율적으로 분배하고 컨테이너 간의 불필요한 충돌을 피할 수 있게 해줘. 특히 한 컨테이너의 애플리케이션이 모든 리소스를 "먹어치워서" 다른 서비스의 작업을 느리게 만드는 상황을 방지하는 게 중요해. CPU와 메모리 같은 리소스를 제한하면 과부하를 피하고 시스템의 안정성을 유지하면서 모든 애플리케이션이 예상 가능하게 작동하도록 할 수 있어. 이번 강의에서는 CPU와 메모리 사용량에 제한을 설정해서 시스템이 높은 부하에서도 생산성을 유지할 수 있도록 하는 방법을 알아볼 거야.
컨테이너 리소스를 제한해야 하는 이유:
- 안정성: 한 컨테이너가 모든 리소스를 독점해서 다른 컨테이너나 시스템 자체가 느려지는 상황을 방지할 수 있어.
- 효율성: 컨테이너 간 리소스를 더 잘 분배해서 시스템의 성능을 최대한으로 활용할 수 있어.
- 보호: 리소스를 제한하면 의도적으로든 실수로든 컨테이너가 시스템을 과부하하는 문제를 방지할 수 있어.
6.2 CPU
사용 제한
Docker는 컨테이너의 CPU
사용을 제한할 수 있는 몇 가지 방법을 제공해.
중요!
여기서 CPU
는 전체 프로세서가 아니라 단일 프로세서 코어를 의미해. 쿼드 코어 프로세서의 경우 CPU
4개가 있는 거야.
1. CPU (--cpu-shares)
비율 제한
--cpu-shares
파라미터는 컨테이너의 CPU 우선 순위의 상대값을 설정해. 기본값은 1024야. 이 값은 상대적인 값으로, --cpu-shares=512
를 가진 컨테이너는 --cpu-shares=1024
를 가진 컨테이너의 우선순위 절반을 가지게 될 거야.
사용 예:
이 예제에서 high_priority_container
컨테이너는 low_priority_container
컨테이너보다 CPU
할당 우선 순위가 더 높을 거야.
docker run -d --name low_priority_container --cpu-shares=512 nginx
docker run -d --name high_priority_container --cpu-shares=2048 nginx
2. CPU (--cpus)
개수 제한
--cpus
파라미터는 컨테이너가 사용할 수 있는 CPU
의 정확한 개수를 설정해. 예를 들어, 1.5라는 값은 컨테이너가 1.5개의 CPU
를 사용할 수 있다는 뜻이야.
사용 예:
이 예제는 limited_cpu_container
컨테이너를 최대 1.5개의 CPU
만 사용하도록 제한해.
docker run -d --name limited_cpu_container --cpus="1.5" nginx
3. CPU
시간 사용 제한 (--cpu-quota 와 --cpu-period)
--cpu-quota
와 --cpu-period
파라미터는 CPU
사용을 더 세밀하게 조정할 수 있어. --cpu-period
는 마이크로초 단위의 시간 간격(기본값 100000)을 설정하고, --cpu-quota
는 해당 기간 동안 최대로 사용할 수 있는 CPU
시간을 설정해.
사용 예:
이 예제에서는 custom_cpu_quota_container
컨테이너가 최대 50%의 CPU
(25000/50000)만 사용하게 돼.
docker run -d --name custom_cpu_quota_container --cpu-period=50000 --cpu-quota=25000 nginx
6.3 메모리 사용 제한
메모리 제한은 컨테이너가 사용할 수 있는 RAM 양을 제어할 수 있게 해줘. 이건 한 컨테이너가 모든 메모리를 "잡아먹어서" 다른 프로세스랑 컨테이너에 영향을 주는 걸 방지하는 데 도움을 줘.
1. 최대 메모리 크기 제한 (--memory)
--memory
파라미터는 컨테이너가 사용할 수 있는 메모리의 상한선을 설정해. 만약 컨테이너가 이 제한을 초과하면, 시스템은 컨테이너를 종료시킬 거야.
사용 예시:
이 예시는 limited_memory_container
컨테이너가 최대 512 MB RAM만 사용하도록 제한해.
docker run -d --name limited_memory_container --memory="512m" nginx
2. 메모리 스왑 크기 제한 (--memory-swap)
--memory-swap
파라미터는 RAM과 스왑의 총 한계를 설정해. 예를 들어, --memory
가 512 MB로 설정되고, --memory-swap
이 1 GB로 설정되면, 컨테이너는 최대 512 MB RAM과 추가로 512 MB 스왑을 사용할 수 있어.
사용 예시:
이 예시는 swap_limited_container
컨테이너가 512 MB RAM과 512 MB 스왑만 사용하도록 제한해.
docker run -d --name swap_limited_container --memory="512m" --memory-swap="1g" nginx
3. 스왑 없이 메모리 제한 (--memory-swap=-1)
스왑 사용을 금지하려면, --memory-swap
파라미터를 -1로 설정하면 돼.
사용 예시:
이 예시는 no_swap_container
컨테이너가 스왑 없이 512 MB RAM만 사용하도록 제한해.
docker run -d --name no_swap_container --memory="512m" --memory-swap="-1" nginx
6.4 실무 시나리오
1. 높은 우선순위와 낮은 우선순위 작업 실행
한 서버에서 중요한 작업과 덜 중요한 작업이 동시에 실행될 때 --cpu-shares
파라미터를 사용하면 중요한 작업에 더 많은 CPU
리소스를 할당할 수 있어.
docker run -d --name high_priority_task --cpu-shares=2048 my_high_priority_image
docker run -d --name low_priority_task --cpu-shares=512 my_low_priority_image
2. 테스트를 위한 자원 제한
제한된 리소스 환경에서 애플리케이션을 테스트하려면 CPU
와 메모리에 대해 엄격한 제한값을 설정할 수 있어. 이렇게 하면 애플리케이션이 이런 제약에서 어떻게 동작하는지 확인할 수 있어.
docker run -d --name test_container --cpus="1" --memory="256m" my_test_image
3. 리소스 고갈 방지
하나의 컨테이너가 시스템의 모든 리소스를 사용하는 상황을 방지하려면 모든 컨테이너에 메모리와 CPU
제한값을 설정할 수 있어.
docker run -d --name isolated_container --cpus="2" --memory="1g" my_app_image
GO TO FULL VERSION