컨테이너의 개념
- 하나의 OS 커널로 여러개의 독립된 것처럼 보이는 환경을 운용하기 위한 가상화 형태입니다.
- 쉽게 말하면 격리된 사용자 공간의 인스턴스, 즉 독립된 환경을 하나의 프로세스로 실행하는 것입니다.
사용자 공간과 컨테이너
컨테이너의 역사
연도 | Name | 주요내용 |
---|---|---|
1979 | UNIX의 chroot | UNIX에 chroot 시스템 콜이 도입됨. 프로세스가 바라보는 루트 디렉토리를 파일 시스템 상의 특정한 디렉토리로 변경하는 기능 |
2000 | FreeBSD jail | UNI의 chroot를 발전시킴. 컴퓨터 시스템을 jail이라는 독립적인 작은 시스템으로 분리하는 기능 |
2003 | The Borg System By Google |
Kubernetes의 기초가 되는 컨테이너 오케스트레이션 시스템 |
2005 | Open VZ (Open Virtuzzo) |
커널을 공유하면서 분리된 공간을 제공하여 현재의 컨테이너 개념과 동일해짐 |
2008 | LXC (Linux Containers) |
cgroup 및 네임스페이스를 사용하여 구현하여 단일 Linux 커널에서 동작하는 컨테이너 |
2013 | 도커 (Docker) | LXC와 AUFS를 조합한 가상화 엔진. 컨테이너 기술의 확산에 기폭제 역할 |
2015 | 쿠버네티스 (Kubernetes) |
구글에서 오픈소스로 기증한 컨테이너 스케줄러 / 오케스트레이션 도구 |
2016 | Containerd | Docker에서 containerd가 분리됨 |
컨테이너를 구성하는 대표적인 기술들
namespace
- 시스템 자원을 논리적으로 분할하여 프로세스가 접근할 수 있는 자원의 범위를 제한하는 기능입니다.
cgroup
- 컨테이너들이 사용하는 호스트 OS가 이용할 수 있는 자원 사용량의 제한을 설정하는 기능입니다.
컨테이너와 가상머신의 차이
- 컨테이너는 운영체제 수준의 가상화 기술이고, 가상머신은 하드웨어 수준의 가상화 기술이며 하이퍼바이저를 통해 관리됩니다.
- 컨테이너는 호스트의 커널을 공유하지만, 가상머신은 각 머신마다 전용 OS가 필요합니다.
컨테이너의 종류
시스템 컨테이너
- 호스트 OS 위에 하드웨어 가상화 없이 또다른 OS를 실행합니다.
- 하나의 컨테이너에서 독립된 환경을 공유하는 다수의 프로세스를 실행하는 것을 목표로 합니다.
- ex) LXC(리눅스 컨테이너)
애플리케이션 컨테이너
- 하나의 컨테이너에서 하나의 애플리케이션(프로세스)를 실행하는 것을 목표로 합니다.
- 하나의 프로세스만 실행하므로 확장이 쉽고 관리가 용이합니다.
ex) 도커 컨테이너
도커는 컨테이너다?
- 도커는 어플리케이션 개발, 전송, 실행을 위한 오픈 플랫폼입니다.
- 좁은 의미에서의 도커의 컨테이너는 도커 이미지가 실행된 상태를 의미합니다.
참고)
https://www.44bits.io/ko/keyword/linux-container#리눅스-네임스페이스linux-namespace
https://ko.wikipedia.org/wiki/Cgroups
https://www.44bits.io/ko/post/change-root-directory-by-using-chroot
http://www.opennaru.com/openshift/container/what-is-the-difference-between-docker-lxd-and-lxc/
https://library.gabia.com/contents/infrahosting/7426/
https://cvw.cac.cornell.edu/Checkpoint/containers
http://www.opennaru.com/openshift/container/history-of-the-container/
http://www.opennaru.com/opennaru-blog/docker-as-a-top-new-open-source-project/
댓글