Container technology는 packaging technology
기존의 가상 머신을 기반으로 한 application 배포 방식을 완전히 다른 관점에서 진행할 수 있도록 함.
가상머신을 바탕으로 app을 배포한다면, 아래의 왼쪽 그림과 같이 VM 하나에 guestOs를 올려 host와는 독립적인 개별의 운영체제 위에 application을 실행한다.
반면 Container를 바탕으로 app을 배포한다면 hostOs위에 컨테이너 기술을 사용하여 독립적인 환경을 보장하고 app을 올린다. 즉 경량화된 배포가 가능해졌다.

컨테이너 기술은 어떻게 구현할 수 있는가? 는 isolation에 기반을 두고 있다. 역사를 살펴보자.
- Unix V7(1979) - chroot 시스템을 콜을 통해 루트 디렉토리를 파일 시스템의 새로운 곳으로 변경하는 것이 가능해진다.
- FreeBSD Jail - 운영체제 수준의 가상화. 컴퓨터 시스템을 여러 개의 독립적인 작은 시스템으로 분리하는 기술.
- Linux VServer : jail과 동일하게 운영체제 수준의 가상화. 컴퓨터 시스템의 리소를 분리하는 기술.
- Solaris Containers: 운영체제 수준의 가상화 기법. zone의 개념을 도입. 각각의 존에 node name, 가상 네트워크에 대한 접근 , 저장장치가 할당됨.
- Open VZ: 오픈소스로 제공하는 운영체제 수준의 가상화 기술. 리눅스 기반
Process COntainer: cp. memory, disk i/o, network와 같은 컴퓨터 자원에 대한 프로세스의 사용량을 제한하고 격리시키기 위한 기술. cgroup으로 명칭 변경됨. 이후 커널 2.6.24에 공식 포함.
- LXC : 리눅스 기반 운영체제 수준 가상화 기술. 리눅스 커널이 제공하는 croup 기능과 namespace isolation 기능을 사용.
cgroup은 컴퓨터 자원에 대한 사용제한과 우선순위를 제공해주는 리눅스 커널이 제공하는 기능
namespace isolation은 process tree, networking, user id 와 같은 운영체제 환경을 application 관점에서 분리시키는 것. chroot의 확장된 형태
- docker : LXC를 이용하여 컨테이너를 쉽게 활용할 수 있는 기술. 0.9 버전에서 LXC를 libcontainer로 대체. Build Once, Run Anywhere 개념 실현
- kubernetes: 컨테이너 오케스트레이션 툴. CNCF에 기증
이후에는 리눅스 컨테이너를 알아보겠다.
모두를 위한 클라우드 컴퓨팅 <노서영 지음> 책을 바탕으로 작성하였다.