가상 머신과 컨테이너의 차이: 가상화하는 계층·커널·시작 속도·격리 강도·용도 비교
둘 다 한 대의 컴퓨터 위에서 여러 애플리케이션을 서로 격리해 실행하는 방식이지만, 가상화하는 계층이 다릅니다. 가상 머신은 하이퍼바이저가 CPU·메모리·디스크·네트워크 등의 하드웨어를 가상으로 만들고, 그 위에서 가상 머신마다 커널을 포함한 OS 전체를 실행합니다. 컨테이너는 호스트 OS의 커널을 공유한 채, 네임스페이스와 cgroups 같은 커널 기능으로 프로세스가 볼 수 있는 것과 쓸 수 있는 자원을 나눕니다. 컨테이너는 OS를 부팅하지 않으므로 가볍고 시작도 빠른 반면, 격리 강도와 실행할 수 있는 OS의 종류에서는 가상 머신이 앞섭니다. 클라우드에서는 가상 머신 위에서 컨테이너를 실행하는 식으로 둘을 조합해 쓰는 것이 일반적입니다.
| 비교 항목 | 가상 머신 | 컨테이너 |
|---|---|---|
| 가상화하는 계층 | 하드웨어. 하이퍼바이저가 CPU·메모리·디스크·네트워크 장치를 가상으로 만들어 나누어 준다 | OS. 호스트 커널 위에서 프로세스가 볼 수 있는 것(프로세스 ID, 네트워크, 파일 시스템 등)과 쓸 수 있는 자원을 나눈다 |
| OS 커널 | 가상 머신마다 자신의 커널을 포함한 OS(게스트 OS)를 실행한다 | 호스트 커널을 모든 컨테이너가 공유한다. 컨테이너 이미지에는 커널이 들어 있지 않다 |
| 실행할 수 있는 OS | 호스트와 다른 종류의 OS도 실행할 수 있다(Linux 호스트 위에서 Windows를 실행하는 등) | 호스트 커널에서 동작하는 것으로 한정된다. Linux 컨테이너에는 Linux 커널이 필요하다 |
| 이미지 크기 | OS 전체를 포함하므로 일반적으로 GB 단위가 된다 | 애플리케이션과 필요한 라이브러리뿐이므로 일반적으로 가상 머신보다 훨씬 작다 |
| 시작 속도 | OS 부팅부터 시작하므로 수십 초에서 몇 분이 걸리는 경우가 많다 | 프로세스를 시작하기만 하므로 빠르며, 일반적으로 몇 초 안에 동작하기 시작한다 |
| 격리 강도 | 강하다. 하드웨어 수준에서 나누므로 게스트 OS 커널의 문제가 다른 가상 머신에 미치기 어렵다 | 가상 머신보다 약하다. 커널을 공유하므로 커널 취약점이 악용되면 호스트나 다른 컨테이너에 영향이 미칠 수 있다 |
| 자원 효율 | 게스트 OS마다 메모리와 CPU를 쓰므로 한 대에서 실행할 수 있는 수가 적은 편 | OS가 중복되지 않으므로 같은 자원으로 더 많이 실행할 수 있다 |
| 주요 용도 | 종류가 다른 OS의 공존, 서버 통합, IaaS의 가상 머신, 강한 격리가 필요한 환경 | 마이크로서비스, CI/CD에서의 테스트와 배포, Kubernetes를 이용한 대규모 운영, 개발 환경과 운영 환경을 맞추는 것 |
수치는 대략적인 자릿수 기준이며, 공정 세대와 제품에 따라 달라져요.