Docker란 리눅스 컨테이너 기술을 기반으로 하는 오픈 소스 서비스이다. 도커를 통해서 애플리케이션 실행환경을 코드로 작성할 수 있다. 또 OS를 공유, 격리화하여 관리할 수 있다.
여기서 리눅스 컨테이너란 리눅스 기반의 기술 중 하나이다. 필요한 라이브러리와 애플리케이숀을 모아서 마치 별도의 서버처럼 구성한 것을 말한다. 컨테이너를 이루는 네트워크 설정, 환경 변수 등의 시스템 자원은 각 컨테이너가 독립적으로 소유하고 있다.
Docker기술은 Linux 커널과 함께 Cgroups 및 네임스페이스와 같은 커널의 기능을 사용하여 프로세스를 분리함으로써 독립적으로 실행될 수 있도록 한다. 이러한 독립성은 컨테이너의 본래 목적입니다. 다시 말해서, 여러 프로세스와 애플리케이션을 서로 개별적으로 실행하여 인프라를 더 효과적으로 활용하고 개별 시스템을 사용할 때와 동일한 보안을 유지할 수 있다.
Docker를 포함한 컨테이너 툴은 이미지 기반 배포 모델을 제공하므로 여러 환경 전반에서 애플리케이션 또는 서비스를 모든 종속 항목과 손쉽게 공유할 수 있다. 또한 Docker는 이 컨테이너 환경 내에서 애플리케이션(또는 앱을 구성하는 결합된 프로세스) 배포를 자동화한다.
이러한 툴은 Linux 컨테이너를 기반으로 구축되어 Docker를 사용자 친화적이고 고유하게 만들어 주므로 사용자는 그 어느 때보다도 쉽게 앱에 액세스해 빠르게 배포하고 버전 및 버전 배포를 관리할 수 있다.
실행속도가 빠르다. OS를 실행하지 않고도 모든 프로세스에 대한 컨테이너를 실행할수있기 때문에 실행속도가 빠르다.
안전하다. container들끼리는 분리되어있기때문에 보안상 이점이있다.
실행환경 구성이 빠르고 간단하다. 프로젝트 개발 및 실행환경을 강제화 가능
비용절감 효과 컨테이너의 크기가 매우 작고, 하나의 물리적 서버에 다수의 컨테이너를 가동시킬 수 있다.
Docker는 플랫폼 의존적이다. Docker는 실제로 Windows와 Mac에서는 linux 가상머신위에서 동작한다. 결국 Docker는 linux에서만 실행가능하다.
Docker는 bare-metal방식보다 느리다. 도커가 기존의 가상화방식(이미 OS가 설치된 하드웨어 위에 Hypervisor OS를 설치하는 경우)보다 overhead가 적긴하지만, 여전히 bare-metal 방식의 속도에 비하면 느리다.
Docker위에서 GUI 앱을 돌리기가 불편하다. 도커는 command line에서 동작하는 앱을 호스팅하기 위해 디자인되었다. 도커 컨테이너 내에서 GUI앱을 실행하는 것은 가능하지만(X11 forwarding을 이용) 불편하다.