Docker 자원 소비 제어 (CPU, Memory)
목차
자원소비 변경은 docker update [옵션] [컨테이너 명] 으로 가능하다.
CPU
- CPU 자원을 어떤 프로세스(컨테이너)에 얼마나 할당하는지를 정책으로 만드는 것을 CPU스케쥴링 이라고 한다.
- CPU 사용량 제한을 위해 CFS(Completely Fair Scheduler) 스케쥴러를 사용한다.
- 말그대로 모든 프로세스가 공평하게 CPU 사용시간을 제공 받로고 하는 OS 알고리즘이다.

Memory
- 메모리는 프로세스들의 작업 공간이다. Docker HostOS의 총 메모리 양과 작업에 사용될 예상되는 메모리 크기를 사전에 파악하여 메모리 최적화를 유지해야한다.
- 만일 특정 컨테이너가 과도한 메모리 사용 시 메모리 부족(OOM, out of memory)으로 인해 프로세스, 즉 다른 컨테이너의 예기치 않은 강제 종료가 발생할 수 있다.
- OOM Killer가 프로세스를 kill하지 못하도록 보호: –oom-kill-disable
- 특히 컨테이더들의 과도한 메모리 사용으로 인해 Docker Daemon이 커널에 의해 강제 종료되면 전체 컨테이너 서비스들에 영향을 주게 된다.
- 따라서, Docker HostOS의 메모리 사용량 확인과 컨테이너의 메모리 사용 제한이 중요하다

Disk
- Docker image는 기본적으로 Docker Host의 공간을 사용하므로 지속적인 사용량 관찰이 요구된다.
- 컨테이너 I/O 제한을 설정하지 않으면 컨테이너 내부 I/O bandwidth(대역폭)에 제한이 설정되지 않기 때문에 옵션을 통해 Block I/O 제한이 필요하다
- 단 , Direct I/O의 경우에만 Block I/O가 제한되며, Buffered I/O는 해당되지 않는다
- 컨테이너 Disk 리소스에 대한 런타임 제한(resource limit)
- 디스크 Block I/o 작어베 대한 제한은 디스크 성능 지표인 IOPS와 MBPS에 따른다.
