도커(Docker)는 리눅스 컨테이너에 여러기능을 추가함으로써,
어플리케이션을 컨테이너로서 좀 더 쉽게 사용할 수 있게 만들어진 오픈소스 프로젝트이다.
도커는 Go언어로 작성돼 있으며, 2013년 3월에 첫 번째 릴리스가 발표된 이후
지금까지도 꾸준히 개발되고있다.
기존에 쓰이던 하이퍼바이져(가상머신)과는 달리 도커 컨테이너는 성능의 손실이
거의 없어서 차세대 클라우드 인프라 해결책으로 대단한 흥행을 하고있다.
기존의 가상화 기술은 하이퍼바이져를 이용해 여러 개의 운영체제를 하나의 호스트에서
생성해 사용하는 방식인데, 이러한 여러개의 운영체제는 가상머신이라는 단위로
구별되고, 각 가상머신에는 우분투, centOS등의 os들이 설치되어 사용된다.
하이퍼바이저에 의해 생성되고 관리되는 운영체제는 게스트 운영체제라고 하며,
각 게스트 운영체제는 다른 게스트 운영체제와는 완전히 독립된 공간과 시스템 자원을 할당받아 사용한다.
이러한 가상화 방식을 사용하는 툴로는 버츄얼박스와 vm웨어 등이 있다.
하지만 각종 시스템자원을 가상화하고 독립된 공간을 생성하는 작업은 하이퍼바이저를 반드시 거치게 되므로, 일반 호스트에 배해 성능의 로스가 생기기마련이다.
그리고 운영체제를 사용하기 때문에 불필요한 라이브러리나, 커널등을 전부다 포함하고 있다.
이것은 이미지의 크기뿐 아니라 할당받을 자원의 강요성이 커지는 것이다.
이에 반해 도커 컨테이너는 가상화된 공간을 생성하기 위해 리눅스의 자체 기능인,
chroot, 네임스페이스, cgroup을 사용함으로써 프로세스 단위의 격리 환경을 만들기 때문에 성능 로스가 거의 없다고 볼수있다.
컨테이너에 필요한 커널은 호스트의 커널을 공유해 사용하고,
컨테이너 안에는 어플리케이션을 구동하는데 필요한 라이브러리 및 실행 파일만 존재하기 때문에,
컨테이너를 이미지로 만들었을때 이미지의 용량 또한 가상머신에 비해 대폭 줄일수있다.