컨테이너 vs 가상머신 (Container vs VM)
가상머신은 하이퍼바이저 위에서 게스트 OS를 통째로 띄워 하드웨어 수준으로 격리하고, 컨테이너는 호스트 커널을 그대로 공유하면서 namespace와 cgroups로 프로세스를 격리합니다. 게스트 OS라는 한 층이 통째로 빠지기 때문에 컨테이너는 시작이 초 단위로 빠르고 이미지가 가볍지만, 격리 경계는 VM보다 얕습니다.
01컨테이너 vs 가상머신 (Container vs VM)
개념 한눈에 보기가상머신 · 게스트 OS를 통째로
가상머신은 하이퍼바이저가 하드웨어를 흉내 내고, 그 위에 게스트 OS를 통째로 띄웁니다. 앱 하나를 돌리려고 운영체제 한 벌을 함께 올리는 셈입니다.
VM마다 자기 커널을 가진 게스트 OS가 들어갑니다. 격리는 하드웨어 수준으로 아주 단단하지만, 같은 OS가 세 번 중복됩니다.
그 결과 VM 하나가 수 GB이고 부팅에 수십 초~분이 걸립니다. 서버 한 대에 띄울 수 있는 개수도 게스트 OS 몫만큼 줄어듭니다.
컨테이너 · 호스트 커널 공유
컨테이너는 게스트 OS 층을 통째로 들어냅니다. 앱과 라이브러리만 담고, 커널은 호스트 것을 그대로 씁니다.
세 컨테이너가 호스트 커널 하나를 공유합니다. OS를 중복해서 올리지 않으니 이미지가 수십~수백 MB로 줄고, 시작이 즉각적입니다.
그럼 격리는 어떻게 할까요? 커널의 namespace가 프로세스·네트워크·파일시스템 '시야'를 분리해, 컨테이너는 자기 것만 보게 됩니다.
cgroups는 CPU·메모리 사용량에 상한을 겁니다. 한 컨테이너가 자원을 독식해 옆 컨테이너를 굶기지 못하게 막습니다.
Docker Engine(containerd·runc)이 이미지를 풀고 namespace·cgroups를 설정해 프로세스를 띄웁니다. 부팅이 아니라 '프로세스 실행'이라 초 단위로 끝납니다.
대신 커널을 공유한다는 사실이 곧 격리의 한계입니다. 커널 취약점은 컨테이너 경계를 넘을 수 있고, 다른 커널이 필요한 워크로드(리눅스 호스트 위의 윈도우 컨테이너)는 그대로 돌릴 수 없습니다.
02 쉽게 이해하기
For EveryoneVM 은 게스트 OS 를 통째로 올리고, 컨테이너는 그 층을 없애 호스트 커널을 공유하며 격리는 namespace 와 cgroups 가 맡습니다. 용량과 시작 시간을 얻는 대신 커널을 공유한다는 것이 곧 격리의 한계입니다.
VM은 앱마다 게스트 OS 전체를 얹어야 해서 수 GB에 부팅도 분 단위입니다.
컨테이너는 호스트 커널을 공유하고 앱과 라이브러리만 담으므로 수십 MB에 시작이 즉각적입니다.
대신 커널을 공유한다는 사실 자체가 격리의 한계라, 커널 취약점은 컨테이너 경계를 넘을 수 있고 다른 커널(예: 리눅스 호스트에서 윈도우 컨테이너)은 그대로 돌릴 수 없습니다.
- –컨테이너를 쓸지 VM을 쓸지 판단
- –마이크로서비스 밀도·부팅 속도 설계
- –멀티테넌시에서 격리 수준 결정
- –컨테이너 보안 경계 이해
03 자주 묻는 질문
FAQ컨테이너 vs 가상머신 (Container vs VM)란 무엇인가요?+
가상머신은 하이퍼바이저 위에서 게스트 OS를 통째로 띄워 하드웨어 수준으로 격리하고, 컨테이너는 호스트 커널을 그대로 공유하면서 namespace와 cgroups로 프로세스를 격리합니다. 게스트 OS라는 한 층이 통째로 빠지기 때문에 컨테이너는 시작이 초 단위로 빠르고 이미지가 가볍지만, 격리 경계는 VM보다 얕습니다.
컨테이너 vs 가상머신 (Container vs VM)은(는) 어디에 사용하나요?+
컨테이너를 쓸지 VM을 쓸지 판단, 마이크로서비스 밀도·부팅 속도 설계, 멀티테넌시에서 격리 수준 결정, 컨테이너 보안 경계 이해
컨테이너 vs 가상머신 (Container vs VM)를 쉽게 비유하면?+
VM 은 게스트 OS 를 통째로 올리고, 컨테이너는 그 층을 없애 호스트 커널을 공유하며 격리는 namespace 와 cgroups 가 맡습니다. 용량과 시작 시간을 얻는 대신 커널을 공유한다는 것이 곧 격리의 한계입니다.
