Docker란? 

오픈소스 컨테이너 프로젝트로, 서비스 운영 환경을 묶어서 손쉽게 배포하고 실행하는 컨테이너 기술을 지원한다. 

(컨테이너에 관해서는 지난 아티클 참조 http://sarc.io/index.php/cloud-computing/412-vm-vs-container) 

초기에는 LXC(Linux Container)를 기반으로 구현되었고, 버전 0.9부터는 LXC를 대신하는 libcontainer를 개발하여 사용했다.

이미지 생성과 배포에 특화된 도커는 이미지 버전관리를 GitHub과 비슷한 방식으로 push/pull 의 형태로 제공한다.

이미지는 Docker Hub 이라는 저장소에 저장되며, 저장된 이미지는 도커 사용자 간 공유 및 재사용이 가능하다.

현재 AWS, Google Cloud Platform, Microsoft Azure 등의 클라우드 서비스에서 도커를 공식 지원하고 있다.

 

Docker 작동 원리

도커는 주로 아래 두가지를 주 축으로 하여 작동한다.

  1. cgroups : 워크로드가 필요로 하는 컴퓨트와 메모리, 디스크 I/O 정의
  2. namesakes : 각각의 워크로드를 구분하고 격리

 

Docker의 이미지 처리 방식

도커는 베이스 이미지에서 바뀐 부분만 이미지로 생성하고, 이미지가 컨테이너로 실행될 때는 베이스 이미지와 바뀐 부분을 합쳐서 실행된다.

 

Docker와 서비스 운영 환경

도커에서는 서비스 운영 환경을 이미지로 생성한 뒤 서버로 배포하여 실행한다.

서비스가 업데이트되면 운영환경 자체를 변경하지 않고 이미지를 새로 생성하여 배포한다.

서비스 환경 이미지만 관리하면 되기 때문에 관리가 편리하다는 장점이 있다.