Docker

컨테이너 자원 할당 제한

쿠와와 2020. 12. 30. 19:03

가장 간단한 방법은 

docker inspect 컨테이너name 명령어를 쓰는 것이다. 

  • | grep \"Memory\" : 메모리 확인 

 

run 명령어에서 설정된 컨테이너에서 할당 자원을 제한하거나 업데이트 할 수 있는 방법 

docker update [변경할 자원 제한] [컨테이너name]

 

메모리 제한 

( 너무 작은 메모리는 할당하면 메모리 부족으로 컨테이너 실행되지 않음 )

docker run -d

--memory="1g"

--name memory_1g

nginx

 

CPU 제한 

컨테이너에 가중치를 설정해 해당 컨테이너가 CPU를 얼마나 사용할 수 있는지 나타내준다. (비율로 생각하면 됨)

docker run -d

--cpu-shares 1024 

--name cpu_share

nginx

 

--cpiset-cpu : 호스트에 cpu가 여러개 있을 경우 특정 cpu만 사용하도록 설정할 수 있음 

 

컨테이너 CFS(conpletely Fair scheduler_ 주기를 바꿔줄 수도 있다. 

--cpu-period : 기본값은 100000, 100ms 

--cpu-quota : --cpu-period에 설정된 시간 중 CPU 스케줄링에 얼마나 할당할 것인지 설정 

ex) --cpu-period=100000 --cpu-quota=250000 이렇게 사용하면 cpu 주기를 1/4만 사용하겠다. (성능 1/4 로 감소)

 

--cpus : 위에 CFS 바꾸는 것과 동일하지만 그냥 비율을 넣어준다. ex) --cpus=0.5

 

Block I/O 제한

컨테이너를 생성할 때 아무런 옵션도 설정하지 않으며 컨테이너 내부에서 파일을 읽고 쓰는 대역폭에 제한이 설정되지 않는다. 하나의 컨테이너가 블록 입출력을 과도하게 사용하지 않게 설정할려면 run 명령어에서

--device-write-bps,

--device-read-bps,

--device-write-iops,

--device-read-iops

옵션을 지정해 블록 입출력을 제한을 주어야 한다. 

단, Direct I/O 의 경우에만 블록 입출력이 제한되며, Buffered I/O 는 제한되지 않는다.

--device-write-bps, --device-read-bps : 각기 쓰고 읽는 작업의 초당 제한을 설정하며, kb, mb, gb 단위로 제한할 수 있다.

다음 명령어로 컨테이너를 생성하면 초당 쓰기 작업의 최대치가 1MB 로 제한된다.

# docker run -it \

--device-write-bps /dev/xvda:1mb \

ubuntu:14.04

여기서 사용되는 Block I/O 를 제한하는 옵션은 [디바이스 이름]:[값] 형태로 설정

 

 

다음 명령어는 10MB의 파일을 Direct I/O 를 통해 쓰기 작업을 수행한다.

root@6762cabed8b1:/# dd if=/dev/zero of=test.out bs=1M conut=10 oflag=direct

10+0 records in

10+0 record out

10485760 bytes (10 MB, 10MiB) copied, 10.0315 s, 1.0MB/s

CPU의 자원 할당에서 --cpu-share 에 상대적인 값을 입력했던 것처럼 --device-write-iops, --device-read-iops 에도 상대적인 값을 입력함.

# docker run -it \

--device-write-iops /dev/xvda:5 \

ubuntu:14.04

root@9af770684ef6:/# dd if=/dev/zero of=test.out bs=1M count=10 oflag=direct

10+0 records in

10+0 record out

10485760 bytes (10 MB, 10MiB) copied, 2.02604 s, 5.2MB/s

# docker run -it \

--device-write-iops /dev/xvda:10 \

ubuntu:14.04

root@12ad7be4d3df:/# dd if=/dev/zero of=test.out bs=1M count=10 oflag=direct

10+0 records in

10+0 record out

10485760 bytes (10 MB, 10MiB) copied, 1.02254 s, 10.3MB/s

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

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

단, 모든 스토리지 드라이버에서 컨테이너의 저장 공간을 제한할 수 있는 것은 아니다.

따라서 컨테이너 애플리케이션이 해당 스토리지 드라이버에 적합하지 않다면 이 기능을 사용하지 않는 것이 좋을 수도 있다.