일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- jupyter lab
- 포인터
- gitlab
- jupyter
- c# 추상 클래스
- C언어 포인터
- c#
- git
- HTML
- github
- vim
- c# winform
- 도커
- dart 언어
- Unity
- Python
- 플러터
- C# delegate
- Houdini
- 다트 언어
- Flutter
- c# 윈폼
- docker
- 유니티
- 구조체
- C++
- Algorithm
- 깃
- c언어
- Data Structure
Archives
- Today
- Total
nomad-programmer
[DevOps/Docker] 릴리스 관리 장치 (cgroups) 본문
Docker에서는 물리 머신 상의 자원을 여러 컨테이너가 공유하며 작동한다. 이때 Linux 커널의 기능인 'control groups(cgroups)' 기능을 사용하여 자원의 할당 등을 관리한다.
Linux에서는 프로그램을 프로세스로서 실행한다. 프로세스는 하나 이상의 스레드 모음으로 움직인다. cgroups는 프로세스와 스레드를 그룹화하여, 그 그룹 안에 존재하는 프로세스와 스레드에 대한 관리를 수행하기 위한 기능이다. 예를 들어 호스트 OS의 CPU나 메로리와 같은 자원에 대해 그룹별로 제한을 둘 수 있다. cgroups로 컨테이너 안의 프로세스에 대해 자원을 제한함으로써 예를 들면 어떤 컨테이너가 호스트 OS의 자원을 모두 사용해 버려서 동일한 호스트 OS 상에서 가동되는 다른 컨테이너에 영향을 주는 일을 막을 수 있다.
cgroups로 관리할 수 있는 주요한 일은 다음과 같다.
항목 | 설명 |
cpu | cpu 사용량을 제한 |
cpuacct | cpu 사용량 통계 정보를 제공 |
cpuset | cpu나 메모리 배치를 제어 |
memory | 메모리나 swap 사용량을 제한 |
devices | 디바이스에 대한 액세스 허가/거부 |
freezer | 그룹에 속한 프로세스 정지/재개 |
net_cls | 네트워크 제어 태그를 부가 |
blkio | 블록 디바이스 입출력량 제어 |
cgroups는 계층 구조를 사용하여 프로세스를 그룹화하여 관리할 수 있다. 예를 들어 사용자 애플리케이션과 서버와 같은 데몬 프로세스를 나눠, 각각의 그룹에 CPU 사용량을 할당할 수 있다. cgroups의 부모 자식 관계에서는 자식이 부모의 제한을 물려받는다. 예를 들어 자식이 부모의 제한을 초과하는 설정을 하더라도 부모 cgroups의 제한에 걸린다.
자식은 부모 그룹의 제한을 초과하여 할당할 수 없으므로 중요한 프로세스라도 영향을 받지 않는다.
'DevOps > Docker' 카테고리의 다른 글
[DevOps/Docker] Docker에서 'Hello World' (0) | 2020.11.19 |
---|---|
[DevOps/Docker] 네트워크 구성 (가상 브릿지/가상 NIC) (0) | 2020.11.18 |
[DevOps/Docker] 컨테이너를 구획화하는 장치 (namespace) (0) | 2020.11.17 |
[DevOps/Docker] 컴포넌트 (0) | 2020.11.17 |
[DevOps/Docker] 프로그래머와 Docker (0) | 2020.11.17 |
Comments