가상 머신과 컨테이너는 애플리케이션을 IT 인프라 리소스로부터 독립적으로 만드는 기술이다.
하지만 확장 방식 및 이식성에 큰 차이가 있다.
물리적 머신의 디지털 사본이다.
하이퍼바이저가 VM을 띄우고 실행한다.
각 VM마다 독립된 실행 환경을 제공하기에 같은 OS를 사용한다고 해도 데이터는 물론 코드도 전혀 공유하지 않는다.
각 VM마다 GB단위의 공간이 필요하고, VM의 수에 비례해서 늘어난다.
모놀리식 워크로드 패키징에 사용되는 기존 방식인 단일 컨테이너보다 훨씬 더 많은 작업을 실행 할 수 있다. 하지만 확장된 기능으로 OS, 애플리케이션, 라이브러리에 의존하게 되어 VM의 이식성이 크게 저하된다.
용도
애플리케이션 개발자에 초점을 맞추어 무겁고 느린 가상화가 아니라 경량화된 방법이다.
운영하는 프로세스 그 자체이다.
컨테이너는 격리된 환경에서 애플리케이션을 실행할 수 있고, 호스트 운영체제와 리소스를 공유한다. 해서 더 가볍게 실행이 가능하고 이식성과 확장성이 높다.
덕분에 부팅 시간이 훨씬 짧고, 컨테이너 수가 늘어나도 공간을 많이 차지하지 않는다.
또한, 컨테이너가 완전히 독립된 실행환경을 제공하지 않고 공유한다고 하더라도, 각 컨테이너 내의 프로세스들은 이를 감지하지 못하고, 자신이 OS의 모든 자원을 독점하고 있다고 생각한다.
용도
가상 머신은 개발자에게 애플리케이션 환경에 대한 제어 권한을 더 많이 부여합니다. 즉, 개발자가 수동으로 시스템 소프트웨어를 설치하고, 구성 상태에 대한 스냅샷을 생성하고, 필요한 경우 이전 상태로 복원할 수 있습니다. 애플리케이션의 성능을 개선하기 위해 아이디어, 실험 또는 다른 환경을 테스트하는 데 유용합니다.
컨테이너는 최상의 구성이 선택된 후에 구성에 대한 정적 정의를 제공합니다.
가상 머신은 풀 스택 시스템이므로 구축하고 재생성하는 데 시간이 많이 걸릴 수 있습니다. 환경을 재생성해야 하기 때문에 수정 내용을 검증하는 데 시간이 많이 걸립니다.
새 기능을 자주 빌드, 테스트 및 릴리스하려면 컨테이너를 사용하는 것이 좋습니다. 고급 소프트웨어만 포함되어 있기 때문에 수정하고 반복하는 속도가 매우 빠릅니다.
가상 머신은 스토리지 공간을 더 많이 차지하므로 온프레미스 데이터 센터에 더 많은 하드웨어를 프로비저닝해야 합니다. 클라우드 인스턴스로 전환하면 비용이 절감되지만 전체 환경을 마이그레이션하는 데 있어서 해결해야 할 고유한 문제가 있습니다.
컨테이너는 더 적은 공간을 차지하고 확장하기가 더 쉽습니다. 더 중요한 것은 컨테이너가 마이크로서비스를 사용할 수 있게 함으로써 사용자에게 애플리케이션 확장성에 대한 세부적인 제어 권한을 부여한다는 것입니다. 마이크로서비스는 잘 정의된 API를 통해 통신하는 소규모 독립 서비스로 구성된 소프트웨어 개발을 위한 아키텍처 및 조직적 접근 방식입니다. 컨테이너를 사용하면 필요에 따라 개별 마이크로서비스를 확장할 수 있습니다.
ⓒ https://www.youtube.com/watch?v=bpXSevDFlQc
ⓒ https://aws.amazon.com/ko/compare/the-difference-between-containers-and-virtual-machines/
ⓒ https://www.redhat.com/ko/topics/containers/containers-vs-vms