Docker - (4) : 도커 자원 관리

­이승환·2021년 12월 23일
0

Docker

목록 보기
4/4

Overview


도커 컨테이너는 하나의 호스트로 취급(파일시스템, 자원 등이 분리)한다고 앞선 포스팅에서 언급하였다. 그럼에도 불구하고 호스트 PC의 CPU나 RAM 등의 자원을 나누어 사용하는 것은 변함이 없다.

컨테이너를 생성하는 run, create 명령어에서 컨테이너 자원 할당량을 조정하도록 옵션을 사용할 수 있다. 컨테이너 자원 할당 옵션을 설정하지 않으면 호스트의 자원을 전부 점유해서 다른 컨테이너들 뿐만 아니라 호스트 자체의 동작이 멈출 수 있다. (효율적으로 활용하는 것이 좋지 않을까..)

검사

# docker inspect [container_name]

Disckquota, KernelMemory, ... 등의 형식으로 JSON 결과를 보여준다

# docker update [자원] [컨테이너이름] // 위 형태를 업데이트 하는 방법

메모리 제한

# docker run -d \
--memory="1g" \
--memory-swap=500m
--name memory_1g \
nginx

CPU 제한

--cpu-shares

cpu 할당의 비율로써 적용해야한다. 1024는 1을 의미한다. 만일 cpu코어가 1개이고, 컨테이너가 1024 : 512 : 512 의 비율로 3개의 컨테이너를 가지고 있다면, 2:1:1 의 비율로 라운드로빈으로 돌아갈 것이다.

# docker run -d \
--memory="1g" \
--memory-swap=500m \
--name memory_1g \
--cpu-shares 1024 \
nginx

--cpuset-cpu

호스트에 여러 cpu가 존재하면, 특정 컨테이너가 독점하게 할 수 있다.

# docker run -d \
--cpu-set=2 \ // 3번째 cpu만 사용하겠다는 의미
nginx

--cpu-period, --cpu-quota

CFS(completely fair scheduler) 는 100ms로 가지고 있지만, 위 옵션들을 사용해서 변경해줄 수 있다. 기본적으로 100000(100ms)가 period 기본 값이고, quota의 경우 ㅡ케줄링에 얼마나 할당할 것인지 비율을 선택해줄 수 있다.

# docker run  -d --name quota_1 \
--cpu-period=100000 \
--cpu-quota=25000 \
alicek106/stress

100ms 중 1/4의 비율만 차지한다. 즉, 기본값보다 1/4의 자원을 활용한다.

--cpus

--cpu-period + --cpu-quota 와 동일한 기능이지만, 좀 더 직관적으로 활용할 수 있는 옵션이다.

# docker run  -d --name quota_1 \
--cpu-period=100000 \
--cpu-quota=25000 \
alicek106/stress

# # docker run  -d --name quota_1 \
--cpus=0.25 \
alicek106/stress

위 두개의 명령어는 동일한 역할을 수행한다.

Block I/O 제한

컨테이너를 생성할 때, 옵션이 없으면 대역폭은 무제한이다. 하나의 컨테이너가 블록 입출력을 과도하게 사용하지 않게 설정하려면 run 명령어에서 --device-write-bps + --device-read-bps, --device-write-iops, --device-read-iops 를 사용할 수 있다. bps는 byte per second 로써, 초당 읽기속도를 지정한다면 iops는 상대값으로 생각하면 된다. 사용법은 생략하겠다.

스토리지 드라이버와 컨테이너 저장 공간 제한

도커 엔진은 컨테이너 내부의 저장 공간을 제한하는 기능을 보편적으로 제공하지 않지만, 도커의 스토리지 드라이버나 파일 시스템 등이 특정 조건을 만족하는 경우에만 이 기능을 제한적으로 사용할 수 있다. 이 부분은 따로 포스팅을 진행하려고 한다.

profile
Mechanical & Computer Science

0개의 댓글