1. Container 기술과 Docker
기존의 시스템 관리자들은 서비스를 제공하는 서버를 관리하기 위하여 VM(Virtual Machine, 가상머신)을 사용하여 자원을 관리해왔다. VM을 사용하는 서버 관리 방식은 물리적 서버를 직접 운영하는 것보다 효율적이었지만, Host OS 위에 Guest OS를 구동하는 구조로 인하여 가상화(hypervisor 레이어) 자체에 대한 비용이 존재하였다. 또한 서비스의 규모가 커지거나, 사용시간 등에 따라 사용량이 수시로 변경되면서 자원을 효율적으로 관리하기 위한 스케일에 대한 필요성도 증가하였다.
이러한 환경에서 등장한 컨테이너 기술은 Guest OS를 생성하여 시스템 자체를 가상화 하는 것이 아닌, 어플리케이션의 구동 환경을 가상화 하는 기술이다. 기존에 사용하던 VM이 Host OS 위에 Hypervisor Tool 을 이용하여 Guest OS 를 구동하는 것에 비해, 컨테이너 서비스는 Host OS 위에 직접 어플리케이션의 실행환경을 가상화 시켜준다.
GuestOS 가 없기 때문에 VM에 비하여 가볍고 구동시간 또한 더 빠르다. 애초에 OS가 아니라 프로세스가 구동되는 개념이어서, 부팅 속도가 VM에 비해 더 빠를 수 밖에 없다. 이러한 이유로 컨테이너는 Lightweight VM 이라고도 불린다. 빠른 부팅 속도로 인하여 스케일링, fail-over 등에도 효율적이다.또한 Hypervisor 가 없이 바로 HostOS 의 자원을 사용할 수 있기 때문에 VM에 비해 더 효율적인 자원 사용이 가능하다.
정리하면 아래와 같은 장점을 가지고 있다고 볼 수 있다.
- 가상화 기술보다 가볍고 성능이 좋으면서도 동일한 Bard Metal/Virtual Machine 에서 더 많은 어플리케이션을 구동할 수 있다.
- 빠른 빌드와 배포, 이식성을 제공하므로 이를 통해서 개발을 더 쉽고 빠르게 할 수 있고 확장성을 높힐 수 있다.
- 개발에서 운영으로의 이관이 용이하며, DevOps 패러다임에 유리하다.
- Host Kernal 레벨을 공유하며 OS를 따로 부팅하지 않으므로 VM에 비하여 부팅속도가 매우 빠르다.
그러나 실제로는 GuestOS가 없다는 표현 보다는 HostOS를 Linux 로 고정 시킨 것에 가깝기 때문에, Linux OS 가 아닌 OS. 예를 들면 windows OS 에서만 작동하는 어플리케이션은 컨테이너로 구동할 수 없다는 단점도 있다.
이러한 장점과 단점을 가진 컨테이너 기술은 사실 갑자기 등장한 개념은 아니다. 서버 관리자들은 이미 chroot, namespace 등의 컨테이너를 구성하는 프로세스 격리 기술을 사용해 왔으며 최근에 사용성이 증가되면서 ‘컨테이너’ 라는 개념으로 새롭게 조명되고 있다. 즉, ‘빅데이터’나 ‘클라우드’와 같이 마케팅 성격이 다소 포함된 개념으로 볼 수 있다.
이 블로그에서 소개하고 있는 Docker 서비스는 Linux 환경에서 컨테이너 기술을 사용하기 쉽게 만들어놓은 시스템 프로그램(서비스)이다. 내부적으로 리눅스에 내장되어 있는 OS 레벨의 가상화 기술인 리눅스 컨테이너 기술(LXC)을 사용한다. Docker와 같은 컨테이너 서비스는 Linux 에서만 존재하는 기술은 아니며 이외의 Unix / BSD 계열에서도 컨테이너라는 명칭을 사용하지 않을 뿐 아래와 같은 가상화 기술을 제공하고 있다.
- Linux : Docker
- FreeBSD : Jails
- AIX : 워크로드 파티션(AIX Workload Partitions)
- Solaris : Zone
2. Docker install
Docker는 리눅스에서 제공하는 컨테이너 서비스이므로 당연히 LInux 계열의 OS 인 Debian, Centos, Ubuntu 등의 OS에서 설치하는 것이 가장 쉽고 편하다. 추가적으로 Linux 이외의 Mac OS, Windows OS 등에서도 Docker를 설치할 수 있도록 가이드와 패키지를 제공하고 있다.
Windows 에서 Docker를 설치 하기 위해서는 Windows 환경 위에 Linux OS 를 Guest로 구성해야 한다. 물론 Guest OS를 사용하지 않기 위한 것이 Docker 사용의 주요 목적이므로, docker를 설치하기 위해 Guest OS를 구성하는 것은 매우 비효율적이고 부자연스러운 방식이나 실 운영 서비스를 위해서가 아닌 개발 및 검증 목적으로 설치할 경우는 이와 같은 방식으로도 설치가 가능하다. 대부분의 경우 VMWare 나 Oracle Virtualbox 등의 hypervisor tool 을 설치하고 그 위에 Linus OS(ubuntu, centos)를 GuestOS로 구동하고 다시 그 안에서 도커를 설치한다. (전술했듯이 복잡하고 성능상으로는 다소 불리한 방법이니 테스트 등의 목적으로만 사용하는 것이 좋다.)
이와는 별개로 Docker 측에서는 위와 같은 작업을 이미 packaging 화하여 ‘Docker toolbox’라는 설치 패키지를 제공한다. 실제로 Docker Toolbox 안에는 Oracle virtualBox 가 포함되어 있다. 편한 방법을 사용하여 도커를 설치하도록 하자.
또한 Windows 10의 경우 docker toolbox 이외에 Docker for windows 라는 별도의 설치패키지를 지원한다. docker toolbox와 유사하나 windows에서 제공하는 windows container 를 위한 패키지가 추가 되었다고 보면 된다. (Docker container 가 host OS 가 linux 를 사용하는 것과 반대로 Windows container 는 host OS를 Windows로 사용한다고 보면 이해가 쉽다)
각각의 OS에서 Docker를 설치하는 링크나 패키지는 아래와 같으므로 필요에 따라 해당 내용을 검색하여 설치를 권장한다.
- Ubuntu : https://docs.docker.com/install/linux/docker-ce/ubuntu/
- Centos : https://docs.docker.com/install/linux/docker-ce/centos/
- Mac OS : Docker for Mac, Docker Toolbox
- Windows 7 : Docker Toolbox
- Windows 10 : Docker for windows
3. Docker version
컨테이너 개념에 대하여 소개하면서 서술하였듯이, ‘컨테이너’라는 개념은 이미 존재하고 있는 시스템 개념이며 Docker는 이를 사용하기 쉽게 패키징한 서비스이다.
Docker 진영은 2013년 1월에 0.1.0 버전으로 처음 release 하여 계속해서 버그를 수정하고 새로운 기능을 계속 추가해 오다가 1.6버전에서부터 enterprise 성격의 cs-docker(cs : Commercial Supported)를 출시한다. 또한 2017년에는 그 동안의 표기인 docker, cs-docker 를 docker-ce, docker-ee로 각각 변경하고 기존의 major / minor 버전 표기법을 year.month 의 연월 표기법으로 변경하여 사용한다.
Docker-CE : Community 버전. 분기별로 새로운 버전이 출시되며, 실험적인 기능을 포함하고 있는 edge 버전이 매달 release 된다.
Docker-EE : Enterprise 버전. 분기별로 새로운 버전이 출시된다.