Docker || VM


공통점

Docker Container 와 Virtual Machine은 기본 하드웨어에서 격리된 환경 내에 애플리케이션을 배치하는 방법

차이점

격리된 환경을 얼마나 격리를 시키는지의 차이


Docker Container

도커 컨테이너에서 돌아가는 애플리케이션은 컨테이너가 제공하는 격리 기능 내부에 샌드박스가 있지만, 여전히 같은 호스트의 다른 컨테이너와 동일한 커널을 공유한다.

결과적으로, 컨테이너 내부에서 실행되는 프로세스는 호스트 시스템에서 볼 수 있다.

예를 들어, 도커와 함께 몽고DB 컨테이너를 시작하면 호스트(도커가 아님)의 일반 쉘에 ps-e grep 몽고를 실행하면 프로세스가 표시됩니다.

또한, 컨테이너가 전체 OS를 내장할 필요가 없는 결과, 그것들은 매우 가볍고, 일반적으로 약 5-100 MB이다.


Virtual Machine

가상 머신과 함께 VM 내부에서 실행되는 모든 것은 호스트 운영 체제 또는 하이퍼바이저와 독립되어 있다. 가상

머신 플랫폼은 특정 VM에 대한 가상화 프로세스를 관리하기 위해 프로세스를 시작하고, 호스트 시스템은 그것의 하드웨어 자원의 일부를 VM에 할당한다. 그러나 VM과 근본적으로 다른 것은 시작 시간에 이 VM 환경을 위해 새롭고 이 특정 VM만을 위한 커널을 부팅하고 (흔히 다소 큰) 운영 체제 프로세스 세트를 시작한다는 것이다.

이것은 응용 프로그램만 포함하는 일반적인 컨테이너보다 VM의 크기를 훨씬 크게 만든다.

OS까지 가상화…  맥에서 윈도우를 깐다든지 리눅스에서 윈도우를 돌린다든지…
이러한 방법은 비교적 사용법이 간단할 수 있지만 굉장히 느리다.


Container 격리는 어떻게 ?

먼저 리눅스에서 쓰이는 C group(control groups)과 네임스페이스(namespaces)에 대해서 알아야 합니다. 이것들은 컨테이너와 호스트에서 실행되는 다른 프로세스 사이에 벽을 만드는 리눅스 커널 기능들입니다.