도커(Docker)는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다.

가상화는 물리적인 하드웨어 장치를 논리적인 객체로 추상화하는 기술을 의미합니다. 이는 하나의 하드웨어를 여러 대의 독립적인 장치처럼 작동하게 하거나, 여러 대의 하드웨어를 하나의 단일 자원처럼 사용자에게 제공하는 것을 가능하게 합니다.

가상화를 구현하는 대표적인 방법으로는 하나의 물리적 서버를 여러 대의 가상 서버로 나누어 사용하는 가상 머신(Virtual Machine)이 있습니다.

쉽게 비유하자면, 하나의 객체를 여러 개의 인스턴스로 만들어 사용하는 것과 비슷하다고 할 수 있습니다. 가상 머신 내부의 운영체제는 모두 복제되지만(마치 객체의 필드와 메서드가 동일한 것처럼), 각 가상 머신은 고유한 파일과 데이터를 가질 수 있습니다(인스턴스화할 때 서로 다른 매개변수를 사용하는 것처럼).

가상 머신은 하나의 독립적인 컴퓨터와 같이 작동한다고 볼 수 있습니다.

image.png

가상화를 위해 시스템 자원을 호스트 OS로부터 할당받으면, 하이퍼바이저에 의해 호스트와 게스트가 분리됩니다. 생성된 게스트는 호스트와 다른 게스트들과 분리된 독립적인 환경에서 실행됩니다.

가상머신의 단점

  1. 속도 저하 : 가상 머신은 실행될 때 하이퍼바이저를 통해 운영되기 때문에, 이 과정에서 속도 저하 문제가 발생할 수 있습니다.
  2. 용량 : 가상 머신은 생성 시 호스트 운영체제에서 필요한 모든 리소스를 가져와 사용하기 때문에, 메모리 소모가 큽니다.

가상 머신은 운영체제를 복사하지만 컨테이너는 하나의 운영체제를 공유합니다.

컨테이너는 화물을 운반하는 표준화된 박스와 비슷한 개념으로, 그 안에 옷이나 과일 등 다양한 물품을 담을 수 있습니다. 이 표준화된 컨테이너는 트레일러와 같은 다양한 운송 수단을 통해 손쉽게 이동할 수 있습니다.

서버 환경에서도 마찬가지로, 컨테이너는 애플리케이션을 개발, 배포, 실행하는 데 필요한 모든 요소를 포함한 소프트웨어 패키지로, 데스크탑, 노트북 등 어떤 환경에서도 실행이 가능합니다.

컨테이너는 가상 머신과는 달리 하나의 운영체제를 공유하므로, 호스트 OS와 다른 운영체제를 실행할 수는 없습니다. 그러나 컨테이너는 애플리케이션 실행에 필요한 특정 파일이나 라이브러리 등 종속 항목만을 포함하기 때문에, 배포를 위해 생성되는 이미지의 용량이 작아지는 장점이 있습니다. 반면, 가상 머신은 운영체제 전체를 복제해야 합니다.