아래에서는 운영체제 커널 관점에서 전통적인 가상 머신(VM) 기반의 “가상환경”과 Docker 컨테이너가 커널을 어떻게 사용·격리(isolation)하는지를 심층적으로 비교합니다.
---
## 1. 커널 레벨 가상화(하이퍼바이저 기반 VM)
### 1.1 아키텍처 개요
- **하이퍼바이저(Hypervisor)**
- Type-1(베어메탈): 하드웨어 위에서 직접 구동 (예: VMware ESXi, Xen).
- Type-2(호스트형): 호스트 OS 위에서 동작 (예: VirtualBox, VMware Workstation).
- **게스트 커널**
- 각 VM이 자체 커널(Guest Kernel)을 가짐.
- 호스트 커널과 분리되어, 완전히 독립된 OS처럼 동작.
- **장치 가상화**
- CPU: VT-x/AMD-V 등의 하드웨어 가상화 확장 이용.
- 메모리: EPT(Extended Page Tables) 등으로 페이지 트랜슬레이션 수행.
- 네트워크·스토리지: 가상 NIC·가상 디스크 드라이버(vNIC, vDisk) 통해 I/O 요청을 중재.
### 1.2 장점 및 단점
- **장점**
- 완전한 커널·드라이버 독립성: 게스트 OS 종류·버전 자유.
- 높은 격리 수준(Isolation): 한 VM 커널 결함이 호스트·다른 VM에 영향 적음.
- **단점**
- 부팅 오버헤드: 게스트 커널 부팅 필요 → 수십 초 소요.
- 메모리·디스크 중복: 게스트 커널·모듈이 별도 로드 → 자원 중복.
- 성능 페널티: 특권 명령 가상화, I/O 패스 스루 번역 비용.
---
## 2. 컨테이너 기반 가상화(Docker)
### 2.1 아키텍처 개요
- **단일 커널 공유**
- 모든 컨테이너는 호스트 OS 커널을 그대로 공유.
- 게스트 커널 부팅 과정 없음.
- **네임스페이스(Namespaces)**
- PID, NET, MNT, IPC, UTS, USER 네임스페이스로 프로세스·리소스 격리.
- 예: PID 네임스페이스 → 컨테이너 내부에서 프로세스 ID는 1부터 시작.
- **컨트롤 그룹(Cgroups)**
- CPU, 메모리, I/O, 블록 디바이스 사용량 제한·계량.
- 리소스 과다 사용 방지 및 QoS 보장.
- **유니온 파일 시스템**
- OverlayFS, AUFS 등을 이용해 이미지 계층(layer) 구성.
- 불필요한 중복 데이터를 줄이고 레이어별 캐시 활용.
### 2.2 장점 및 단점
- **장점**
- 경량화: 커널 중복 없음 → 빠른 시작(수 ms~수 초).
- 낮은 자원 오버헤드: 동일 커널·드라이버 공유.
- 데브옵스 친화: 이미지 빌드, 레이어 캐시 활용으로 일관성 제공.
- **단점**
- 커널 의존성: 호스트 커널 버전·설정 제약 (예: 특정 커널 모듈 필요 시 컨테이너 내 로드 불가).
- 격리 수준: 커널 공유로 보안 격리면 VM보다 낮음(커널 취약점 노출 위험).
---
## 3. 커널 사용 관점 핵심 차이점
|구분|전통적 VM|Docker 컨테이너|
|---|---|---|
|**커널 수**|호스트 커널 1 + 게스트 커널 N (VM마다 독립 커널)|호스트 커널 1개만 사용|
|**커널 부팅**|게스트 커널 별도 부팅 필요|부팅 불필요, 프로세스 실행만으로 컨테이너 시작|
|**드라이버**|게스트 커널에 디바이스 드라이버 로드|호스트 커널 모듈만 사용|
|**네임스페이스**|하이퍼바이저가 CPU·메모리 가상화 계층 제공|리눅스 네임스페이스로 프로세스·리소스 격리|
|**성능 오버헤드**|가상화 확장 기반 특권 명령 트랩 → 높은 오버헤드|시스템 콜 직접 수행 → 거의 네이티브 성능|
|**격리 수준**|커널 간 완전 분리 → 강력한 보안·안정성|커널 공유 → 커널 취약점에 취약할 수 있음|
---
## 4. 성능·보안·운영 관점 시사점
1. **성능**
- 컨테이너는 커널 레벨 오버헤드가 적어 I/O, CPU, 메모리 성능이 거의 네이티브
- VM은 특권 명령 가상화, I/O 패스 스루, EPT 비용 등으로 약간의 성능 저하(1–10% 정도)
2. **보안 격리**
- VM: 하이퍼바이저와 VM 커널 간 경계 → 커널 취약점 격리 우수
- 컨테이너: 동일 커널 공유 → seccomp, SELinux/AppArmor 등 추가 보안 레이어 필요
3. **운영 편의성**
- 컨테이너: 이미지 빌드·배포·스케일링 간편, CI/CD 통합 용이
- VM: OS 업데이트·패치·스냅샷 관리가 복잡, 무거운 환경 설정에 적합
---
### 결론
- **VM(가상환경)** 은 **“게스트 커널을 완전 분리”** 하여 높은 보안·다양한 OS 지원을 제공하지만, 부팅 및 리소스 중복으로 오버헤드가 크다.
- **Docker 컨테이너** 는 **“호스트 커널을 공유”** 함으로써 경량·고성능·빠른 시작을 가능케 하나, 커널 취약점 노출 위험이 있어 보안 설정이 중요하다.
커널 사용 관점에서 볼 때, **“커널 분리 vs 공유”** 가 VM과 컨테이너의 근본적 차이라고 할 수 있습니다.