하드웨어를 통째로 흉내 내 그 위에서 완전한 게스트 OS를 돌리는 방식.
하이퍼바이저 두 종류
-
Type 1 (베어메탈) — 하드웨어 위에 직접 — ESXi · Hyper-V · KVM
- 성능이 좋고 운영 환경에서 쓴다
-
Type 2 (호스트형) — 호스트 OS 위에서 — VirtualBox · VMware Workstation
- 설치가 쉽고 개발·테스트에 쓴다
컨테이너와의 결정적 차이
-
가상 머신 — 게스트 커널을 각자 갖는다
- 부팅에 수십 초, 이미지가 GB 단위
- 커널까지 격리되므로 보안 경계가 강하다
- 다른 OS 를 돌릴 수 있다 (리눅스 위에 윈도우)
-
컨테이너 — 호스트 커널을 공유한다
- 시작이 밀리초, 이미지가 MB 단위
- 커널 취약점이 곧 탈출 경로가 될 수 있다
- 같은 커널 계열만 가능하다
컨테이너를 떠받치는 커널 기능
-
네임스페이스 — 무엇이 '보이는가' 를 격리
- PID · 네트워크 · 마운트 · 사용자 · UTS · IPC
-
cgroup — 무엇을 '얼마나 쓰는가' 를 제한
- CPU · 메모리 · I/O
-
둘은 원래 있던 리눅스 기능이고, 컨테이너 런타임이 이를 조합한 것이다
-
"컨테이너는 프로세스일 뿐" 이라는 말이 여기서 나온다
실무 선택
격리 강도가 중요하다(멀티테넌트·신뢰 못 할 코드) → VM
-
밀도와 기동 속도가 중요하다 — → 컨테이너 둘 다 필요하다 → Firecracker·gVisor 같은 경량 VM
- (컨테이너처럼 가볍고 VM 처럼 커널이 분리된다)
트랩-앤-에뮬레이트와 하드웨어 지원
고전적 가상화의 원리
- 게스트가 특권 명령을 실행하면 트랩이 발생
- 하이퍼바이저가 가로채 흉내 낸 뒤 돌려준다
x86 은 원래 이것이 불가능했다
- 일부 명령이 유저 모드에서 트랩 없이 '조용히 다르게' 동작했다
- 준가상화(Xen) 나 바이너리 변환(VMware) 으로 우회했다
VT-x · AMD-V 가 게스트 전용 실행 모드를 하드웨어로 제공하면서 전가상화가 빠르고 단순해졌다
메모리와 I/O 가상화
- 메모리 — 게스트 가상 → 게스트 물리 → 호스트 물리, 두 단계 변환
- EPT/NPT 가 하드웨어로 처리 (없으면 섀도 페이지 테이블)
- I/O — · 완전 에뮬레이션 — 느리다
- virtio 반가상화 드라이버 — 게스트가 가상화를 인지해 빠르다
- SR-IOV 패스스루 — 물리 장치를 직접 할당, 가장 빠르다
컨테이너 탈출의 현실적 경로
-
특권 컨테이너(--privileged) 실행
-
도커 소켓을 컨테이너에 마운트 (= 호스트 전체 권한)
-
호스트 경로를 rw 로 마운트
-
커널 취약점
-
대부분은 커널 버그가 아니라 설정 실수다
-
non-root 실행 · capability 최소화 · seccomp 프로파일이 기본 방어
면접 함정
- ❌ "컨테이너는 가벼운 VM" → 커널 공유 여부가 근본적으로 다르다.
- ❌ "컨테이너도 커널을 갖는다" → 호스트 커널을 쓴다.