컨테이너 역사: chroot부터 Kubernetes까지
컨테이너 역사: chroot부터 Kubernetes까지의 발전 과정을 살펴보세요.
컨테이너 기술의 변화를 알아보세요.
컨테이너 기술의 역사 – chroot부터 Kubernetes와 OpenShift까지
클라우드 컴퓨팅의 운영 및 관리에 가장 기본이 되는 기술중의 하나인 “가상화 기술”은 나날이 발전하여 새로운 기술들을 도입하고 있습니다. 그 중에서도 최근 주목을 받고 있는 것이 바로 “컨테이너”입니다. 컨테이너 기반의 오픈소스 플랫폼들은 하이브리드 클라우드 구현과 DevOps 그리고 마이크로서비스 아키텍처를 구현하기 위한 필수적인 기술로 자리잡고 있습니다.
컨테이너 기술(Container) 발표 자료 다운로드
컨테이너 기술의 시작과 현재까지 발전해온 역사를 살펴봅니다.
컨테이너 역사는 1979년에 chroot를 발표한 것으로부터 시작합니다. chroot는 이름 그대로 ‘root (/)’ 디렉토리(기준이 되는 디렉토리) 변경(change)하는 것입니다.
chroot는 프로세스의 루트 디렉토리를 변경하는 것으로, 이를 통해 프로세스가 액세스 할 수 있는 디렉토리를 제한하거나 시스템 라이브러리와 관련 라이브러리를 로드할 수 있습니다.
그러나 chroot는 파일이나 디렉토리에 대한 액세스 권한만 제어할 뿐 네트워크 및 프로세스 등을 컨트롤 할 수 없습니다.
컨테이너(Container)의 진화
지난 2000년 Unix OS인 FreeBSD에서 OS 가상화 기능인 FreeBSD Jail을 발표합니다. FreeBSD Jail은 chroot처럼 파일 액세스를 제어하는 것이 아니라 호스트 OS와 Jail이라는 OS 가상화 환경에서 파일 시스템, 프로세스, 네트워크를 분리 할 수 있는 획기적인 기술을 제공했습니다. 이것이 컨테이너의 시작입니다.
Jail을 통해 사용자 별로 환경을 분리하여 안정성을 확보하여 임대 서버나 호스팅 등의 서비스에 활용하였습니다.
다음 해인 2001년에는 Linux에서도 커널에 Linux-Vserver라는 기능을 추가하여 OS 가상화 환경을 이용할 수 있게 되었습니다. 또한 2004년에는 상용 Unix OS인 Solaris에서도 Solraris Zone이라는 OS 가상화 기능이 제공됩니다.
2006년, Google은 Process Containers는 프로세스 자원 이용량을 제어하는 기능을 발표합니다. 이듬해에 이 기능은 cgroup으로 이름을 바꿉니다.
2008년에는 Red Hat에서 논리적으로 시스템 자원을 분할하는 Namespace를 발표하고, 비슷한 시기에 IBM에서 LXC(LinuX Containers)를 발표합니다. LXC가 cgroup과 Namespace를 사용하여 구현한 최초의 Linux 컨테이너 엔진입니다.
LXC는 이후 컨테이너 엔진의 형태를 갖추게 되었습니다. 바로 현재 컨테이너 기술의 시초라고 할 수 있습니다.
상용 제품으로는 Sun Microsystem(현재 Oracle)의 UNIX 계열 OS인 Solraris 10에 탑재된 Zone이라는 기능에 의해 처음으로 구현되었습니다.
그리고 이 기술은 Parallels의 “Parallels Virtuozzo Containers”라는 형태로 x86용 Linux와 Windows로 전파됩니다.
현재도 “OpenVZ”라는 Linux용의 오픈소스 소프트웨어(FLOSS) 커뮤니티에 의해 개발되고 있습니다.
하지만 현재의 컨테이너화 기술은 오픈소스 소프트웨어로 “Linux Containers” (LXC)와 Docker를 기반으로 하고 있습니다.
연도별로 살펴보는 컨테이너 기술의 발전
2000년 이전
연도 | 제목 | 주요 내용 | |
1972년 | IBM VM/370 (OS) | 최초 가상화 기능 구현 | |
1979년 | UNIX v7에 chroot 시스템 콜 도입 | chroot하여 부모 프로세스와 자식 프로세스의 루트 디렉토리를 파일 시스템의 다른 위치로 변경 | |
1999년 | Virtuozzo 출시 | 컨테이너 가상화의 새로운 방향을 제시 | |
2000년 | FreeBSD Jail이 FreeBSD 4.0에 도입 | • UNIX에 오래전부터 있었던 chroot를 발전시킨 것
• 관리자가 FreeBSD 기반의 컴퓨터 시스템을 Jail이라는 독립적인 작은 시스템으로 분리 |
2000년에서 2010까지
연도 | 제목 | 주요 내용 | |
2001년 | Linux VServer | FreeBSD Jail과 마찬가지로 Linux VServer는 시스템의 자원(파일 시스템 네트워크 주소 메모리)를 나눌 수 있는 Jail 매커니즘을 제공 | |
2003년 | The Borg System by Google | • 구글이 제공하는 서비스를 위한 컨테이너 오케스트레이션 시스템
• Kubernetes는 Borg를 바탕으로 Google에서 오픈소스화한 컨테이너 오케스트레이션 소프트웨어 |
|
2004년 | Solaris Containers(Zone) 출시 | Solaris의 컨테이너 기술 | |
2005년 | OpenVZ (Open Virtuzzo) | • 상용 컨테이너 소프트웨어인 Virtuozzo의 오픈소스 S/W 버전
• 커널을 공유하면서 분리된 공간 제공하여 현재의 컨테이너 개념과 동일 |
|
2008년 | LXC (Linux Containers) | • cgroup 및 Linux 네임 스페이스를 사용, 구현하여 단일 Linux 커널에서 동작
• 처음으로 Linux상에서 컨테이너 개념을 가장 완벽하게 구현 |
2010년 이후
연도 | 제목 | 주요 내용 | |
2013년 | 도커 (Docker) | • 2013년 3월 26일 Docker 오픈소스 소프트웨어로 공개
• RHEL, Suse, Devian 등 모든 Linux 배포판을 지원 • 도커는 컨테이너 기술의 확산에 기폭제 역할 |
|
2015년 | 쿠버네티스(Kubernetes) | • 2015년 7월 21일 Kubernetes v1.0 출시
• 구글에서 오픈소스로 기증한 컨테이너 스케줄러/오케스트레이션 도구 |
|
2016년 | CNCF(Cloud Native Computing Foundation) | 2016년 1월에 정식 출범한 Cloud Native Computing Foundation(이하 CNCF)는 혼돈스러운 컨테이너와 관련된 다양한 기술적인 문제들을 오픈소스로 해결하는 것을 목표 | |
Containerd | 2016년 12월에서 Docker에서 Containerd 분리 | ||
2017년 |
OCI (Open Container Initiative) | 2017년 7월 Open Container Initiative 컨테이너 관련 표준 v1.0을 발표 | |
CRI-O | 2017년 7월 Kubernetes 표준인 CRI(Container Runtime Interface)와 OCI에 최적화된 표준 컨테이너 런타임 발표 |
컨테이너 기술 비교
주요한 리눅스 컨테이너 기술들에 대한 비교 입니다.
Evolution of Containers Infographic by Red Hat
From simple idea to DevOps darling, a brief history container technologies.
컨테이너와 쿠버네티스
그러한 개발·개선 사이클의 속도에 크게 기여함으로써 최근 주목 받고 있는 것이 컨테이너 기술이다.
컨테이너는 더 낮은 비용으로 애플리케이션보다 효율적으로 개발함으로써 DevOps에 더 집중할 수 있습니다. 테스트와 환경 구성 그리고 트러블슈팅 같은 고질적인 수작업 중심의 IT 문제에 집중하지 않고 비즈니스 성장에 도움이 되는 애플리케이션 개발에 더 많은 시간을 할애 할 수 있습니다.
DevOps를 실현하는 중요한 기술 요소가 “컨테이너”입니다. 애플리케이션의 운영 환경을 패키징하고 컨테이너는 고립된 리소스에서 환경을 제공하는 기술입니다.
DX를 실현하기 위해서 민첩한 개발 방법은 큰 서비스 하나로 개발하는 것이 아니라 개별 기능별로 분할된 마이크로 서비스라는 단위로 개발하는 것이기 때문에 컨테이너가 가장 적합한 기술이라고 할 수 있고, 따라서 컨테이너 수가 증가 추세에 있습니다.
컨테이너 수가 증가하면 어떤 노드에 어떻게 자원을 배분하는 것이 효율적인가와 같은 관리 문제가 복잡해집니다. 그러한 관리를 효율적으로 수행해 주는 소프트웨어가 “Kubernete (K8s)”입니다. 컨테이너 오케스트레이션의 사실상의 표준이 되는 오픈소스 소프트웨어입니다.
References & Related Links
- A Brief History of Containers: From the 1970s Till Now – https://blog.aquasec.com/a-brief-history-of-containers-from-1970s-chroot-to-docker-2016
- Evolution of containers infographic (레드햇) – https://www.redhat.com/cms/managed-files/rh-history-of-containers-infographic-201609-en.pdf
JBoss EAP 시작 파라미터 살펴보기: Command Line 파라미터 설명
/in JBoss, Tech Talk/by 오픈마루 마케팅0JBoss EAP 6에서 인스턴스 시작 시, 참조되는 바인딩 주소와 각종 디렉터리를 지정하는 시작 파라미터들에 대해 설명한다.
Drools 6.0 성능 비교: Phreak와 Rete 알고리즘 비교
/in Tech Talk/by 오픈마루 마케팅0Drools 6.0에서는 지금까지의 ReteOO 대신 Phreak ( Lazy Matching)라는 새로운 룰 엔진 알고리즘이 도입되었다.
Apache httpd 비교 – Prefork MPM vs. Worker MPM
/in JBoss, OPENMARU/by 오픈마루 마케팅0Apache HTTPD 2.0 버전에 추가된 MPM 중 가장 많이 사용하는 Prefork MPM과 worker MPM의 차이점을 간단하게 설명합니다.