728x90
[Docker] 컨테이너 리소스
도커 컨테이너를 생성할 때, 리소스 제한이 가능하다.
CPU, Memory 등의 리소스를 제한하는 방법을 알아보자
테스트용으로 컨테이너를 하나 띄워놓고 진행을 해보자
docker run --name nginx -d nginx:latest
컨테이너의 리소스는 cgroup의 리소스를 이용해서 할당한다.
💡cgroups (control groups)
프로세스들의 자원의 사용 (CPU, 메모리, 입출력, 네트워크 등)을
제한하고 격리시키는리눅스 커널 기능
단일 또는 태스크 단위의 프로세스 그룹에 대한 자원 할당을 제어한다.
Memory
1. 메모리 할당
먼저 메모리의 limit을 확인해보자
docker stats nginx
아무런 설정을 하지 않고, 컨테이너를 생성했을 시 메모리의 limit은 위 사진과 같다.
그럼 이제 메모리 할당을 한 컨테이너를 생성 후 확인을 해보자
docker run --name nginx_limit -m 1G -d nginx:latest
최대로 사용 가능한 memory가 1G로 제한된 모습을 확인할 수 있다.
위처럼 -m 옵션을 사용하면 메모리 할당이 가능하다.
그 외에도 메모리 관련 옵션은 다양하게 있는데 하나씩 살펴보자
옵션 | 설명 |
-m | 컨테이너가 사용할 수 있는 최대 메모리 |
-memory-reservation | -m 보다 적은 값으로 구성하는 소프트 제한 값 |
-memory-swap | 컨테이너가 디스크로 스왑 할 수 있도록 하는 허영된 메모리 |
-memory-swappiness | 컨테이너가 사용하는 swappiness 값 |
-oom-kill-disable | 메모리는 할당량보다 많이 쓰려고하면 Kill OOM 에러가 발생했을시, 커널이 컨테이너의 프로세스를 죽이지 않음 |
2. Swap 메모리 할당
💡Swap memory
실제 메모리 ram이 가득 찼지만 더 많은 메모리가 필요할 때,
디스크 공간을 이용하여 부족한 메모리를 대체할 수 있는 공간
리눅스 커널은 실제 메모리에 올라와 있는 메모리 블록들 중 당장 쓰이지 않는 것을
디스크에 저장하고, 이를 통해 사용 가능한 메모리 영역을 늘린다.
Swap 메모리에는 메모리 1G가 포함되어 있으며, Swap 메모리의 default는 기본 메모리의 2배다
docker run -m 1G --memory-swap 2G -d --name web nginx
docker inspect -f '{{.HostConfig.Memory}}' web
docker inspect -f '{{.HostConfig.MemorySwap}}' web
메모리와 Swap 메모리를 동일하게 두면, swap 메모리를 사용하지 않는다는 뜻이다.
docker run -m 1G --memory-swap 1G -d --name web2 nginx
docker inspect -f '{{.HostConfig.Memory}}' web2
docker inspect -f '{{.HostConfig.MemorySwap}}' web2
CPU
CPU 관련 옵션은 다음과 같다.
참고로 CPU는 메모리와 다르게 할당량보다 많이 써도 Kill이 되진 않지만, 속도가 느려진다.
옵션 | 설명 |
--cpus=<values> | 컨테이너가 사용할 수 있는 CPU 리소스 ex) --cpus=0.2 : 1개의 CPU를 사용중인 경우 이 CPU의 20%만 사용 가능 --cpus=1.5 : 여러개의 CPU를 사용 중인 경우 1.5개의 CPU 사용이 보장 |
--cpuset-cpus | 컨테이너가 사용할 수 있는 CPU나 코어를 제한 ex) --cpuset-cups="0-3" : 첫 번쨰 부터 네번째 CPU 사용 --cpuset-cpus="1,3" : 두번째와 네번째 CPU 사용 |
--cpu-shares | 컨테이너가 사용하는 CPU 비중을 1024 값을 기반으로 설정 |
테스트를 위해 stress 이미지를 생성한다.
vi Dockerfile
~
FROM debian
RUN apt-get update; apt-get install stress -y
CMD ["/bin/sh", "-c", "stress -c 2"]
~
docker build . -t stress:latest
생성한 이미지로 컨테이너 CPU 리소스를 할당한 후 테스트 한다.
docker run -c 2048 --name cpuload1 -d stress:latest
docker run --name cpuload2 -d stress:latest
docker run -c 512 --name cpuload3 -d stress:latest
docker run -c 512 --name cpuload4 -d stress:latest
docker stats
할당을 해준 CPU에 따라 CPU 사용률이 다른 것을 확인 할 수 있다.
반응형
'🐳 Container > Docker' 카테고리의 다른 글
[Docker] Docker 이미지 빌드를 위한 Makefile 활용 방법 (0) | 2024.02.14 |
---|---|
[Docker] ubuntu 22.04 docker 설치 (0) | 2023.10.06 |
[Docker] 도커 네트워크 (0) | 2023.08.17 |
[Docker] 도커 스토리지 볼륨 마운트 (0) | 2023.05.22 |
[Docker] 도커 이미지 빌드 (Docker Image Build) (0) | 2023.04.15 |