컨테이너 자원 할당 제한
컨테이너를 생성할 때 아무런 옵션없이 생성하면 호스트의 자원을 무한정 제한 없이 쓸 수 있다. 이런 문제를 해결하기 위해 우리는 자원제한을 해야한다. 현재 컨테이너에 설정된 자원 제한을 확인하기 위해 다음과 같이 한다.
# docker inspect rsyslog_server
예컨대, CPU 할당을 제한하려면 다음과 같이 한다.
# docker update (변경할 자원 제한) (컨테이너 이름)
# docker update --cpuset-cpus=1 rsyslog_server
1) 컨테이너 메모리 제한
도커에서 사용할 수 있는 메모리 사용량을 1GB로 제한해 보자.
# docker run -d --memory="1g" --name memory_1g nginx
# docker inspect memory_1g | grep \"Memory\"
다음과 같은 경우 메모리가 부족해 컨테이너가 실행되지 않는다.
# docker run -d --name memory_4m --memory="4m" mysql:5.7
기본적으로 컨테이너의 Swap 메모리는 호스트메모리의 2배로 설정되지만 별도로 지정할 수 있다.
# docker run -it --name swap_500m --memory=200m --memory-swap=500m ubuntu:14.04
2) 컨테이너 CPU 제한
--cpu-shares 옵션은 컨테이너에 가중치를 설정해 해당 컨테이너가 CPU를 상대적으로 얼마나 사용할 수 있는지를 나타낸다. 우선 1개의 CPU를 가지는 호스트에서 테스트해 본다.
# docker run -d --name cpu_1024 --cpu-shares 1024 alicek106/stress stress --cpu 1
# ps aux | grep stress // CPU 사용율은 100 가량 된다.