오픈소스 라이센스를 검증하는 블랙 덕 소프트웨어에서 매년 뽑는  “오픈 소스 올해의 루키” 중 하나로 선정된 Docker 소개합니다.
Docker는 PaaS 공급 업체 DotCloud 가 PaaS의 벡엔드로 사용하는 컨테이너 기반의 가상화 소프트웨어를 오픈소스로 공개한 것입니다.

Red Hat 의 RHEL 6.5 버전에도 Linux Containers (LXC) 을 기반으로하는 컨테이너 엔진인 docker 를 포함합니다.
Docker 는 하나의 Linux 시스템에 여러 Linux 시스템 운영을 위한 소프트웨어이다. 시스템의 분리에는 Linux Containers (LXC)을 파일 시스템은 Advanced multi layered unification filesystem (Aufs)를 사용합니다.
Docker은 Go로 작성되었습니다. 소스 코드 전체는 대략 15,000 줄 정도 입니다.

오픈소ㅡ 슈퍼루키 Docker

Docker 는?

지금 까지 가상화라고 하면 VirtualBox , KVM, VMWare 정도 알고 있었는데 , 완전히 새로운 형태의 가상화 엔진이 나타났습니다.

이 새로운 Docker 는 한 시스템에서 많은 수의 가상 머신을 시작과 동시에 바로 사용할 수 있는 가볍고 빠른 가상화 기술입니다. 

기술적으로 이 Docker 를 정리하자면 LXC 와 AUFS를 조합하여 GitHub 와 같은 형태로 사용할 수 있도록 만든 새로운 형태의 PaaS를 위한 경제적인 가상화엔진입니다.

Linux Container (LXC)

Docker를 간단하게 말하자면 Linux Container (LXC)의 랩퍼입니다.

하지만 단순히 LXC 만 랩핑하는 것 뿐이 아니라 Docker Union 파일 시스템을 사용하여 컨테이너 작업을 commit 이나 push 와 같은 익숙한 인터페이스로 변경 내용을 관리할 수 있도록 합니다.

LXC 는 가상화 기술의 일종으로 컨테이너라는 가상 컴퓨터를 독립적인 호스트 환경으로 사용할 수 있습니다. 하이퍼바이저형 가상화 기술을 이용하는 Xen Server 등과 는 달리 LXC 는 매우 가볍고 빠릅니다.

Advanced Multi-layered Unification Filesystem (aufs)

AUFS는 Union FS의 새로운 구현체로 다른 여러 파일 시스템을 하나의 파일 시스템으로 병합합니다.

OS 중에서 LiveCD 라고 하는 리눅스 배포판에 적용되는 파일 시스템이 “AUFS (Another Union File System)” 입니다.

LiveCD로 만들어진 OS 는 하드디스크에 OS 를 설치하지 않고 CD나 DVD에서 부팅하고 바로 OS 를 사용할 수 있는 장점이 있습니다.

반면에 문제는 변경된 내용을 저장하지 못한다. 이러한 단점을 보완하기 위해서 사용되고 있는 파일 시스템이 AUFS 입니다.

AUFS는 광학미디어에 저장할 내용을 메모리에 저장해 두고 추가/변경된 파일을 읽을 경우 메인 메모리에서 저장된 파일을 로드합니다.

또한 AUFS 데이터는 USB 메모리에 저장이 가능하여, 부팅용 DVD 미디어와 변경된 내용을 저장한 USB 를 함께 사용하여 최신 OS 를 재현할 수 있습니다.

Docker는 AUFS에 크게 의존합니다. Docker가 새로운 이미지를 만들 때 실제로 새 파일을 통째로 만드는 것이 아닙니다. 대신 Docker는 기반이되는 이미지에 대한 포인터를 유지하고 이미지를 만듭니다.

포인터를 만들 뿐이며, 이 시점에서 디스크에 쓰기가 발생하지 않습니다. 기반 이미지에서 파일 시스템을 분기 할 때 (예를 들어 새로운 파일을 만들거나 파일에 변경하였을 때) 처음 그 변경 사항을 디스크에 기록합니다.

이 기술은 일반적으로 복사 (COW)이라고 합니다.

이미지 변경은 커밋 할 때마다, 새로운 파일 시스템 레이어로 쌓입니다. 이 동작을 Docker는 “파일 시스템을 스택한다”라고 부릅니다.

맺음말

Docker 는 매우 기대되는 가상화 기술 이지만 아직 걸을 수 있다고 할 수 있을 만큼의 성숙한 기술이라고 하기는 어렵습니다. 특히 Docker 에서는 컨테이너에서 스토리지 사용에 단점이 있습니다.

기본적으로 컨테이너에서 커밋 하지 않고 종료하면 변경된 모든 내용이 사라져 버립니다. 이것은 응용 프로그램에서 로그를 저장하거나 데이터베이스를 운영하는데 있어서 치명적인 문제가 됩니다.

Extenal Volume 이라는 기능이 있기 때문에 사용할 수도 있지만 아직 개발 중이므로 운영 환경에서 적용은 어렵습니다.

References