[Docker] 5. 컨테이너 자원 할당 제한

sightstudio

·

2020. 9. 20. 21:36

또커

컨테이너를 생성하는 run, create 명령령어에서 컨테이너의

자원 할당량을 조정하도록 옵션을 입력할 수 있습니다.

 

아무런 옵션이 없으면 컨테이너는 호스트의 자원을

제한 없이 쓸 수 있기 때문에 위험할 수 있습니다.

 

 

1.  컨테이너 자원 제한 확인

아래와 같은 명령어를 통해 테스트 컨테이너를 띄우고 컨테이너 정보를 확인할 수 있습니다.

알파인 리눅스는 제일 가벼운 리눅스입니다. docker inspect의 결과물이 json 형태이기 때문에 ,

 

이를 CLI에서 볼 수 있게 jq를 썼습니다. jq 없이 inspect 결과물에서 HostConfig 값을 찾아도 됩니다. [jq 설치]

// 테스트 컨테이너 생성
docker run -d --name test-container alpine

// 컨테이너 확인
docker inspect test-container | jq ".[].HostConfig"    

 

 

2. 자원 제한

컨테이너 메모리 제한

--memory로  옵션으로 메모리를 제한 할 수 있습니다.  

메가바이트 (m), 기가바이트 (g) 단위만 지원되며 최소 4mb 까지 제한 할 수 있습니다.  

// 테스트 컨테이너 생성
docker run -d --memory="500m"--name test-mem-limit alpine 

// 컨테이너 확인
docker inspect test-mem-limit | jq ".[].HostConfig"

 

실제로 메모리가 500M로 제한된걸 확인할 수 있습니다.

컨테이너가 허용된 메모리 이상을 사용할 경우,

컨테이너는 종료됩니다.

 

--memory-swap 옵션을 통해 스왑메모리를 추가해

줄 수도 있습니다. 기본적으로는 기존 메모리의 2배로

설정되어있습니다.

 

위에서 허용치를 넘었을 경우 컨테이너를 

강제 종료시키는 걸 막는 OomKillDisabled 도 있지만,

추천하지 않습니다.

 

 

 

컨테이너 CPU 제한

--cpu-shares 

컨테이너에 가중치를 설정해 해당 컨테이너가 상대적으로  CPU를 얼마나 사용하는지 나타냅니다. 

 

1024가 1의 비율을 가집니다. 가령 값이 1024인 컨테이너 하나, 512인 컨테이너 두 개가 띄워져 있으면,

2 : 1 의 비율로 CPU를 점유합니다.

 

// 테스트 컨테이터 생성
docker run -it -d --name cpu_share \
--cpu-shares 1024                  \
alpine

// 컨테이너 확인 
docker inspect test-mem-limit | jq ".[].HostConfig"

 

 

 

 

 

 

--cpuset-cpu

호스트 CPU의 특정 코어만 사용하도록 제한할 수 있습니다.

// 테스트 컨테이터 생성
docker run -it -d --name cpuset_2 \
--cpuset-cpus=2                   \
alpine

// 컨테이너 확인 
docker inspect test-mem-limit | jq ".[].HostConfig"

 

Block I/O 제한

 

이외에도 많은 옵션이 있지만 공식 문서를 활용하는게 더 빠를듯하네요. 

특정 개념만 정리하고 마치도록 하겠습니다.

 

 

NUMA - System

 

non-uniform memory accessd의 약자로 간단하게 말해서 메모리에 접근하는 시간이 

CPU와 메모리의 상대적인 위치에 따라 달라지는 컴퓨터 메모리 설계 방법입니다. 

 

우리가 배웠을 때 메모리는 주로 RAM(랜덤 엑세스 메모리) 이여서 어디서 접근해도

접근 시간이 동일한 것으로아는 것과는 반대죠?

 

이부분은 따로 글로 빼서 정리할 필요가 있어보이네요. (언제하지 ㅎㅎ..)

 

CFS (Completely Fair Scheduler)

리눅스의 프로세스 스케쥴러 중 하나이며, 현재 리눅스의 디폴트 프로세스 스케쥴러입니다.

이 CFS 스케줄러의 사용량도 Docker를 통해 제어가 가능합니다.

 

ko.wikipedia.org/wiki/%EC%BB%B4%ED%94%8C%EB%A6%AC%ED%8B%80%EB%A6%AC_%ED%8E%98%EC%96%B4_%EC%8A%A4%EC%BC%80%EC%A4%84%EB%9F%AC

 

컴플리틀리 페어 스케줄러 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 단순화된 리눅스 커널 구조 내의 Completely Fair Scheduler(프로세스 스케줄러)의 위치. 컴플리틀리 페어 스케줄러(Completely Fair Scheduler, CFS)는 리눅스 커널의 2.6.23 (2007

ko.wikipedia.org

 

 

 

docs.docker.com/engine/reference/run/

 

| Docker Documentation

Docker run reference Docker runs processes in isolated containers. A container is a process which runs on a host. The host may be local or remote. When an operator executes...

docs.docker.com

www.yes24.com/Product/Goods/84927385

 

시작하세요! 도커/쿠버네티스

본서는 도커를 처음 접하는 개발자를 위한 도커 컨테이너와 이미지의 기본적인 개념을 먼저 설명한 뒤, 도커 컴포즈와 스웜 모드를 통해 컨테이너 애플리케이션을 YAML 파일로 작성하고 클러스��

www.yes24.com

docs.vmware.com/kr/VMware-vSphere/5.5/com.vmware.vsphere.resmgmt.doc/GUID-1DAB8F35-BA86-4063-8459-55D2979B593E.html

 

'개발' 카테고리의 다른 글

[Docker] 4. 컨테이너 로깅  (0) 2020.09.12
[Docker] 2. 도커 볼륨  (0) 2020.09.06
[Docker] 1. Docker 개념 및 소개  (0) 2020.08.30
[Linux] Swap Space를 통해 가상메모리 추가하기  (0) 2020.08.08