오늘은 RedHat의 포스팅을 읽고 컨테이너와 가상 머신의 차이점에 대해 알아봤습니다.
기술적 관점에서의 비교
컨테이너 및 가상 머신(VM)은 프로그램이 실행될 때 필요로하는 다양한 IT 구성 요소를 제공하고 나머지 관련없는 시스템은 격리하는 컴퓨팅 패키지 환경을 제공합니다.
이 둘의 주요 차이점은 규모(scale)와 이식성(portability)에 있습니다.
컨테이너의 규모와 이식성
컨테이너는 일반적으로 메가 바이트 단위로 측정됩니다. 앱과 실행에 필요한 모든 파일보다 큰 것은 패키징하지 않으며, 특정 작업을 수행하는 단일 함수(보통 마이크로 서비스라고 함)를 패키징하는 데 자주 사용됩니다.
컨테이너의 경량적인 특성과 운영체제(OS) 공유는 여러 환경에서 매우 쉽게 이식될 수 있도록합니다.
VM의 규모와 이식성
VM은 일반적으로 기가 바이트 단위로 측정됩니다. 일반적으로 자체 OS가 포함되어있어 여러 리소스를 사용하는 서비스를 수행 할 수 있습니다.
VM에 사용할 수있는 리소스를 증가시키는 만큼 전체 서버, OS, 데스크톱, 데이터베이스 및 네트워크를 추상화, 분할, 복제 및 에뮬레이션을 실행할 수 있습니다.
서비스 아키텍처 관점에서의 비교
기술적인 차이뿐만이 아닌 서비스 아키텍처 관점에서의 비교도 가능합니다.
새로 떠오르는 IT 아키텍처와 기존에 자주 사용되던 IT 아키텍처와의 비교를 통해 컨테이너와 VM을 비교 해보도록 하겠습니다.
Traditional IT architectures (monolithic and legacy)
기존의 모놀리식 아키텍처는 분할할 수 없는 대형 파일 타입으로서 모든 유닛이 커다란 환경에서 패키징 돼야 했습니다.
그러므로 VM 내에서 전체 앱을 빌드하고 실행하는 것이 일반적이었습니다. 모든 코드와 종속성이 한곳에 모여있기 때문에 업데이트를 잘못하면 오류가 발생할 가능성이 있습니다.
Emerging IT practices (cloud-native development, CI/CD, and DevOps)
새롭게 떠오르는 아키텍처는 워크로드가 가능한 가장 작은 서비스 단위로 분할되어 관리됩니다. (함수 단위 혹은 마이크로서비스 단위)
이러한 작은 단위를 패키징 하는 것은 컨테이너의 특성과 일치합니다. 다른 여러팀이 패키징한 코드를 방해하거나 위협하지 않고 앱 또는 서비스를 개별적으로 관리/개발할 수 있습니다.
컨테이너 VS 가상머신 : 서비스를 기준으로
쉽게 이식 및 변경될 수 있는 작은 인스턴스가 필요하다면 컨테이너를 사용하고, 반영구적으로 할당되는 리소스가 필요한 경우에는 VM을 사용하는 것이 좋을 것입니다. 여기서 주의할 점은 컨테이너는 기본 OS와 호환되어야 하며, VM은 OS, 애플리케이션 및 라이브러리에 의존하기 때문에 이식성이 훨씬 떨어진다는 점 입니다.
컨테이너 활용 예
- 클라우드 네이티브 앱 빌드
- 마이크로 서비스 배포
- DevOps 또는 CI/CD 개념 도입
- 동일한 OS를 공유하는 확장 가능한 IT 프로젝트 설계
VM 활용 예
- 기존, 레거시 및 단일 워크로드 작업들
- 위험한 개발주기를 분리하는 용도
- 인프라 리소스 (예 : 네트워크, 서버 및 데이터) 프로비저닝
- 다른 OS 내에서 다른 OS 실행 (예 : Linux에서 Unix 실행)
구동방식의 차이

가상화
하이퍼바이저(hypervisor) 라고하는 소프트웨어는 리소스를 물리적 시스템에서 분리하여 VM 전용으로 분할 할 수 있게 해줍니다. 사용자가 물리적 환경에서 추가 리소스가 필요한 VM 명령을 실행하면 하이퍼 바이저는 요청을 물리적 시스템으로 릴레이하고 변경 사항을 캐싱합니다. VM은 물리적 서버처럼 작동하므로 단일 앱이나 마이크로 서비스를 실행하기 위해 쓰기에는 많은 리소스들을 낭비한다는 단점이 있습니다.
컨테이너
컨테이너는 마이크로 서비스 또는 앱 실행에 필요한 모든 것을 가지고 있습니다. 컨테이너 내의 모든 라이브러리와 종속성을 포함하는 모든 코드 기반 파일은 이미지라는 항목에 보존됩니다. 이미지는 RPM 패키지 및 configure 파일과 함께 제공되기 때문에 Linux 배포 설치와 비슷하다고 볼수 있습니다.
컨테이너는 매우 작기 때문에 일반적으로 수백 개의 컨테이너가 느슨하게 결합되어 작동합니다. 오케스트레이션 플랫폼 (예 : Red Hat OpenShift 및 Kubernetes)을 사용하면 수백개의 컨테이너들을 프로비저닝하고 관리할 수 있습니다.
참고문헌
https://www.redhat.com/en/topics/containers/containers-vs-vms
댓글남기기