Docker와 가상머신(VM)의 차이

 

출처:  https://iancoding.tistory.com/184

 

아래 비교 표에 대한 자세한 설명은 아래에 작성하였습니다.

 

Docker 가상머신(VM)
Docker는 컨테이너화 된 애플리케이션을 실행합니다. 컨테이너는 호스트 OS의 커널을 공유하며 각 컨테이너는 시스템의 나머지 부분으로부터 격리된 환경에서 실행됩니다. VM은 물리적 하드웨어 위에 하이퍼바이저를 사용하여 별도의 전체 운영체제를 실행합니다. 완전히 독립된 가상의 컴퓨터를 의미합니다.
호스트 OS 커널을 공유하기 때문에 추가적인 운영체제를 로드할 필요가 없어 더 적은 리소스를 사용합니다. 각 VM은 전체 운영체제와 그 운영체제를 실행하는 데 필요한 리소스를 포함하므로 일반적으로 더 많은 리소스를 사용합니다.
컨테이너는 빠르게 시작될 수 있습니다. 전체 OS를 부팅해야 하기 때문에 시간이 좀 더 걸립니다.
컨테이너는 호스트 OS의 커널을 공유하기 때문에 VM에 비해 낮은 수준의 격리를 제공합니다. 각 VM은 독립적인 OS를 가지기 때문에 높은 수준의 격리를 제공합니다.
OS를 포함하지 않기 때문에 VM에 비해 이미지 크기가 일반적으로 작습니다. 전체 OS를 포함하기 때문에 디스크 이미지 크기는 대체로 큽니다.
Docker CLI, Docker Compose 등 다양한 도구와 플랫폼을 제공하여 컨테이너화된 애플리케이션의 배포 및 관리를 쉽게 합니다. VMware, VirtualBox, KVM 등 다양한 하이퍼바이저 및 관리 도구가 있습니다.

 

 

표에 대한 자세한 설명(표가 바로 이해되셨다면 넘어가셔도 됩니다)

 

컨테이너는 호스트 OS의 커널을 공유하며 각 컨테이너는 시스템의 나머지 부분으로부터 격리된 환경에서 실행됩니다

컨테이너와 호스트 OS의 관계를 이해하려면 먼저 컨테이너 기술의 핵심 요소와 원칙을 파악해야 합니다.

 

  1. 호스트 OS의 커널 공유

커널은 운영체제의 핵심 부분으로 하드웨어와 소프트웨어 간의 통신을 관리합니다.
이는 프로세스 관리, 메모리 관리, 디바이스 드라이버의 인터페이스 역할 등 다양한 핵심 기능을 포함합니다.

가상 머신(VM)
  • VM은 하이퍼바이저 위에 동작하며, 각 VM은 자체 운영체제(커널 포함)를 가집니다.
  • VM 내부의 애플리케이션은 해당 VM의 커널을 통해 하드웨어 리소스에 액세스합니다. 이 커널은 호스트 시스템의 실제 커널과 독립적입니다.
컨테이너
  • 컨테이너는 호스트 OS 위에서 동작하며, 호스트의 커널을 직접 사용합니다.
  • 컨테이너 내부의 애플리케이션은 호스트 OS의 커널을 통해 하드웨어 리소스에 액세스합니다.

"컨테이너는 호스트 OS의 커널을 직접 사용한다"는 것은, 컨테이너가 호스트 시스템의 실제 커널을 공유하고 이를 바탕으로 동작한다는 것을 의미합니다.

 

  1. 컨테이너의 격리

컨테이너는 '네임스페이스'라는 커널 기능을 사용하여 시스템의 다른 부분으로부터 격리됩니다.
네임스페이스는 프로세스, 네트워크, 사용자, 파일 시스템 등 다양한 리소스에 대한 격리를 제공합니다.

예를 들어, 네트워크 네임스페이스를 사용하면 각 컨테이너는 자체 IP 주소, 포트 번호, 라우트 테이블 등을 가질 수 있습니다.
PID(프로세스 ID) 네임스페이스를 사용하면 컨테이너 내부의 프로세스는 컨테이너 외부에서는 보이지 않습니다.

 

  1. 컨테이너의 이미지 및 파일 시스템

컨테이너는 '이미지'를 기반으로 실행됩니다.
이미지는 응용 프로그램, 라이브러리, 종속성 및 실행에 필요한 다른 모든 파일을 포함합니다.

'오버레이 파일 시스템'을 사용하여 이미지는 여러 계층으로 구성될 수 있습니다.
이를 통해 여러 컨테이너가 동일한 이미지 계층을 공유하면서 독립적인 변경을 수행할 수 있습니다.

VM은 물리적 하드웨어 위에 하이퍼바이저를 사용하여 별도의 전체 운영체제를 실행합니다. 이것은 완전히 독립된 가상의 컴퓨터를 의미합니다.

 

  1. 물리적 하드웨어
  • 컴퓨터의 실제 구성 요소를 의미합니다.
  • 예를 들어, CPU, RAM, 저장 장치(SSD, HDD), 네트워크 카드 등입니다.

 

  1. 하이퍼바이저
  • 하이퍼바이저는 가상화를 가능하게 하는 소프트웨어 또는 펌웨어 컴포넌트입니다.
  • 이를 통해 단일 물리적 하드웨어 위에서 여러 운영체제를 동시에 실행할 수 있습니다.

 

  1. 별도의 전체 운영 체제
  • VM은 자체적인, 독립된 운영체제를 실행합니다. 이 운영체제는 "게스트 운영체제"라고도 불립니다.
  • 게스트 운영체제는 물리적 하드웨어가 아닌, 하이퍼바이저에 의해 제공되는 가상의 하드웨어 위에서 동작합니다. 가상의 CPU, RAM, 디스크 등의 자원을 사용합니다.
  • 각 VM은 다른 VM과 완전히 독립적입니다. 따라서 한 VM에서 발생하는 문제가 다른 VM에 영향을 미치지 않습니다.

 

요약하면, VM 기술은 하이퍼바이저를 사용하여 물리적 하드웨어를 추상화하고, 이 추상화된 환경 위에서 여러 개의 독립적인 운영체제(게스트 OS)를 동시에 실행할 수 있게 해줍니다.
각 운영체제는 자신만의 가상의 자원과 환경을 가지며, 실제 물리적 자원을 하이퍼바이저를 통해 공유합니다.

 

컨테이너는 거의 즉시 시작될 수 있습니다.

  1. 가벼운 구조
  • 컨테이너는 전체 운영체제를 포함하지 않습니다. 대신 호스트 OS의 커널을 공유합니다. 따라서 컨테이너 이미지는 애플리케이션과 그 종속성만을 ㅗ함하게 되므로 사이즈가 작습니다.

 

  1. 직접적인 커널 액세스
  • 컨테이너는 호스트의 커널을 직접 사용하기 때문에 추가적인 추상화 계층이 없습니다. 이로 인해 컨테이너는 자원에 대한 접근이 빠르고 효율적입니다.

 

  1. 최소한의 부팅 프로세스
  • 전통적인 운영체제나 가상 머신은 시작할 때 많은 초기화 과정과 프로세스를 거쳐야 합니다.
  • 반면, 컨테이너는 애플리케이션 실행을 위한 최소한의 프로세스만 시작하므로 시작 시간이 크게 단축됩니다.

 

  1. 이미지 기반의 구조
  • 컨테이너는 미리 준비된 이미지를 바탕으로 실행됩니다.
  • 이 이미지에는 실행에 필요한 모든 파일과 설정이 포함되어 있기 때문에 추가적인 설정 또는 초기화 과정이 필요 없습니다.
반응형

'개발 > Docker' 카테고리의 다른 글

Docker File, Docker Compose 정의 및 사용 방법  (1) 2023.12.28

+ Recent posts