도커 : 리눅스 컨테이너에 여러 기능을 추가함으로써 애플리케이션을 컨테이너로서 좀 더 쉽게 사용할 수 있게 만들어진 오픈소스 프로젝트
Go 언어로 작성되어 있고. 도커 엔진은 컨테이너를 생성하고 관리하는 주체로서 이 자체로도 컨테이너를 제어할 수 있고 다양한 기능을 제공하는 도커의 주 프로젝트이기 때문이다.
기존의 가상화 기술은 하이퍼바이저를 이용해 여러 개의 운영체제를 하나의 호스트에서 생성해 사용하는 방식이었다. 이러한 여래 개의 운영체제는 가상 머신이라는 단위로 구별되고, 각 가상 머신에는 우분투, CentOs 등의 운영체제가 설치되어 사용됩니다. 각 게스트 운영체제는 다른 게스트 운영체제와는 달리 완전히 독립된 공간과 시스템 자원을 할당받아 사용합니다. 이러한 가상화 방식을 사용할 수 있는 대표적인 가상화 툴이 VirtualBox, VMware 등이 있습니다.
그러나 각종 시스템 자원을 가상화하고 독립된 공간을 생성하는 작업은 하이퍼바이저를 반드시 거치기에 일반 호스트에 비해 성능 손실이 발생합니다. 가상 머신은 완벽한 운영체제를 생성할 수 있다는 장점이 있지만, 일반 호스트에 비해 성능 손실이 있고, 수 기가바이트에 달하는 가상 머신 이미지를 애플리케이션으로 배포하기는 부담스럽다는 단점이 있습니다.
VM : 분할 공간에서의 가상환경, Virtual Machine 호스트 시스템 : 서버의 OS 게스트 OS : VM 의 OS 하이퍼바이저 : 게스트OS를 구동 및 모니터링
기존의 VM 과 도커 컨테이너의 차이는 바로 게스트 OS의 유무이다. 이는 자원 효율성 측면에서 차이가 나고, VM은 하나씩 늘 때마다 OS를 위한 자원을 할당해주어야 하는 반면에 도커는 애플리케이션을 구동하는데 필요한 모든 패키지만 있으면 컨테이너를 구동시킬 수 있다.
도커의 컨테이너는 호스트 OS의 커널을 공유한다. 커널이란 하드웨어 자원을 관리하고 하드웨어와 프로세스 사이의 인터페이스 역할을 수행하는 OS의 핵심 구성 요소이다. 커널을 컴퓨팅 장자원을 가상화하고 이를 프로세스에 할당한다.