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 — 시스템 컨테이너