[Docker] Container 관리하기(이론)

99winnmin·2023년 2월 2일

Docker

목록 보기
11/16

하드웨어 리소스 제한 및 컨테이너 모니터링

컨테이너 H/W 리소스 제한

  • 기본적으로 컨테이너는 host h/w 리소스의 사용 제한을 받지 않음
  • 그래서 제한을 두지 않으면 불공정하게 리소스 분배가 될 수 있음
  • 컨테이너가 필요로 하는 만큼의 리소스만 할당해야함!!!

Docker command를 통해 제한할 수 있는 리소스

  • CPU, Memory, Disk I/O
  • Memory 리소스 제한 - 제한 단위는 b,k,m,g로 할당
옵션의미
--memory, -m컨테이너가 사용할 최대 메모리 양을 지정
--memory-swap컨테이너가 사용할 스왑 메모리 영역에 대한 설정
메모리+스왑. 생략시 메모리의 2배가 설정됨
--memory-reservation--memory 값보다 적은 값으로 구성하는 소프트 제한 값 설정
--oom-kill-disableOOM Killer가 프로세스를 kill하지 못하도록 보호

example
$ docker run -d -m 512m nginx:1.14 : nginx 컨테이너가 최대로 쓸 수 있는 메모리는 최대 512MB가 되도록 함
$ docker run -d -m 1g --memory-reservation 500m nginx:1.14 : nginx 컨테이너가 최대 1GB 쓸 수 있고 적어도 500MB는 쓸 수 있도록 보장
$ docker run -d -m 200m --memory-swap 300m nginx:1.14 : (swap memory:disk를 메모리처럼 쓰는 것), 메모리 200MB까지 쓸 수 있고 swap memory까지하면 300MB까지 보장 -> disk memory는 100MB를 추가로 쓰는 것
IF) docker run -d -m 200m --memory-swap 200m nginx:1.14 : swap size를 안쓰게 되는 바보짓...
$ docker run -d -m 200m --oom-kill-disable nginx:1.14 : Linux kernal은 physical memory가 부족하게 되면 Out Of Memory Killer를 동작시켜서 process들을 kill하는데 이렇게 kill 당하는 것을 방지하는 옵션

  • CPU 리소스 제한
옵션의미
--cpus컨테이너에 할당할 CPU core수를 지정
--cpus="1.5" : 컨테이너가 최대 1.5개의 CPU 파워 사용가능
--cpuset-cpus컨테이너가 사용할 수 있는 CPU나 코어를 할당
cpu index는 0부터 시작, --cpuset-cpus=0-4
--cpu-share컨테이너가 사용하는 CPU 비중을 1024 값을 기반으로 설정
--cpu-share 2048 : 기본 값보다 두 배 많은 CPU 자원을 할당

example
$ docker run -d --cpus=".5" ubuntu : ubuntu 컨테이너는 0.5개의 CPU 파워 사용가능
$ docker run -d --cpu-shares 2048 ubuntu : ubuntu 컨테이너는 기본값*2 CPU 파워 사용 가능
$ docker run -d --cpuset-cpus 0-3 ubuntu : ubuntu 컨테이너는 0-3 총 4개의 CPU 코어 사용 가능

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

example
$ docker run -it --rm --blkio-weight 100 ubuntu /bin/bash : Block IO 리소스를 100만큼만 받겠다! -> 최소로 받는 것임
$ docker run -it --rm --device-write-bps /dev/vda:1mb ubuntu /bin/bash : /dev/vda에대한 쓰기 작업을 초당 1mb로 제한
$ docker run -it --rm --device-write-bps /dev/vda:10mb ubuntu /bin/bash : /dev/vda에대한 쓰기 작업을 초당 10mb로 제한
$ docker run -it --rm --device-write-iops /dev/vda:10 ubuntu /bin/bash ,
$ docker run -it --rm --device-write-iops /dev/vda:100 ubuntu /bin/bash : IOPS의 값은 각각 10,100

컨테이너 사용 리소스 확인하는 모니터링 tool

docker monitoring commands

  • docker stat : 실행중인 컨테이너의 런타임 통계를 확인
    `docker stats [OPTIONS][CONTAINER...]

  • docker event : 도커 호스트의 실시간 event 정보를 수집해서 출력
    docker events -f container=<MAME>
    docker image -f container=<MAME>

  • cAdvisor(모니터링 어플리케이션)
    https://github.com/google/cadvisor

profile
功在不舍

0개의 댓글