본문 바로가기
Docker

Docker 컨테이너 리소스 관리

by 개복이 2021. 8. 19.

컨테이너 리소스 제한

  • 기본으로 컨테이너는 호스트 하드웨어 리소스의 사용 제한을 받지 않는다.
  • 컨테이너가 필요로 하는 만큼의 리소스만 할당 해야한다.
  • Docker command를 통해 제한할 수 있는 리소스
    • CPU
    • Memory
    • Disk I/O

 

 

Memory 리소스 제한

  • 제한 단위는 b, k, m, g로 할당
옵션 의미
--memory, -m 컨테이너가 사용할 최대 메모리 양을 지정
--memory-swap 컨테이너가 사용할 스왑 메모리 영역에 대한 설정
컨테이너가 사용할 메모리 영역에 대한 설정
메모리+스왑. 생략 시 메모리의 2배가 설정됨
--memory-reservation --memory 값보다 적은 값으로 구성하는 소프트 제한 값 설정
--oom-kill-disable OOM Killer가 프로세스 kill 하지 못하도록 보호
  • $ docker run -d -m 200m --oom-kill-disable=true nginx:1.14 (메모리가 부족해도 kill 하지 못하도록 보호)

 

  • $ docker run -d -m 512m nginx:1.14 (최대 512m 메모리를 사용)
  • $ docker run -d 1g --memory-reservation 500m nginx:1.14 (500m 메모리는 보장 받고 최대 1g까지 사용)
  • $ docker run -d -m 200m --memory-swap 300m nginx:1.14
    (300m - 200m = 100m으로 100m 만큼 메모리 swap을 사용)

 

 

CPU 리소스 제한

옵션 의미
--cpus 컨테이너에 할당할 CPU core수를 지정
--cpus="1.5" 컨테이너가 최대 1.5개의 CPU core 사용 가능
--cpuset-cpus 컨테이너가 사용할 수 있는 CPU나 core를 할당
cpu index는 0부터
--cpuset-cpus=0-4
--cpu-shares 컨테이너가 사용하는 CPU 비중을 1024값을 기반으로 설정
--cpu-shares 2048 기본 값보다 두 배 많은 CPU 자원을 할당

 

  • $ docker run --cpuset-cpus 1 --name --name c1 -d polinux/stress stress --cpu 1
    (stress로 부하를 테스트 하기 위함)
  • htop으로 확인

 

  • $ docker run --cpu-shares(-c) 2048 --name c1 -d polinux/stress stress -c 2 등 4개 생성 후 테스트
  • $ docker stats 명령어로 확인

 

  • $ docker run -d --cpus=".5" ubuntu:1.14 (1개 코어에 절반만 사용)

 

Block I/O 제한

옵션 의미
--blkio-weight
--blkio-weight-device
Block I/O의 Quota를 설정할 수 있으며 100~1000까지 선택
default 500
--device-read-bps
--device-write-bps
특정 디바이스에 대한 읽기와 쓰기 작업의 초당 제한을 kb,
mb, gb 단위로 설정
--device-read-iops
--device-write-iops
컨테이너의 read/write 속도의 Quota를 설정한다.
초당 Quota를 제한해서 I/O를 발생시킨다. 0이상의 정수 표기
초당 데이터 전송량 = IOPS * 블럭크기(단위 데이터 용량)

 

  • Device 확인

 

  • --device-write-iops 10, 100 Quota를 설정해서 테스트

댓글