
Docker 와 Linux 컨테이너 기술들
OpenVZ
OpenVZ 는 Linux 커널에 컨테이너 관련 기술이 충분히 구현되지 않은 오래전부터 Linux 커널에 패치 컨테이너를 구현한 것입니다. OpenVZ와 그것을 바탕으로 한 상용 소프트웨어 인 페러럴즈의 Virtuozzo 는 이전부터 전세계의 호스팅 서비스에서 널리 사용되어 왔으며, 현재에도 널리 사용되고 있는 안정적인 상용 소프트웨어입니다. 현재 Linux 커널에 구현되어있는 컨테이너 관련 구현은 OpenVZ 에서 유래한 것이 많이 있고, 현재에도 OpenVZ 개발자가 구현을 추진하고있는 기능이 존재합니다.
libvirt
libvirt 는 가상 머신을 수행 공통 API를 제공하는 라이브러리에서 다양한 가상화를 지원합니다. 그 중에서도 “LXC”을 지원합니다.
Docker
LXC ( 리눅스 컨테이너) 는 어떻게 구현될까요?
- 프로세스 테이블 :
컨테이너마다 별도의 프로세스 테이블를 관리하여 컨테이너의 프로세스에서 다른 컨테이너의 프로세스가 보이지 않도록합니다. - 파일 시스템 :
컨테이너마다 특정 디렉토리를 루트 파일 시스템으로 보이게 합니다. “chroot”와 동일한 개념입니다. - 네트워크 :
네트워크 네임 스페이스 (netns)의 기능은 컨테이너마다 별도의 네트워크 설정을 구성합니다. “veth”라는 가상 NIC 장치를 이용하여 veth의 한쪽을 컨테이너 내부 네임 스페이스에 할당합니다. - CPU, 메모리 장치 ( “/dev”다음 장치 파일) :
cgroups의 기능은 컨테이너에서 사용할 수있는 범위를 제한합니다.

Docker 를 알려면 LXC ( Linux Containers) 먼저 알아야 !!
- LXC = Linux Containers
가상화와 컨테이너의 비교
가상화는 개발측면이나 운영측면에서 자원 효율적으로 사용하고 관리하는 기술로서 널리 확산되었습니다. 다양한 OS 환경과 어플리케이션을 하나의 파일로 관리할 수 있는 “가상 머신 (VM)”은 손쉽게 이동할 수 있는 이식성을 제공해 주었습니다.
컨테이너는 하이퍼바이저와 Guest OS 없이 애플리케이션 운영환경을 제공하는 기술로서 앞서의 가상화 기술의 고질적인 문제점들을 해결하고 있습니다.

Docker 컨테이너 장점
빠른 시작과 종료 속도
높은 집적도
낮은 오버헤드
가상화를 위한 하드웨어 에뮬레이트 (emulate) 단계 없이, 분리된 공간을 만들기 때문에 오버 헤드가 줄어 듭니다.
애플리케이션 컨테이너 지원

개발자/운영자/기획자 측면에서의 컨테이너 장점
가상 머신은 하드웨어 스택을 가상화합니다. 컨테이너는 이와 달리 OS를 가상화하여 여러 개의 컨테이너를 OS 커널에서 직접 실행합니다. 컨테이너는 기존의 가상화 기술보다 훨씬 가볍게 동작하며, OS 커널을 공유하고, 시작 시간이나 종료 시간이 빠르고 , 메모리를 훨씬 적게 차지합니다
Docker 컨테이너 단점
반대로 컨테이너 구조에서 비롯되는 단점도 있습니다.
Host OS 에 종속적
컨테이너별 커널구성이 불가능

컨테이너 기술 소개
IT 분야에서 “컨테이너”도 일종의 박스의 의미이며, 물류분야에서 처럼 Portability (이동성) 을 실현하기 위해 만들어진 기술입니다.
이동성은 IT 시스템 (플랫폼 또는 인프라) 상에서 다른 IT 시스템으로 이동을 쉽게 허용하는 성질을 의미하는 것입니다.

컨테이너 를 들으면 무엇이 떠오르나요?
항구나 공항 등에서 보는 직 물류 업계에서 사용되는 컨테이너가 떠오르 실 것입니다
컨테이너는 내용물을 하나씩 이동하는 것이 아니라 박스에 수하물을 담아 통째로 이동하기 때문에 편리한 물류 수단입니다.

Docker 그리고 컨테이너 기술의 역사
컨테이너 기술의 시작과 현재까지 발전해온 역사를 살펴봅니다.
1972년 IBM VM / 370 (OS) 최초 가상화 기능 구현 , 1979 년 UNIX V7 에 chroot 시스템 콜 도입, 1999년 Virtuozzo 출시 컨테이너 가상화의 새로운 방향을 제시

물리서버, 가상화를 넘어 컨테이너 까지
컨테이너 기술이 등장하기 전까지 IT 역사를 되돌아 보겠습니다.
가상화기술이 출현하기 전에는 하나의 물리적 서버에서 다양한 애플리케이션을 올려 사용하는 시대였습니다.
References
- LXC – http://ko.wikipedia.org/wiki/LXC
- linux – cgroups (control groups) – http://linuxism.tistory.com/1601
- OpenVZ – http://ko.wikipedia.org/wiki/OpenVZ