- 응용프로그램의 종속성과 함께 응용프로그램 자체를 캡슐화한 것
- 일반적인 VM과 같이 운영체제(OS)의 격리된 인스턴스 형태
- VM에서는 어렵거나 불가능한 것들을 가능하게 제공
- 호스트 OS 자원 공유하여 자원을 좀 더 효율적으로 사용
- 빠른 실행 및 중지
- 컨테이너에서 실행되는 응용프로그램은 호스트OS에서 네이티브로 실행되는 응용프로그램에 비해 발생시키는 오버헤드는 거의 없음
- 운영 환경의 변경으로 인해 발생하는 모든 버그를 없앨 수 있음(이식성 = portability)
- “내 컴퓨터에서는 잘 동작하는데!” 따위 이야기는 할 필요가 없다.
- 가벼워서 많은 수의 컨테이너를 동시에 실행 가능
- 운영 엔지니어는 VM 자체를 운영하는 것이 아니라 하나의 호스트 머신에서 여러 개의 컨테이너를 운영
- 컨테이너는 최종 사용자와 개발자가 클라우드 배포 가능
- VM = 외부 환경을 완전하게 에뮬레이트하는 목적
- 컨테이너 = 응용프로그램의 이식성과 독립성에 목적
- VM과 컨테이너는 응용프로그램을 같은 호스트에서 실행되는 다른 응용프로그램으로 부터 격리
- Docker 플랫폼은 두 개의 독립된 컴포넌트로 구성
- Docker Engine
- 컨테이너 생성, 실행
- 빠르고 칸편한 인터페이스 제공
- Docker 이전 리눅스 컨테이너(LXC) 같은 기술이 있었지만 전문적인 지식 및 작업이 어려워 불편
- Docker Hub
- 컨테이너 배포를 위한 클라우드 서비스 제공
- 다운로드할 수 있는 막대한 양의 컨테이너 이미지 제공
- 다른 사람들이 이미 작업해 둔 애용 그대로 이용 가능
- Docker가 개발한 도구 제공
- 클러스터링 관리자 - Swarm
- GUI를 이용해 컨테이너 작업 - 카이트매틱
- Docker Host를 생성하기 위한 명령 유틸리티 - Machine
- 2008년 솔로몬 하익스(Solomon Hykes)가 언어 중립적인 PaaS를 제공하는 dotCloud 설립(현재는 Docker의 CTO)
출처 : https://www.docker.com/company/management
- 당시 타사 PaaS는 특정 언어 종속 - Heroku : Ruby, Google App Engine : Java, Python
- dotCloud 자사 핵심 기술 Docker를 커뮤니티 주도 프로젝트로 전환
6개월만에 github star 6700개, 직원 외 contributor 175명 - dotClout => Docker 회사명 변경
- Docker 0.1 버전 => 1.0 버전 15개월(2014년 6월 발표)
이미 당시 Spotify, Baidu 운영계 사용 - Docker Hub(컨테이너들의 공용 저장소) 출시하며 플랫폼으로 진화 노력
- 2014년 12월 Docker Swarm 발표
- Docker와 Docker Machine을 위한 클러스터 관리자
- Docker host를 프로비저닝(사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비)하는 CLI도구 제공
- 2015년 6월 FreeBSD 프로젝트 Docker 지원 발표
- 2015년 8월 MS 윈도우 서버용 Docker Engine tech preview 버전 공개
- 현재 기준 안정적이면서 상용화 가능한 Docker Platform은 linux 64bit
- 윈도우, os x 사용자는 VM 안에서 Docker 실행가능
- BSD, solaris, 윈도우 서버 등과 같은 다른 플랫폼의 네이티브 컨테이너에 대한 지원은 각기 다른 단계에서 개발 진행
- Docker는 기본적으로 가상화 관련 작업 하지 않음 그래서 container는 호스트 커널과 항상 일치해야 함
(윈도우 서버 container는 윈도우 서버 호스트에서만 실행, 64bit linux container는 64bit linux 호스트에서만 실행 가능)