본문 바로가기

About/Docker

[Docker] Docker의 작동 구조 (2) (cgroups)

릴리즈 관리 장치(cgroups)

Docker에서는 물리 머신 상의 자원을 여러 컨테이너가 공유하여 작동된다. 

이 때 Linux 커널의 기능인 'control groups(cgroups)' 기능을 사용하여 자원의 할당 등을 관리한다.

 

cgroups는 프로세스와 스레드를 그룹화하여, 그 그룹 안에 존재하는 프로세스와 스레드에 대한 관리를 수행한다.

(예를 들어 호스트 OS의 CPU나 메모리와 같은 자원에 대해 그룹별로 제한을 둘 수 있다. )

 

cgroups로 관리할 수 있는 주요한 일은 다음과 같다.

 

cgroups의 주요 서브 시스템
항목 설명
cpu cpu 사용량을 제한
cpuacct cpu 사용량 통계 정보를 제공
cpuset cpu나 메모리 배치를 제어
memory 메모리나 스왑 사용량을 제한
devices 디바이스에 대한 액세스 허가/거부
freezer 그룹에 속한 프로세스 정지/재개
net_cls 네트워크 제어 태그를 부가
blkio 블록 디바이스 입출력량을 제어

 

cgroups는 계층 구조를 사용하여 프로세스를 그룹화하여 관리할 수 있다.

예를 들어 사용자 애플리케이션과 서버와 같은 데몬 프로세스를 나눠, 각각의 그룹에 CPU 사용량을 할당할 수 있다.

cgroups의 계층 구조

cgroups의 부모 자식 관계에서는 자식이 부모의 제한을 물려받는다.

따라서 자식은 부모 그룹의 제한을 초과하여 할당할 수 없으므로 중요한 프로세스라도 영향을 받지 않는다.

 

참고

https://book.naver.com/bookdb/book_detail.nhn?bid=13987575