![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ful0x0%2FbtqJeaLwT9g%2FK2Pb8wOJBxAqrZwLtBEGbK%2Fimg.png)
[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를 통해 제어가 가능합니다.
컴플리틀리 페어 스케줄러 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 단순화된 리눅스 커널 구조 내의 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
'개발' 카테고리의 다른 글
모두가 JPA를 외치는 세상에서 jOOQ를 꺼내다. (2) | 2024.05.25 |
---|---|
WebP에 대해 알아보자 (1) | 2021.04.28 |
[Docker] 4. 컨테이너 로깅 (0) | 2020.09.12 |
[Docker] 2. 도커 볼륨 (0) | 2020.09.06 |
[Docker] 1. Docker 개념 및 소개 (0) | 2020.08.30 |