컨테이너(Container)와 가상 머신(Virtual Machine)의 비교

taeheeyoon·2022년 6월 18일
3

DevOps

목록 보기
2/2
post-thumbnail

시작하며

안녕하세요.
전 포스트에서 예고한대로 컨터이너와 가상 머신의 차이점에 대하여 간단하게 짚고 넘어가도록 하겠습니다.
먼저 컨테이너 기술과 가상 머신(이하 VM)은 둘 다 프로세스, 네트워크, 파일 시스템을 격리할 수 있다는 장점을 공유합니다. 하지만, 이 둘의 작동원리는 많이 다릅니다.

컨테이너와 VM의 비교

VM을 사용해 본 경험이 있다면, VM을 만들고 실행하는 과정이 많은 컴퓨팅 자원을 필요로 한다는 점을 체감하였으리라 생각됩니다. 이에 비해, 도커는 한 호스트 컴퓨터에 여러 개의 컨테이너를 띄워도 크게 컴퓨터에 무리가 가지 않습니다.

또 하나의 특징은, Docker Hub Registry를 통해 이미지를 살펴보면, 도커 이미지는 (운영체제 이미지도 존재하지만) 보통 애플리케이션 단위로 만들어져 있음을 알 수 있습니다. 반면 VM을 사용하기 위해서는 해당 VM 위에 운영체제(OS, Operating System)를 설치해야 하는 과정을 반드시 거치게 되어 있습니다.

Docker Hub에는 애플리케이션 이미지가 대부분이다

컨테이너의 활용

컨테이너는 특성상 작고 가벼워 퍼블릭, 프라이빗, 하이브리드 및 멀티클라우드 환경뿐 아니라 베어 메탈 시스템 간에도 쉽게 이동할 수 있습니다. 또한 퍼블릭, 프라이빗, 하이브리드 및 멀티클라우드 환경 전반에 걸쳐 일관된 개발 및 자동 관리 환경을 제공하기 위해 설계된 마이크로서비스 컬렉션, 즉 오늘날의 클라우드 네이티브 애플리케이션을 배포하기에 이상적인 환경입니다. 클라우드 네이티브 애플리케이션을 사용하여 새 애플리케이션이 빌드 방법, 기존 애플리케이션이 최적화 방법, 이 모든 애플리케이션 연결 방법을 가속화할 수 있습니다. 주의할 점은 컨테이너가 기본 OS와 호환되어야 한다는 것입니다. VM과 비교했을 때 컨테이너는 다음 용도에 가장 적합합니다.

  • 클라우드 네이티브 애플리케이션 빌드
  • 마이크로서비스 패키징
  • DevOps 또는 CI/CD 프랙티스 촉진
  • 동일한 OS를 공유하는 다양한 IT 설치 공간에서 확장 가능한 IT 프로젝트로 전환

VM의 활용

VM은 모놀리식 워크로드 패키징에 사용되는 기존 방식(현재도 이렇게 패키징되고 있음)인 단일 컨테이너보다 훨씬 더 많은 작업을 실행할 수 있습니다. 하지만 이처럼 확장된 기능으로 인해 OS, 애플리케이션, 라이브러리에 의존하게 되어 VM의 이식성이 크게 저하됩니다. 컨테이너와 비교해 VM은 다음 용도에 가장 적합합니다.

  • 기존, 레거시 및 모놀리식 워크로드 수용
  • 위험한 개발 사이클 분리
  • 인프라 리소스(예: 네트워크, 서버, 데이터) 프로비저닝
  • 다른 OS에서 또 다른 OS 실행(예: Linux에서 Unix 실행)

컨테이너 기술과 VM의 작동 원리를 설명하는 이미지를 살펴봅시다.

왼쪽은 가상 머신, 오른쪽은 도커를 설명합니다.
왼쪽의 VM의 구성 요소에 OS가 존재하는데 비해, 오른쪽의 도커 컨테이너에는 OS를 포함하고 있지 않습니다. 다만, 도커라는 플랫폼 위에 컨테이너들이 올라가 있고, 그 아래 호스트 OS가 존재합니다.

이를 통해, 각 컨테이너는 호스트 OS의 커널(Kernel, 시스템 콜과 같이 OS의 핵심 기능을 구현한 프로그램)을 공유하고 있음을 짐작할 수 있습니다.

도커는 애플리케이션을 컨테이너화해서 실행하는 데에 주 목적이 있으므로, 특별히 컨테이너에 OS를 올려서 사용하지 않습니다. 호스트 OS의 입장에서 컨테이너 하나는 프로세스 하나에 불과합니다.

컨테이너에 OS를 올리지 않는데, Docker Hub에 존재하는 각종 OS 이미지는 무엇인가요?

잘 알려진 리눅스 배포판인 우분투, CentOS 등은 결국 동일한 리눅스 커널 위에서 만들어진 것입니다. 각자가 고유의 디렉토리 구조, 패키지 시스템(apt, yum), 쉘(bash, zsh) 등을 사용했을 뿐입니다. OS 이미지는 컨테이너 내 애플리케이션 구성의 편의를 위해 존재하는 이미지입니다. 우분투, CentOS 이미지를 사용한다고 해도 결코 컨테이너에 커널 수준의 OS가 올라가지 않습니다.

하이퍼바이저는 VM을 생성하고 구동하는 소프트웨어를 의미합니다. 하이퍼바이저에도 유형이 다양하게 존재하지만, 지금은 일단 VMware, VirtualBox 와 같은 프로그램이 하이퍼바이저라는 것 정도만 알아도 충분합니다.

윈도우나 macOS용 도커를 살펴보면 컨테이너 안쪽은 리눅스로 작동됩니다. 윈도우나 macOS는 리눅스가 아닌데, 어떻게 컨테이너 안에서 리눅스 기반으로 작동하는 것인가요?

윈도우나 macOS는 근본적으로 리눅스 커널을 쓰고 있지 않으므로, 해당 운영체제의 경우 리눅스 커널을 VM의 형태로 실행시키는 하이퍼바이저(Hyper-V, LinuxKit, HyperKit)를 자체적으로 구동합니다. 윈도우용 또는 macOS용 도커는 하이퍼바이저 위의 리눅스 커널을 사용하는 것입니다. 보다 자세한 내용은 각자의 하이퍼바이저 설명 문서를 참고하세요.
.
한 가지 재미있는 것은, 윈도우용 도커는 윈도우 커널을 사용한 윈도우 전용 컨테이너를 실행할 수 있는 기능을 제공합니다. 컨테이너는 커널을 공유하므로, 윈도우 커널을 사용하는 컨테이너는 리눅스용 도커에서 사용할 수 없습니다.

마치며

간단하게 컨테이너와 가상 머신의 차이점에 대하여 알아보았습니다. 보다 더 자세히 공부하고 싶으신 분은 아래 Reference에서 확인하시면 좋을 것 같습니다. 읽어주셔서 감사합니다!

Reference

가상 머신(Virtual Machine, VM)이란?
하이퍼바이저란?
컨테이너와 VM 비교
codestates docker part

profile
생각하는 대로 살지 않으면, 사는 대로 생각하게 된다.

2개의 댓글

comment-user-thumbnail
2024년 4월 9일

진짜 최고이십니다... 이해안되던게 한 번에 이해되었어요

1개의 답글