도커는리눅스 컨테이너에 여러 기능을 추가함으로써 애플리케이션을 컨테이너로서 좀 더 쉽게 사용 할 수 있게 만들어진 오픈소스 프로젝트 입니다. 도커는 go로 작성돼 있습니다.
가상 머신과는 달리 도커 컨테이너는 성능의 손실이 거의 없어서 차세대 클라우드 인프라 솔루션으로서 많은 개발자들에게 주목받고 있습니다.
도커 엔진은 도커 컨테이너를 생성하고 관리하는 주체로서 이 자체로도 컨테이너를 제어할 수 있고 다양한 기능을 제공하는 도커의 주 프로젝트 입니다.
도커 컨테이너는 기존에 여러개의 운영체제를 하나의 호스트에서 생성해 사용하는 방식(vm등등)이 아닌 가상화 된 공간을 생성하기 위해서 리눅스의 자체 기능인 chroot, 네임스페이스, cgroup을 사용함으로써 프로세스 단위의 격리환경을 만들기때문에 기존에 시스템자원을 나눠서 할당하는 가상화방식보다 성능적손실이 거의 없습니다.
컨테이너에 필요한 커널은 호스트의 커널을 공유해 사용하고, 컨테이너안에는 애플리케이션을 구동하는 데 필요한 라이브러리 및 실행파일만 존재하기 때문에 컨테이너를 이미지로 만들었을때 이미지 용량또한 가상머신에 비해 대폭 줄어드는 장접이 있습니다.
도커 컨테이너는 호스트 os 위에서 실행되는 격리된 공간입니다. 때문에 호스트 os에 영향을 주지않고 독립된 개발 환경을 보장 받을 수 있습니다.
예를들자면 컨테이너 내부에 새팅을 다 하고 해당 컨테이너를 이미지화 해서 운영서버에 전달후 실행하기만 하면 됩니다. 완전한 격리된 os에서 독립적으로 올린 이미지이기 때문에 환경에 영향을 거의 받지않고 이 이미지를 활용해서 애플리케이션을 관리만 해주면 되는 것 입니다. 또한 도커 이미지는 커널을 포함하지 않기때문에 가볍고 그에따라 배포또한 훨씬 빠르게 진행할 수 있습니다.
위 1 번의 장점 덕분에 마이크로서비스 아키택쳐에서 빛을 바랍니다. 또한 애플리케이션의 버전또한 독립적으로 구성하기때문에 버전관리 또한 용이해 집니다.