Docker

이재홍 http://www.pyrasis.com 2014.08.02 ~ 2014.09.20

Docker는 2013년 3월 Docker, Inc(구 dotCloud)에서 출시한 오픈 소스 컨테이너 프로젝트입니다. 2014년 현재 나온 지 2년도 채 되지 않았지만 전 세계적으로 큰 인기를 끌고 있습니다.

2010년을 넘어서면서 서버 시장은 급속히 클라우드 환경으로 옮겨갔습니다. 이렇게 되다 보니 물리적인 서버를 구입하기 보다는 사용 요금만 내고 가상 서버를 빌려 쓰게 되었습니다. 특히 물리적인 서버를 구축하려면 서버 구입과 설치에 상당한 시간이 걸립니다. 하지만 클라우드 환경에서는 1대가 되었든 1,000대가 되었든 클릭 몇 번 만으로 가상 서버를 만들어낼 수 있게 되었습니다.

생성된 가상 서버에 각종 소프트웨어를 설치하고 설정을 해야 하는데, 서버가 한 두 대라면 쉽게 설정을 할 수 있지만 서버 개수가 많아지면 사람이 하기가 어려워집니다. 따라서 클라우드 환경에서 설치와 배포가 큰 어려움으로 다가왔습니다.

리눅스/유닉스 환경에서 오랫동안 사용해왔던 셸 스크립트로 설치 및 설정 자동화를 구현해도 되지만 이것도 한계가 있습니다. 셸 스크립트로는 중앙 관리 기능이나 복잡한 기능은 구현하기 힘듭니다. 그리고 리눅스 환경은 설치해야 할 응용프로그램이 많고, 설정도 복잡합니다. 특히 사소한 설정 하나가 운영체제와 서비스의 안정성에 큰 영향을 미칩니다.

이런 상황에서 Immutable Infrastructure라는 패러다임이 나왔습니다. Immutable Infrastructure는 호스트 OS와 서비스 운영 환경(서버 프로그램, 소스 코드, 컴파일된 바이너리)을 분리하고, 한 번 설정한 운영 환경은 변경하지 않는다(Immutable)는 개념입니다. 즉 서비스 운영 환경을 이미지로 생성한 뒤 서버에 배포하여 실행합니다. 이때 서비스가 업데이트되면 운영 환경 자체를 변경하지 않고, 이미지를 새로 생성하여 배포하는 것입니다. 클라우드 플랫폼에서 서버를 쓰고 버리는 것처럼, Immutable Infrastructure도 서비스 운영 환경 이미지를 한 번 쓰고 버립니다.


그림 1-1 Immutable Infrastructure

Immutable Infrastructure는 여러 가지 장점이 있습니다.

  • 편리한 관리: 서비스 운영 환경을 이미지로 생성했기 때문에 이미지 자체만 관리하면 됩니다. 특히 이미지를 중앙 관리하여 체계적인 배포와 관리를 할 수 있습니다. 또한, 이미지 생성 설정도 파일로 되어 있기 때문에 버전 관리 시스템을 활용할 수 있습니다.
  • 확장: 이미지 하나로 서버를 계속 찍어낼 수 있습니다. 따라서 클라우드 플랫폼의 자동 확장(Auto Scaling) 기능과 연동하면 손쉽게 서비스를 확장할 수 있습니다.
  • 테스트: 개발자의 PC나 테스트 서버에서 이미지를 실행하기만 하면 서비스 운영 환경과 동일한 환경이 구성되기 때문에 테스트가 매우 쉽습니다.
  • 가볍다: 운영체제와 서비스 운영 환경을 분리하여 가볍고(Lightweight) 어디서든 실행 가능한(Portable) 환경을 제공합니다.

이 책에서는 Immutable Infrastructure를 구현한 프로젝트인 Docker를 다루겠습니다.

Docker 로고와 단어를 보면 Docker의 기능을 짐작할 수 있습니다. 고래가 컨테이너 박스를 여러 개 싣고 다니는데, 서버에서 여러 개의 컨테이너(이미지)를 실행한다는 것을 떠올릴 수 있습니다. 또한, 이미지 생성과 실행뿐만 아니라 이미지 저장과 배포(운반)도 의미합니다. 단어의 사전적 의미도 컨테이너를 하역하는 항만(부두) 노동자를 뜻하는데, 컨테이너를 다루는 Docker의 기능과 비슷합니다.


그림 1-2 Docker 로고

컨테이너에 물건을 싣는 것처럼 서비스 운영에 필요한 모든 요소를 모아 Docker 컨테이너에 넣습니다. 자주 쓰이는 오픈 소스 소프트웨어는 물론이고, 직접 만든 프로그램도 넣을 수 있습니다.


그림 1-3 Docker 컨테이너


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

30 November 2014