"컨테이너도 결국 가상화 아닌가요? VM이랑 뭐가 다르죠?" 클라우드를 배우면 꼭 부딪히는 질문입니다. 둘 다 한 서버에서 여러 환경을 격리해 돌린다는 목표는 같지만, 어느 층을 가상화하느냐가 다릅니다. VM은 하드웨어를 통째로 흉내 내 그 위에 OS를 통째로 올리고, 컨테이너는 OS 커널을 공유한 채 프로세스만 격리합니다. 이 한 줄 차이가 무게와 속도를 가릅니다.
구조 차이 한눈에
| 항목 | VM | 컨테이너 |
|---|---|---|
| 가상화 대상 | 하드웨어 전체 | OS 프로세스 |
| OS | 게스트 OS 통째로 포함 | 호스트 커널 공유 |
| 무게 | 수 GB | 수십 MB |
| 부팅 시간 | 수십 초~분 | 초 단위 |
| 격리 수준 | 강함(완전 분리) | 상대적으로 약함 |
| 관리 도구 | VMware, KVM | Docker, containerd |
핵심은 한 줄입니다. VM은 OS까지 통째로 복제해 무겁지만 격리가 강하고, 컨테이너는 커널을 공유해 가볍고 빠르지만 격리가 상대적으로 얕습니다.
왜 컨테이너가 가벼운가
VM 3개를 띄우면 게스트 OS도 3벌 올라갑니다. 각 OS가 메모리·디스크를 따로 먹으니 무겁습니다. 컨테이너는 호스트의 커널 하나를 공유하므로 OS 복제가 없습니다.
TEXT
[VM] 앱 + 게스트OS ×3 → 하이퍼바이저 → 호스트OS → 하드웨어
[컨테이너] 앱 ×3 → 컨테이너런타임 → 호스트OS → 하드웨어
그래서 같은 서버에서 VM은 몇 개, 컨테이너는 수십 개를 띄울 수 있습니다. 이미지도 OS를 안 담아 수백 MB 대신 수십 MB로 끝나고, 부팅도 OS 부팅이 없어 초 단위입니다.
Docker
docker run -d nginx
이 한 줄이 몇 초 만에 끝나는 이유가 여기 있습니다.
언제 무엇을 고르나
- VM — 커널 수준 제어나 강한 격리가 필요할 때. 서로 다른 OS(Windows·Linux)를 같이 돌리거나, 보안 경계를 확실히 나눠야 하는 멀티 테넌트 환경에 맞습니다.
- 컨테이너 — 같은 OS 위에서 앱을 빠르게 배포·확장할 때. 마이크로서비스, CI/CD, 오토스케일링처럼 가볍고 빠른 기동이 중요한 경우입니다.
- 함께 쓰기 — 실무에선 클라우드 VM 위에 컨테이너를 올리는 조합이 흔합니다. VM으로 격리 경계를 잡고, 그 안에서 컨테이너로 민첩성을 얻습니다.
판단 기준은 "OS 단위 격리가 꼭 필요한가, 아니면 빠른 배포와 밀도가 우선인가"입니다.
요점 정리
- VM은 하드웨어를 가상화해 OS를 통째로 올린다 — 무겁지만 격리가 강하다.
- 컨테이너는 커널을 공유해 프로세스만 격리한다 — 가볍고 빠르지만 격리가 얕다.
- 보안·OS 분리는 VM, 빠른 배포·확장은 컨테이너, 실무에선 둘을 겹쳐 쓴다.
docker run으로 컨테이너를 직접 띄워 VM과 기동 속도·무게가 어떻게 다른지 비교하는 실습은 클라우드 트랙에서 회원가입 없이 무료로 할 수 있습니다.