Docker 컨테이너와 가상머신은 모두 애플리케이션을 격리된 환경에서 실행하기 위한 기술이지만, 격리하는 계층이 다릅니다.

가상머신은 하이퍼바이저가 물리 하드웨어를 가상화하고, 각 가상머신이 게스트 운영체제와 자체 커널을 가집니다. 반면 Docker 컨테이너는 운영체제 수준에서 프로세스를 격리하며 여러 컨테이너가 호스트의 커널을 공유합니다.

구분Docker 컨테이너가상머신
가상화 대상운영체제 수준의 프로세스하드웨어
운영체제호스트 커널 공유VM마다 게스트 OS와 커널 보유
크기와 실행 속도일반적으로 작고 빠름상대적으로 크고 부팅이 느림
자원 효율하나의 호스트에 많은 컨테이너 실행 가능VM마다 OS 자원이 필요함
격리 수준프로세스 격리, 커널 공유커널까지 분리되어 일반적으로 더 강한 격리 제공
운영체제 선택호스트 커널과 호환되어야 함서로 다른 종류의 OS와 커널 실행 가능

컨테이너는 가볍고 빠르기 때문에 동일한 운영체제 계열에서 애플리케이션을 자주 배포하고 확장하는 환경에 적합합니다. 반면 가상머신은 서로 다른 운영체제가 필요하거나, 커널 수준의 분리와 강한 격리가 필요하거나, 전체 운영체제 환경을 그대로 실행해야 하는 경우에 적합합니다.

두 기술은 서로 완전히 대체하는 관계가 아닙니다. 실제 클라우드 환경에서는 가상머신으로 인프라와 테넌트를 격리한 뒤, 그 위에서 여러 Docker 컨테이너를 실행하는 방식도 많이 사용합니다.

출처 및 참고자료