Container launch

Docker 컨테이너 격리

이미지 레이어를 루트 파일 시스템으로 합치고, 네임스페이스와 cgroup, capability, seccomp으로 실행 범위를 제한한다.

overlayfs

읽기 전용 레이어와 쓰기 레이어

이미지 레이어 위에 컨테이너별 writable layer를 얹어 같은 이미지를 여러 컨테이너가 공유한다.

namespaces

보이는 세계 분리

PID, mount, network, UTS, IPC, user namespace가 프로세스가 보는 자원 이름 공간을 나눈다.

cgroups

사용량 제한

CPU quota, memory.max, pids.max 같은 값으로 컨테이너가 소비할 수 있는 자원 상한을 둔다.

capabilities

root 권한 세분화

컨테이너 내부 root라도 CAP_SYS_ADMIN 같은 강한 권한을 빼면 호스트 전체 영향 작업을 줄일 수 있다.

seccomp

시스템 콜 필터

mount, reboot, keyctl처럼 컨테이너 애플리케이션에 불필요한 시스템 콜을 기본 정책에서 차단한다.

공유 커널

커널 취약점은 모든 컨테이너가 같은 공격면을 공유하므로 패치와 런타임 격리가 중요하다.

호스트 마운트

/var/run/docker.sock이나 민감한 호스트 경로를 마운트하면 컨테이너 경계가 사실상 약해진다.

PID 1 의미

컨테이너의 첫 프로세스는 시그널 처리와 좀비 프로세스 회수를 맡으므로 init 동작을 고려해야 한다.