Docker 컨테이너와 가상머신은 모두 애플리케이션을 격리된 환경에서 실행하기 위한 기술이지만, 격리하는 계층이 다릅니다.
가상머신은 하이퍼바이저가 물리 하드웨어를 가상화하고, 각 가상머신이 게스트 운영체제와 자체 커널을 가집니다. 반면 Docker 컨테이너는 운영체제 수준에서 프로세스를 격리하며 여러 컨테이너가 호스트의 커널을 공유합니다.

| 구분 | Docker 컨테이너 | 가상머신 |
|---|---|---|
| 가상화 대상 | 운영체제 수준의 프로세스 | 하드웨어 |
| 운영체제 | 호스트 커널 공유 | VM마다 게스트 OS와 커널 보유 |
| 크기와 실행 속도 | 일반적으로 작고 빠름 | 상대적으로 크고 부팅이 느림 |
| 자원 효율 | 하나의 호스트에 많은 컨테이너 실행 가능 | VM마다 OS 자원이 필요함 |
| 격리 수준 | 프로세스 격리, 커널 공유 | 커널까지 분리되어 일반적으로 더 강한 격리 제공 |
| 운영체제 선택 | 호스트 커널과 호환되어야 함 | 서로 다른 종류의 OS와 커널 실행 가능 |
컨테이너는 가볍고 빠르기 때문에 동일한 운영체제 계열에서 애플리케이션을 자주 배포하고 확장하는 환경에 적합합니다. 반면 가상머신은 서로 다른 운영체제가 필요하거나, 커널 수준의 분리와 강한 격리가 필요하거나, 전체 운영체제 환경을 그대로 실행해야 하는 경우에 적합합니다.
두 기술은 서로 완전히 대체하는 관계가 아닙니다. 실제 클라우드 환경에서는 가상머신으로 인프라와 테넌트를 격리한 뒤, 그 위에서 여러 Docker 컨테이너를 실행하는 방식도 많이 사용합니다.
가상머신이 일반적으로 더 강한 격리를 제공하는 이유는 무엇인가요?
각 가상머신이 자체 커널을 가지고 하이퍼바이저 경계로 분리되기 때문입니다. 컨테이너는 프로세스를 격리하지만 호스트 커널을 공유하므로 커널 취약점의 영향을 함께 받을 가능성이 있어 최소 권한과 보안 설정이 중요합니다.
가상머신과 Docker를 함께 사용할 수 있나요?
가능합니다. 클라우드에서 가상머신으로 인프라나 테넌트 경계를 분리하고, 각 가상머신 위에 컨테이너 런타임을 설치하여 여러 애플리케이션을 컨테이너로 운영하는 구성이 일반적입니다.
컨테이너 대신 가상머신을 선택해야 하는 경우는 언제인가요?
호스트와 다른 운영체제나 커널을 실행해야 하거나, 전체 OS에 의존하는 레거시 애플리케이션을 운영하거나, 커널 수준의 더 강한 격리가 필요한 경우에는 가상머신이 적합합니다.