[따배도] 7-1.Container 관리하기 (이론)

( 참고 : 따배도 https://www.youtube.com/watch?v=NLUugLQ8unM&list=PLApuRlvrZKogb78kKq1wRvrjg1VMwYrvi )


Contents

  1. Container 하드웨어 리소스 제한
  2. Container Monitoring Tool


Q1. Container 하드웨어 리소스 제한

Container는 기본적으로 호스트 HW 사용 제한이 없다. (따로 걸어놓지 않는 이상)

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

  • CPU
  • Memory
  • Disk I/O


docker run --help
  • 이를 통해 다양한 리소스 제한 명령어를 확인할 수 있다


(1) Memory 리소스 제한

옵션 의미
–memory, -m 최대 메모리양 지정
–memory-swap 스왑 메모리 영역에 대한 설정.
“메모리+스왑” 합친 값
( 생략 시, 메모리의 2배 만큼 )
–memory-reservation –memory 값 보다 적은 값으로 구성하는 soft 제한 설정
–oom-kill-disable OOM killer가 프로세스를 kill하지 못하도록 보호

docker run -d -m 512m nginx:1.14

  • nginx 컨테이너가 사용할 수 있는 최대 메모리는 512MB

docker run -d -m 1g --memory-reservation 500m nginx:1.14

  • nginx 컨테이너 최소 500MB는 사용할 수 있도록 보장 받는다

    ( 최대 = 1G 까지 사용 가능 )

docker run -d -m 200m --memory-swap 300m nginx:1.14

  • nginx 컨테이너는 (스왑=100MB), (메모리=200MB) 까지 사용 가능

docker run -d -m 200m --oom-kill-disable nginx:1.14

  • OOM = Out of Memory
  • (일반적으로) 메모리가 꽉 차면, 리눅스 커널은 OOM killer를 동작시켜서 프로세스들을 kill한다. 이를 못하도록 하는 명령어이다.


(2) CPU 리소스 제한

옵션 의미
–cpus 최대 이용 가능 CPU core 수
–cpuset-cpus CPU나 코어를 할당
cpu index는 0부터 시작<br /
–cpu-share CPU 비중을 1024값을 기반으로 설정

docker run -d --cpus='.5' ubuntu:1.14

  • \(0.5\) 만큼의 코어 사용 가능

docker run -d --cpu-shares 2048 ubuntu:1.14

  • 다른 Container보다 2배 많이 할당받음 ( 1024 x 2= 2048 )
  • 상대적 가중치

docker run -d --cpuset-cpus 0-3 ubuntu:1.14

  • 0~3번 index의 CPU 사용 가능


(3) Block I/O 제한

옵션 의미
–blkio-weight
–blkio-weight-device
Block IO의 Quota 설정
100~1000까지 선택
(default : 500)
–device-read-bps
–device-write-bps
특정 디바에스에 대한 읽기/쓰기 작업 제한
( 단위 : kb, mb, gb )
–device-read-iops
–device-write-iops
Container의 일기/쓰기 속도의 Quata 설정
초당 Quota를 제한해서 I/O를 발생시킴
초당 데이터 전송량 = IOPS * 블럭 크기

docker run -it --rm --blkio-weight 100 ubuntu:latest /bin/bash

docker run -it --rm --device-write-bps /dev/vda:1mb ubuntu:latest /bin/bash

docker run -it --rm --device-write-iops /dev/vda:100 ubuntu:latest /bin/bash


Q2. Container Monitoring Tool

Docker monitoring commands

docker stat

  • 컨테이너의 runtime 통계 확인
  • ex)
    • docker stats [OPTIONS] [CONTAINER...]


docker event

  • Docker HOST의 실시간 event 정보 수집 후 출력
  • ex)
    • docker events -f container=<NAME>
    • docker image -f container=<NAME>


cAdvisor

  • 구글에서 만든 docker 모니터링 툴
  • https://github.com/google/cadvisor