9장에서는 여러 개의 마이크로서비스를 호스트 OS에서 곧바로 실행했다. 따라서 애플리케이션이 사용하는 모든 종속성과 데이터가 시스템에 직접 설치되었다.

파이썬의 가상 환경에서 애플리케이션을 실행하면 디렉터리 하나에 필요한 종속성을 다운로드하고 설치하기 때문에 대부분의 경우에는 문제될 것이 없다. 하지만 애플리케이션이 데이터베이스도 필요로 한다면 SQLite 파일이 아닌 이상, 시스템에 데이터베이스를 설치해서 실행해야 한다. 일부 파이썬 라이브러리의 경우 확장을 컴파일하기 위해 시스템 헤더가 필요할 수도 있다.

이런 상황이 발생하다 보면 시스템은 얼마 지나지 않아 다양한 소프트웨어들로 어지럽혀진다. 설치 소프트웨어의 특정 버전을 다른 용도로 사용할 일이 없고, 또 자신만의 개발 환경이라면 별 문제가 아닐 수도 있다. 하지만 프로젝트의 훌륭한 기여자가 될지도 모르는 다른 개발자들이 이 프로젝트를 설치하고 시험하려고 할 때는 얘기가 달라진다. 프로젝트를 시험하기 위해 많은 소프트웨어를 설치해야 한다면 대부분은 얼마 못가서 흥미를 잃을 것이다.

VM은 이런 문제를 해결하는 멋진 방법이다. 과거 10년 동안 세밀한 설정이 필요한 많은 프로젝트들은 VMWare나 VirtualBox를 통해 즉시 실행 가능한 VM을 제공했다. 이러한 VM은 미리 설치된 데이터베이스처럼 필요한 서비스들을 포함하고 있으며, 프로젝트 데모는 명령 하나만으로 대부분의 플랫폼에서 쉽게 실행되었기 때문에, VM은 인기를 등에 업고 발전했다.

하지만 이런 도구들 일부는 완전한 오픈소스가 아니었고 실행 속도가 매우 느렸으며, 메모리와 CPU를 많이 차지했고, 디스크 I/O 효율도 좋지 않았다. 따라서 실제 라이브 환경에 사용할 수는 없었고 주로 데모용으로만 사용되는 한계가 있었다.

2013년에 처음 출시된 도커는 완전한 오픈소스 가상화 도구로서 엄청난 혁신을 가져왔고 높은 인기를 누리고 있다. VMWare나 VirtualBox와 달리 도커는 라이브 환경에서 빠른 속도로 애플리케이션을 실행하기 때문에 도커 이미지를 더 이상 데모나 개발 목적에만 한정하지 않고 실제 라이브 배포에도 사용할 수 있게 되었다.

10장에서는 도커에 대한 일반적인 내용을 먼저 살펴보고 플라스크 기반의 마이크로서비스를 도커에서 실행하는 방법도 알아본다. 또한 도커 생태계를 이루고 있는 다른 도구들도 다룬다. 마지막으로 클러스터에 대한 소개로 10장을 마무리한다.

도커란?

도커는 격리된 환경에서 애플리케이션을 실행하는 컨테이너 플랫폼이다. 도커는 cgroups 같은 리눅스 커널 기술을 활용해 실행 프로세스의 컬렉션을 구동한느 고수준의 도구 집합을 제공한다. 리눅스 커널이 필수이므로, 윈도우와 맥OS에서는 리눅스 가상 머신과 연동된다.

실행하고 싶은 이미지만 지정하면 다른 어려운 작업은 도커가 리눅스 커널과 연동해 처리한다. 여기서 이미지 란 컨테이너 하나를 구동하기 위해서는 리눅스 커널 상위에 여러 개의 프로세스를 실행해야 하는데, 이를 위해 필요한 모든 명령(instruction)을 모아둔 것이다. 이미지는 리눅스 배포판 실행에 필요한 모든 리소스도 갖고 있다. 따라서 호스트 OS가 CentOS라고 해도 도커를 통해 다양한 버전의 Ubuntu를 실행할 수 있다.