Docker와 가상머신(VM)의 차이
아래 비교 표에 대한 자세한 설명은 아래에 작성하였습니다.
Docker | 가상머신(VM) |
Docker는 컨테이너화 된 애플리케이션을 실행합니다. 컨테이너는 호스트 OS의 커널을 공유하며 각 컨테이너는 시스템의 나머지 부분으로부터 격리된 환경에서 실행됩니다. | VM은 물리적 하드웨어 위에 하이퍼바이저를 사용하여 별도의 전체 운영체제를 실행합니다. 완전히 독립된 가상의 컴퓨터를 의미합니다. |
호스트 OS 커널을 공유하기 때문에 추가적인 운영체제를 로드할 필요가 없어 더 적은 리소스를 사용합니다. | 각 VM은 전체 운영체제와 그 운영체제를 실행하는 데 필요한 리소스를 포함하므로 일반적으로 더 많은 리소스를 사용합니다. |
컨테이너는 빠르게 시작될 수 있습니다. | 전체 OS를 부팅해야 하기 때문에 시간이 좀 더 걸립니다. |
컨테이너는 호스트 OS의 커널을 공유하기 때문에 VM에 비해 낮은 수준의 격리를 제공합니다. | 각 VM은 독립적인 OS를 가지기 때문에 높은 수준의 격리를 제공합니다. |
OS를 포함하지 않기 때문에 VM에 비해 이미지 크기가 일반적으로 작습니다. | 전체 OS를 포함하기 때문에 디스크 이미지 크기는 대체로 큽니다. |
Docker CLI, Docker Compose 등 다양한 도구와 플랫폼을 제공하여 컨테이너화된 애플리케이션의 배포 및 관리를 쉽게 합니다. | VMware, VirtualBox, KVM 등 다양한 하이퍼바이저 및 관리 도구가 있습니다. |
표에 대한 자세한 설명(표가 바로 이해되셨다면 넘어가셔도 됩니다)
컨테이너는 호스트 OS의 커널을 공유하며 각 컨테이너는 시스템의 나머지 부분으로부터 격리된 환경에서 실행됩니다
컨테이너와 호스트 OS의 관계를 이해하려면 먼저 컨테이너 기술의 핵심 요소와 원칙을 파악해야 합니다.
- 호스트 OS의 커널 공유
커널
은 운영체제의 핵심 부분으로 하드웨어와 소프트웨어 간의 통신을 관리합니다.
이는 프로세스 관리, 메모리 관리, 디바이스 드라이버의 인터페이스 역할 등 다양한 핵심 기능을 포함합니다.
가상 머신(VM)
- VM은 하이퍼바이저 위에 동작하며, 각 VM은 자체 운영체제(커널 포함)를 가집니다.
- VM 내부의 애플리케이션은 해당 VM의 커널을 통해 하드웨어 리소스에 액세스합니다. 이 커널은 호스트 시스템의 실제 커널과 독립적입니다.
컨테이너
- 컨테이너는 호스트 OS 위에서 동작하며, 호스트의 커널을 직접 사용합니다.
- 컨테이너 내부의 애플리케이션은 호스트 OS의 커널을 통해 하드웨어 리소스에 액세스합니다.
"컨테이너는 호스트 OS의 커널을 직접 사용한다"는 것은, 컨테이너가 호스트 시스템의 실제 커널을 공유하고 이를 바탕으로 동작한다는 것을 의미합니다.
- 컨테이너의 격리
컨테이너는 '네임스페이스'라는 커널 기능을 사용하여 시스템의 다른 부분으로부터 격리됩니다.
네임스페이스는 프로세스, 네트워크, 사용자, 파일 시스템 등 다양한 리소스에 대한 격리를 제공합니다.
예를 들어, 네트워크 네임스페이스를 사용하면 각 컨테이너는 자체 IP 주소, 포트 번호, 라우트 테이블 등을 가질 수 있습니다.
PID(프로세스 ID) 네임스페이스를 사용하면 컨테이너 내부의 프로세스는 컨테이너 외부에서는 보이지 않습니다.
- 컨테이너의 이미지 및 파일 시스템
컨테이너는 '이미지'를 기반으로 실행됩니다.
이미지는 응용 프로그램, 라이브러리, 종속성 및 실행에 필요한 다른 모든 파일을 포함합니다.
'오버레이 파일 시스템'을 사용하여 이미지는 여러 계층으로 구성될 수 있습니다.
이를 통해 여러 컨테이너가 동일한 이미지 계층을 공유하면서 독립적인 변경을 수행할 수 있습니다.
VM은 물리적 하드웨어 위에 하이퍼바이저를 사용하여 별도의 전체 운영체제를 실행합니다. 이것은 완전히 독립된 가상의 컴퓨터를 의미합니다.
- 물리적 하드웨어
- 컴퓨터의 실제 구성 요소를 의미합니다.
- 예를 들어, CPU, RAM, 저장 장치(SSD, HDD), 네트워크 카드 등입니다.
- 하이퍼바이저
- 하이퍼바이저는 가상화를 가능하게 하는 소프트웨어 또는 펌웨어 컴포넌트입니다.
- 이를 통해 단일 물리적 하드웨어 위에서 여러 운영체제를 동시에 실행할 수 있습니다.
- 별도의 전체 운영 체제
- VM은 자체적인, 독립된 운영체제를 실행합니다. 이 운영체제는 "게스트 운영체제"라고도 불립니다.
- 게스트 운영체제는 물리적 하드웨어가 아닌, 하이퍼바이저에 의해 제공되는 가상의 하드웨어 위에서 동작합니다. 가상의 CPU, RAM, 디스크 등의 자원을 사용합니다.
- 각 VM은 다른 VM과 완전히 독립적입니다. 따라서 한 VM에서 발생하는 문제가 다른 VM에 영향을 미치지 않습니다.
요약하면, VM 기술은 하이퍼바이저를 사용하여 물리적 하드웨어를 추상화하고, 이 추상화된 환경 위에서 여러 개의 독립적인 운영체제(게스트 OS)를 동시에 실행할 수 있게 해줍니다.
각 운영체제는 자신만의 가상의 자원과 환경을 가지며, 실제 물리적 자원을 하이퍼바이저를 통해 공유합니다.
컨테이너는 거의 즉시 시작될 수 있습니다.
- 가벼운 구조
- 컨테이너는 전체 운영체제를 포함하지 않습니다. 대신 호스트 OS의 커널을 공유합니다. 따라서 컨테이너 이미지는 애플리케이션과 그 종속성만을 ㅗ함하게 되므로 사이즈가 작습니다.
- 직접적인 커널 액세스
- 컨테이너는 호스트의 커널을 직접 사용하기 때문에 추가적인 추상화 계층이 없습니다. 이로 인해 컨테이너는 자원에 대한 접근이 빠르고 효율적입니다.
- 최소한의 부팅 프로세스
- 전통적인 운영체제나 가상 머신은 시작할 때 많은 초기화 과정과 프로세스를 거쳐야 합니다.
- 반면, 컨테이너는 애플리케이션 실행을 위한 최소한의 프로세스만 시작하므로 시작 시간이 크게 단축됩니다.
- 이미지 기반의 구조
- 컨테이너는 미리 준비된 이미지를 바탕으로 실행됩니다.
- 이 이미지에는 실행에 필요한 모든 파일과 설정이 포함되어 있기 때문에 추가적인 설정 또는 초기화 과정이 필요 없습니다.
'개발 > Docker' 카테고리의 다른 글
Docker File, Docker Compose 정의 및 사용 방법 (1) | 2023.12.28 |
---|