도커 ( Docker ) 는 2013년 오픈소스 라이센스를 검증하는 블랙 덕 소프트웨어에서 매년 뽑는 “오픈 소스 올해의 루키” 중 하나로 선정된 오픈소프 커뮤니티 제품입니다.
Docker는 PaaS 공급 업체 DotCloud 가 PaaS의 벡엔드로 사용하는 컨테이너 기반의 가상화 소프트웨어를 오픈소스로 공개한 것입니다.
Red Hat 의 RHEL 6.5 버전에도 Linux Containers (LXC) 을 기반으로하는 컨테이너 엔진인 docker 를 포함합니다.
Docker 는 하나의 Linux 시스템에 여러 Linux 시스템 운영을 위한 소프트웨어이다. 시스템의 분리에는 Linux Containers (LXC)을 파일 시스템은 Advanced multi layered unification filesystem (Aufs)를 사용합니다.
Docker은 Go로 작성되었습니다. 소스 코드 전체는 대략 15,000 줄 정도 입니다.
도커 ( Docker ) 는?
지금 까지 가상화라고 하면 VirtualBox , KVM, VMWare 정도 알고 있었는데 , 완전히 새로운 형태의 가상화 엔진이 나타났습니다.
이 새로운 Docker 는 한 시스템에서 많은 수의 가상 머신을 시작과 동시에 바로 사용할 수 있는 가볍고 빠른 가상화 기술입니다.
기술적으로 이 Docker 를 정리하자면 LXC 와 AUFS를 조합하여 GitHub 와 같은 형태로 사용할 수 있도록 만든 새로운 형태의 PaaS를 위한 경제적인 가상화엔진입니다.
도커 는 Linux Container (LXC) 중 하나
Docker를 간단하게 말하자면 Linux Container (LXC)의 랩퍼입니다.
하지만 단순히 LXC 만 랩핑하는 것 뿐이 아니라 Docker Union 파일 시스템을 사용하여 컨테이너 작업을 commit 이나 push 와 같은 익숙한 인터페이스로 변경 내용을 관리할 수 있도록 합니다.
LXC 는 가상화 기술의 일종으로 컨테이너라는 가상 컴퓨터를 독립적인 호스트 환경으로 사용할 수 있습니다. 하이퍼바이저형 가상화 기술을 이용하는 Xen Server 등과 는 달리 LXC 는 매우 가볍고 빠릅니다.
Advanced Multi-layered Unification Filesystem (aufs)
AUFS는 Union FS의 새로운 구현체로 다른 여러 파일 시스템을 하나의 파일 시스템으로 병합합니다.
OS 중에서 LiveCD 라고 하는 리눅스 배포판에 적용되는 파일 시스템이 “AUFS (Another Union File System)” 입니다.
LiveCD로 만들어진 OS 는 하드디스크에 OS 를 설치하지 않고 CD나 DVD에서 부팅하고 바로 OS 를 사용할 수 있는 장점이 있습니다.
반면에 문제는 변경된 내용을 저장하지 못한다. 이러한 단점을 보완하기 위해서 사용되고 있는 파일 시스템이 AUFS 입니다.
AUFS는 광학미디어에 저장할 내용을 메모리에 저장해 두고 추가/변경된 파일을 읽을 경우 메인 메모리에서 저장된 파일을 로드합니다.
또한 AUFS 데이터는 USB 메모리에 저장이 가능하여, 부팅용 DVD 미디어와 변경된 내용을 저장한 USB 를 함께 사용하여 최신 OS 를 재현할 수 있습니다.
Docker는 AUFS에 크게 의존합니다. Docker가 새로운 이미지를 만들 때 실제로 새 파일을 통째로 만드는 것이 아닙니다. 대신 Docker는 기반이되는 이미지에 대한 포인터를 유지하고 이미지를 만듭니다.
포인터를 만들 뿐이며, 이 시점에서 디스크에 쓰기가 발생하지 않습니다. 기반 이미지에서 파일 시스템을 분기 할 때 (예를 들어 새로운 파일을 만들거나 파일에 변경하였을 때) 처음 그 변경 사항을 디스크에 기록합니다.
이 기술은 일반적으로 복사 (COW)이라고 합니다.
이미지 변경은 커밋 할 때마다, 새로운 파일 시스템 레이어로 쌓입니다. 이 동작을 Docker는 “파일 시스템을 스택한다”라고 부릅니다.
도커 ( Docker ) 맺음말
Docker 는 매우 기대되는 가상화 기술 이지만 아직 걸을 수 있다고 할 수 있을 만큼의 성숙한 기술이라고 하기는 어렵습니다. 특히 Docker 에서는 컨테이너에서 스토리지 사용에 단점이 있습니다.
기본적으로 컨테이너에서 커밋 하지 않고 종료하면 변경된 모든 내용이 사라져 버립니다. 이것은 응용 프로그램에서 로그를 저장하거나 데이터베이스를 운영하는데 있어서 치명적인 문제가 됩니다.
Extenal Volume 이라는 기능이 있기 때문에 사용할 수도 있지만 아직 개발 중이므로 운영 환경에서 적용은 어렵습니다.
References
- 올 한 해 계속 기억해야 할 오픈소스 수퍼 루키 10선 – http://www.itworld.co.kr/print/85821
- 이렇게 배포해야 할까? – Lightweight Linux Container Docker 를 활용하여 어플리케이션 배포하기 (KT 김영찬님 발표자료 ) – http://deview.kr/2013/detail.nhn?topicSeq=45
- 도커 ( Docker) 사 Mirantis 에 인수 합병 – Docker 사 , 도커 엔터프라이즈 사업을 미란티스 에 매각
쿠버네티스 개념 뽀개기와 데모 그리고 무료 체험 신청
최근 코로나19로 인한 비대면 솔루션의 수요가 늘면서, 클라우드 네이티브 앱 개발과 클라우드 네이티브 컴퓨팅 환경에 대한 요구사항들이 급증하고 있습니다.
그러나 COVID-19라는 재난으로 인해 디지털 트랜스포메이션, 클라우드 전환 등은 반강제적으로 그리고 빠르게 산업에 침투하고 있습니다.
고객 직접 대면이 어려운 지금, 비대면으로 고객들이 PoC(Proof of Concept)를 체험할 수 있도록 그 활용 가이드를 제안해드립니다.
쿠버네티스 기대효과 자료 다운로드 – 기획자/운영자/개발자 측면
Docker 그리고 컨테이너 기술의 역사
컨테이너 기술의 시작과 현재까지 발전해온 역사를 살펴봅니다.
1972년 IBM VM / 370 (OS) 최초 가상화 기능 구현 , 1979 년 UNIX V7 에 chroot 시스템 콜 도입, 1999년 Virtuozzo 출시 컨테이너 가상화의 새로운 방향을 제시
가상화와 컨테이너의 비교
기존에는 하나의 물리머신에서 하나의 OS를 설치하여 그 OS 상에서 다양한 프로그램을 실행할 수 있었습니다. 가상화는 물리머신에서 하이버바이저 또는 호스트OS 에서 가상화 소프트웨어를 실행하여 하나의 물리머신에 여러개의 게스트 OS 를 실행할 수 있습니다.
가상화는 개발측면이나 운영측면에서 자원 효율적으로 사용하고 관리하는 기술로서 널리 확산되었습니다. 다양한 OS 환경과 어플리케이션을 하나의 파일로 관리할 수 있는 “가상 머신 (VM)”은 손쉽게 이동할 수 있는 이식성을 제공해 주었습니다.
하지만 가상화의 문제점들도 이슈가 되었습니다. 거대한 VM 의 크기, Guest OS 에 대한 라이선스, 보안 패치 , 성능 저하 및 장애 발생시 다른 VM 에 영향 등이 있습니다.
기존의 가상화 기술은 가상 머신에서 게스트 OS를 시작해야했습니다. 하지만 컨테이너는 게스트 OS를 시작하지 않고 애플리케이션 실행 환경을 구축 할 수 있습니다.
컨테이너는 하이퍼바이저와 Guest OS 없이 애플리케이션 운영환경을 제공하는 기술로서 앞서의 가상화 기술의 고질적인 문제점들을 해결하고 있습니다.
컨테이너 장점
가상 머신은 하드웨어 스택을 가상화합니다. 컨테이너는 이와 달리 OS를 가상화하여 여러 개의 컨테이너를 OS 커널에서 직접 실행합니다. 컨테이너는 기존의 가상화 기술보다 훨씬 가볍게 동작하며, OS 커널을 공유하고, 시작 시간이나 종료 시간이 빠르고 , 메모리를 훨씬 적게 차지합니다
컨테이너 기술 소개
IT 분야에서 “컨테이너”도 일종의 박스의 의미이며, 물류분야에서 처럼 Portability (이동성) 을 실현하기 위해 만들어진 기술입니다.
이동성은 IT 시스템 (플랫폼 또는 인프라) 상에서 다른 IT 시스템으로 이동을 쉽게 허용하는 성질을 의미하는 것입니다.