Containers VM

컨테이너와 VM 격리 경계

컨테이너는 같은 호스트 커널을 공유하며 namespace와 cgroup으로 격리하고, VM은 hypervisor 위에 별도 guest OS를 실행한다. 격리 강도와 비용이 다르다.

01

커널 공유 여부 검토

컨테이너는 커널 버그와 syscall surface를 호스트와 공유하지만 시작이 빠르고 가볍다.

02

보이는 이름 공간 분리

namespace는 프로세스 목록, 파일 시스템 mount, 네트워크 인터페이스를 각 컨테이너에 다르게 보이게 한다.

03

자원 상한을 둔다

cgroup은 컨테이너가 CPU와 메모리를 무제한 가져가지 못하도록 제한한다.

Container
프로세스 격리 격리된 프로세스 묶음이지만 커널은 호스트와 공유한다.
이미지와 레이어가 배포 단위다.
VM
OS 단위 격리 각 VM이 자기 guest kernel을 갖고 가상 하드웨어 위에서 실행된다.
격리는 강하지만 무겁다.
Namespace
보이는 자원 분리 PID 1, root filesystem, network stack을 다르게 보이게 한다.
권한과 mount를 함께 본다.
cgroup
사용량 제한 메모리 OOM, CPU share, I/O throttling을 제어한다.
운영 안정성에 중요하다.

격리 수준 · 자원 제한 · 권한 점검

격리 수준 컨테이너가 VM만큼 커널 격리를 제공하지 않는 이유를 설명하는가.
자원 제한 컨테이너에 메모리와 CPU 상한이 설정되어 있는가.
권한 privileged container가 호스트 경계를 약화시키는지 이해하는가.

비교

container: process + namespaces + cgroups + shared kernel
VM: guest OS + virtual hardware + hypervisor