Logo 리눅스

cgroups와 namespaces — 컨테이너의 기초

야옹이 | 04.27 | 조회 77 | 좋아요 0

Docker가 마법으로 보이지만 실제로는 「리눅스 커널의 cgroups + namespaces」 위에서 동작.

이 기능들을 이해하면 컨테이너 깊이가 다름.



cgroups (Control Groups).

「프로세스 그룹의 자원 제한·계측」.

CPU·메모리·IO·네트워크 등 자원을 그룹별로 제한·할당.

systemd가 자동으로 각 서비스를 cgroup에 할당.



namespaces.

「프로세스의 격리된 뷰」.

한 프로세스에게 「자기만의 PID 공간·네트워크·마운트·사용자·UTS·IPC」를 줌 — 같은 호스트에서 「나만의 우주」.

컨테이너의 격리가 이걸로.



직접 사용.

unshare 명령으로 namespace 생성.

unshare -fp --mount-proc bash — 새 PID·마운트 namespace에서 bash.

그 안에서 ps aux하면 「자기 + bash만」 보임.



Docker = cgroups + namespaces + chroot + 이미지 관리 + ...

cgroups·namespaces는 「격리·제한」, 그 위에 「이미지 관리·네트워크·볼륨 등」을 더한 게 Docker.

직접 cgroups·namespaces 다루는 건 매우 어렵지만 「Docker 내부 이해」와 「커스텀 컨테이너 도구」 작성에 필수 지식.




한 줄 요약


cgroups는 자원 제한·계측, namespaces는 프로세스 격리 — 둘이 컨테이너의 커널 기반.

unshare로 직접 namespace 만들기.

Docker는 이 위에 이미지·네트워크 더한 것.




더 알아볼 것


- systemd-cgls·systemd-cgtop

- podman — daemonless 대안

- LXC·LXD — 시스템 컨테이너

공유하기
목록보기

목록보기
신고하기

신고 사유를 선택해 주세요.