컨테이너 격리

컨테이너 namespace/cgroup

Docker 컨테이너는 VM처럼 커널을 통째로 띄우지 않고, 프로세스·네트워크·마운트 격리와 자원 제한, 이미지 레이어를 조합해 실행 단위를 만든다.

01

이미지 선택

base image와 app layer가 쌓여 root filesystem 스냅샷을 만든다.

layer cache
02

namespace 생성

PID, NET, MNT, UTS, IPC namespace로 프로세스가 보는 범위를 나눈다.

isolation view
03

cgroup 적용

메모리 limit, CPU quota, blkio 정책으로 사용 가능한 자원을 제한한다.

resource control
04

프로세스 시작

컨테이너의 PID 1이 실행되고 writable layer에 변경 사항이 기록된다.

ephemeral state
Kernel
컨테이너는 host kernel 공유 시작이 빠르지만 커널 취약점과 syscall 호환성의 영향을 받는다.
VM보다 얇음
Filesystem
이미지 레이어와 writable layer 컨테이너 삭제 시 writable layer도 사라지므로 영구 데이터는 volume에 둔다.
state 분리
Network
bridge, host, overlay 네트워크 포트 publish, DNS, service discovery가 통신 경로를 결정한다.
namespace + veth
Security
rootless, capability, seccomp 컨테이너 root가 host root와 같지 않도록 권한을 최소화한다.
least privilege

namespace·cgroup 격리 점검

limit 메모리 제한 없이 띄우면 한 컨테이너가 노드 전체를 압박할 수 있다.
volume DB 파일, 업로드 파일처럼 사라지면 안 되는 데이터는 volume에 둔다.
image size 불필요한 빌드 도구와 secret이 이미지 레이어에 남지 않았는지 확인한다.