본문 바로가기

프로젝트/클라우드 스터디

[3회차] Docker CPU와 메모리 제한

도커의 리소스?

  • 도커의 자원 관리 대상은 CPU, Memory, Block I/O 등이 해당 
  • 일반적으로 명령어로 직접 관리는 비추.
    • 컨테이너 오케스트레이션도구인 Docker Swarm이나 Kubernetes등과 연동하여 관리하기.  
  • 자세한 명령어 옵션과 설명은 man docker-run에서 확인 가능

 

Q. 관리해야 하는 이유

컨테이너는 호스트 하드웨어 리소스에 대한 사용 제한X 

 

 

1. 메모리 리소스 제한

docker run -m 크기 이미지명 

#예 
docker run -d -m -512m nginx
→ 최대 메모리 사용량을 512MB로 설정

docker run -d -m 200m --memory-swap 300m nginx
→ 메모리 사용량은 200MB제한, 스왑 메모리는 100MB로 제한




2. CPU제한 

docker run --cpus




3. Block I/O 제한 

q. Block I/O란?
I/O 작업이 진행되는 동안 유저 프로세스가 자신의 작업을 중단한채 I/O 가 끝날 때까지 대기하는 방식이다. 



#예
$ docker run -it --rm --blkio-weight 100 ubuntu /bin/bash
→ 블록 IO는 보통 500으로 설정되는데, 다른 컨테이너와 비교해서 1/5 정도의 낮춰지게 된다.

$ docker run -it --rm --device-write-bps /dev/sda:1mb ubuntu /bin/bash 
→블록 write I/O를 초당 1MB 속도로 제한한다. 

$ docker run -it --rm --device-write-iops /dev/sda:10 ubuntu /bin/bash
→ 초당 데이터 전송개수는 10개로 제한한다. 초당 데이터 전송량은 iops*블록크기(단위 데이터 용량)로 계산한다.