특별히 용량 제한을 걸어주지 않으면, Docker host pc 하드웨어 리소스의 모든 사이즈를 컨테이너가 사용할 수 있게 됨
Docker host pc에 N개의 컨테이너가 작동중이라면, 컨테이너1이 리소스를 많이 사용할 시 나머지(컨테이너2, 컨테이너3, ... 컨테이너N)들은 리소스를 상대적으로 적게 사용하게 됨
=> 특정 컨테이너가 필요로 하는 만큼만 리소스를 할당하는 것이 좋음
Docker command를 통해 제한할 수 있는 리소스: CPU, Meomry, Disk I/O
$docker run -- 할때 제한을 걸어줄 수 있음.
1.1.1. --memory, -m : 컨테이너가 사용할 최대 메모리 양 지정.
1.1.2. --memory-reservation: --memory 값보다 적은 값으로 구성하는 소프트 제한 값 설정.
1.1.3. --memoryswap : 컨테이너가 사용할 스왑 메모리 영역에 대한 설정(Disk를 Memory처럼 쓰는 것).
1.1.4. --oom-kill-disable : OOM Killer가 프로세스 kill하지 못하도록 보호.
사용 예,
$docker run -d -m 512m nginx:1.14
→ {nginx:1.14} 컨테이너를 가동하는데, 이 컨테이너는 메모리 사이즈를 최대 512MB까지 사용할 수 있다.
$docker run -d -m 1g --memory-reservation 500m nginx:1.14
→ {nginx:1.14} 컨테이너를 가동하는데, 이 컨테이너는 메모리 사이즈를 최소 500MB에서 최대 1GM까지 사용할 수 있다.
→ 500MB는 항상 사용할 수 있게 '보장'하는 옵션
$docker run -d -m 200m --memory-swap 300m nginx:1.14
→ {nginx:1.14} 컨테이너를 가동하는데, 이 컨테이너는 메모리 사이즈를 200MB까지 사용할 수 있고, 스왑 사이즈도 300MB 사용할 수 있다.
→ 스왑 사이즈 300MB = (메모리 사이즈(2OOMB) + 스왑 사이즈(100MB))
$docker run -d -m 200m --oom-kill-disable nginx:1.14
→ {nginx:1.14} 컨테이너를 가동하는데, 이 컨테이너는 메모리 사이즈를 200MB까지 사용할 수 있고, 메모리가 부족해도 이 컨테이너를 OOM Kill하지 말아라.
1.2.1. --cpu : 컨테이너에 할당할 CPU core 수 지정
1.2.2. --cpuset-cpus : 컨테이너가 사용할 수 있는 CPU나 코어를 지정. cpu index는 0부터 카운트.
1.2.3. --cpu-share : 상대적 가중치로 CPU 자원을 할당. CPU 비중의 기본 값은 1024.
사용 예,
$docker run -d --cpus =".5" ubuntu:1.14
→ {ubuntu:1.14} 컨테이너를 가동하는데, n개의 CPU core 중 1개 core의 절반(0.5)만 사용.
$docker run -d --cpu-share 2048 ubuntu:1.14
→ {ubuntu:1.14} 컨테이너를 가동하는데, 다른 컨테이너에 비해 2배 많은 리소스를 할당.
$docker run -d --cpuset-cpus 0-3 ubuntu:1.14
→ {ubuntu:1.14} 컨테이너를 가동하는데, 이 컨테이너는 '0번, 1번, 2번, 3번' core에서 동작해라.
→ cpu가 총 0번부터 4번까지 있다면, 컨테이너1에 0-1, 컨테이너2에 2-3 할당하여 분산.
* $lscpu #CPU가 몇개인지 볼 수 있음 (CPU(s))
1.3.1. --blkio-weight, --blkio-weight-device : Blcok IO의 Quata를 설정, 100 ~ 1000까지 중 할당 가능(default: 500)
1.3.2. --device-read-bps, --device-write-bps : 초당 얼마 만큼의 byte로 read/write 작업을 할 수 있는지 제한.
1.3.3. --device-read-iops, --device-write-iops : 컨테이너의 read/write 속도의 쿼터를 설정. 초당 quata를 설정해 I/O를 발생시킴.
사용 예,
$docker run -it --rm --blkio-weight 100 ubuntu:latest /bin/bash
→ default가 500인데 100을 설정한다는 건 리소스를 적게 할당한다는 것
$docker run -it --rm --device-write-bps /dev/vda:1mb ubuntu:latest /bin/bash
→ vda 저장해 줄 때 작업 속도를 1mb로 제한
$docker run -it --rm --device-write-bps /dev/vda:10mb ubuntu:latest /bin/bash
→ → vda 저장해 줄 때 작업 속도를 10mb로 제한
$docker run -it --rm --device-write-iops /dev/vda:10 ubuntu:latest /bin/bash
$docker run -it --rm --device-write-iops /dev/vda:100 ubuntu:latest /bin/bash
$docker stats [옵션] [컨테이너] # 해당 컨테이너의 리소스 사용량
$docker stats #현재 가동중인 컨테이너들의 리소스 사용량
참고: