CodeGym /행동 /Docker SELF /컨테이너 자원 관리

컨테이너 자원 관리

Docker SELF
레벨 12 , 레슨 0
사용 가능

6.1 컨테이너 리소스를 제한해야 하는 이유

Docker는 컨테이너 리소스 관리에 탁월해서 시스템 성능을 효율적으로 분배하고 컨테이너 간의 불필요한 충돌을 피할 수 있게 해줘. 특히 한 컨테이너의 애플리케이션이 모든 리소스를 "먹어치워서" 다른 서비스의 작업을 느리게 만드는 상황을 방지하는 게 중요해. CPU와 메모리 같은 리소스를 제한하면 과부하를 피하고 시스템의 안정성을 유지하면서 모든 애플리케이션이 예상 가능하게 작동하도록 할 수 있어. 이번 강의에서는 CPU와 메모리 사용량에 제한을 설정해서 시스템이 높은 부하에서도 생산성을 유지할 수 있도록 하는 방법을 알아볼 거야.

컨테이너 리소스를 제한해야 하는 이유:

  1. 안정성: 한 컨테이너가 모든 리소스를 독점해서 다른 컨테이너나 시스템 자체가 느려지는 상황을 방지할 수 있어.
  2. 효율성: 컨테이너 간 리소스를 더 잘 분배해서 시스템의 성능을 최대한으로 활용할 수 있어.
  3. 보호: 리소스를 제한하면 의도적으로든 실수로든 컨테이너가 시스템을 과부하하는 문제를 방지할 수 있어.

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 할당 우선 순위가 더 높을 거야.

Terminal

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만 사용하도록 제한해.

Terminal


        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)만 사용하게 돼.

Terminal


        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만 사용하도록 제한해.

Terminal

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 스왑만 사용하도록 제한해.

Terminal

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만 사용하도록 제한해.

Terminal

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
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION