본문 바로가기
DevOps

[Devops] Containers 컨테이너란? - Containers vs VM

by 가영리 2024. 1. 3.
728x90

 

출처 https://www.redhat.com/ko/topics/containers/containers-vs-vms

 

VM (Virtual Machine)

VM은 하드웨어 기반의 여러 게스트 운영 체제로, 하이퍼바이저를 통해 에뮬레이션 된다.

출처 https://www.redhat.com/ko/topics/containers/containers-vs-vms

VM은 하이퍼바이저 위에서 필요한 만큼의 자원이 할당된 가상의 컴퓨터로 각각의 VM은 서로간의 존재를 알  수 없으며 커널을 포함한 OS는 독립적으로 실행된다. 모놀리식 워크로드 패키징에 사용되는 기존 방식인 단일 컨테이너보다 훨씬 더 많은 작업을 실행할 수 있다. 하지만 시스템 구조적으로 봤을 때 각각의 OS를 띄워야 하기 때문에 Container와 비교했을 때 더 무거운 편이라고 할 수 있다. 또한 OS, 애플리케이션, 라이브러리에 의존하게 되어 이식성이 크게 저하된다.

VM은 다음 용도에 적합하다.

  • 기존, 레거시 및 모놀리식 워크로드 수용
  • 위험한 개발 사이클 분리
  • 인프라 리소스 프로비저닝
  • 다른 OS에서 또 다른 OS 실행

 

Container

애플리케이션 수준 구성이며 커널 하나를 공유하는 여러 가상 환경을 에뮬레이션한다.

Container는 별도의 격리된 환경에서 프로세스를 실행한다. Host 측에선 다른 프로세스와 다를 것이 없으나 Container 내부에서는 Host나 다른 Container의 존재를 알 수 없으므로 VM처럼 나름의 격리가 이루어진다고 볼 수 있다. 보통 마이크로서비스 단위로 구성되며, 실행에 필요한 모든 것(라이브러리, 파일, 환경변수 등)을 담고 있는 Image로부터 생성된다.

Container은 다음 용도에 적합하다.

  • 클라우드 네이티브 애플리케이션 빌드
  • 마이크로서비스 패키지
  • DevOps 또는 CI/CD Practice 촉진
  • 동일한 OS를 공유하는 다양한 IT 설치 공간에서 확장 가능한 IT 프로젝트로 전환
에뮬레이션(Emulation)이란?
하드웨어 리소스의 동작을 소프트웨어로 대신하는 가상화 방식