도커(Docker)는 2013년 혜성처럼 등장한 이래 계속해서 IT계에 기대감을 불러일으켰다. 도커가 제공하는 응용프로그램 컨테이너 기술은, 몇 년 전 가상화 기술이 그랬던 것처럼, IT작업 수행 방식의 변화를 약속하고 있다. 다음은 이 기술과 관련된 가장 흔한 질문 13가지와 그에 대한 답이다.
컨테이너란 무엇이며 왜 필요한가?
컨테이너는 한 컴퓨팅 환경에서 다른 환경으로 이동 시에 소프트웨어를 안정적으로 실행할 수 있도록 돕는 솔루션이다. 개발자의 노트북에서 테스트 환경으로 이동이 될 수도 있고, 준비 환경에서 생산 환경으로의 이동이 될 수도 있다. 데이터센터 내 물리적 컴퓨터에서 프라이빗 또는 퍼블릭 클라우드 내 가상머신으로의 이동이 될 수도 있다.
도커를 만든 솔로몬 하익스(Solomon Hykes)에 따르면 지원 소프트웨어 환경이 동일하지 않을 때 문제가 발생한다. “테스트 환경에서는 파이썬(Python) 2.7을 사용하다가 생산 환경에서는 파이썬 3에서 실행하면 희한한 일이 발생한다. SSL라이브러리 중 특정 버전의 행동에 의존하는데 다른 버전이 설치되기도 한다. 테스트 환경은 데비안(Debian)인데 생산 환경은 레드햇(Red Hat)이라면 온갖 종류의 희한한 일이 발생한다”라고 그는 말했다.
상이한 소프트웨어만이 문제의 원인은 아니다. 하익스는 “소프트웨어 실행의 기반이 되는 망 구성 방식이나 보안 정책, 스토리지가 상이할 수도 있다”라고 설명했다.
컨테이너는 이 문제를 어떻게 해결하는가?
간단히 말하면, 컨테이너는 온전한 런타임 환경으로 구성되어 있다. 즉, 응용프로그램과 그 종속 요소, 라이브러리 및 기타 바이너리, 응용프로그램 실행에 필요한 구성 파일 일체가 패키지 하나에 다 들어 있다. 응용프로그램 플랫폼과 그 종속 요소를 컨테이너화하면 OS 배포판과 기본 인프라의 차이점은 무시된다.
컨테이너와 가상화의 차이점은 무엇인가?
가상화 기술에서는 통째로 이동하는 패키지가 가상머신이다. 가상머신에는 응용프로그램뿐만 아니라 운영체제 전체가 들어 있다. 3대의 가상머신을 구동하는 물리적 서버에는 하나의 하이퍼바이저(hypervisor) 위에 별도의 운영체제 3개가 구동된다.
반면, 도커를 통해 3개의 컨테이너화된 애플리케이션을 실행하는 서버는 하나의 운영체제로 구동되며 컨테이너 사이에 운영체제 커널이 공유한다. 운영체제 중 공유된 부분은 읽기 전용이며, 쓰기를 위해서는 각 컨테이너에는 컨테이너 접근 방식인 자체 마운트(mount)가 있다. 따라서 컨테이너는 가상머신에 비해 훨씬 더 가볍고 사용 리소스 또한 훨씬 적다.
컨테이너의 다른 장점은 어떤 것이 있는가?
컨테이너는 크기가 몇 십 메가바이트에 불과한 반면, 온전한 자체 운영체제를 갖춘 가상머신은 크기가 몇 기가바이트에 달한다. 따라서 가상머신보다 훨씬 많은 컨테이너를 서버 하나에 호스트할 수 있다.
또 다른 주요 장점은 가상머신의 경우 운영체제를 부팅하고 호스트 중인 응용프로그램 실행하기까지 몇 분이 소요되는 반면, 컨테이너화된 응용프로그램은 거의 즉시 시작된다는 점이다.
따라서 컨테이너는 필요할 순간 ‘적시에’ 인스턴스화되고 더 이상 필요가 없어지면 사라짐으로써 호스트의 리소스를 풀어줄 수 있다.
세 번째 장점은 컨테이너화를 통해 모듈성이 커진다는 점이다. 복잡한 응용프로그램 전체를 하나의 컨테이너 내부에서 실행하는 대신, 데이터베이스, 응용프로그램 프론트 엔드(front end) 등의 모듈로 응용프로그램을 쪼갤 수 있다.
이것이 이른바 마이크로서비스(microservices) 접근방식이다. 이런 식으로 구축한 애플리케이션은 관리하기 더 쉽다. 각 모듈은 비교적 간단하고 변경사항은 모듈에 적용할 수 있으므로 애플리케이션 전체를 재구축할 필요가 없기 때문이다. 컨테이너는 매우 가볍기 때문에 개별 모듈(또는 마이크로서비스)은 필요할 때에만 인스턴스화할 수 있고 거의 즉시 사용 가능하다.
도커와 컨테이너의 차이점은 무엇인가?
도커는 컨테이너 기술의 대명사로 자리잡았다. 컨테이너 기술 대중화에 가장 성공적으로 공헌했기 때문이다. 그러나 컨테이너 기술이 새로운 것은 아니다. LXC 형태로 리눅스에 구축되기 시작한 지 10년이 넘었다. 이와 유사한 운영체제 수준의 가상화 역시 프리BSD 제일(FreeBSD jails), AIX 워크로드 파티션(Workload Partitions), 솔라리스 컨테이너(Solaris Containers)에 의해 제공된 바 있다.
표준 컨테이너 형식이 있는가?
2015년, 코어OS(CoreOS)라는 업체가 도커의 컨테이너 사양과는 다른 자체적인 앱 컨테이너 이미지(ACI: App Container Image) 사양을 만들었다. 당시 새롭게 인기를 얻은 컨테이너 움직임이 라이벌 리눅스 컨테이너 형식으로 인해 와해될 위험이 있었다.
그러나 같은 해 후반기에 오픈 컨테이너 프로젝트(OCP)라는 계획이 발표되었고 나중에 오픈 컨테이너 계획(OCI)이라는 이름으로 바뀌었다. 리눅스 재단의 후원으로 운영되는 OCI의 목적은 컨테이너 형식의 업계 표준과 모든 플랫폼에 대한 컨테이너 런타임 소프트웨어를 개발하는 것이다. OCP 표준의 시작점은 도커 기술이었다. 도커는 프로젝트가 시작될 수 있도록 코드베이스의 약 5%를 기부했다.
프로젝트의 후원업체로는 도커, 코어OS는 물론 AWS, 구글, IBM, HP, 마이크로소프트, VM웨어, 레드 햇, 오라클, 트위터, HP 등이 있다.
이들 업체들이 오픈 컨테이너 계획(OCI)에 참여하는 이유는 무엇인가?
OCI의 목적은 컨테이너 기술의 기본 구성 요소(예: 컨테이너 형식)를 표준화해서 모든 사람들이 활용할 수 있게 하는 것이다.
즉, 업체들은 경쟁 컨테이너 기술 개발에 자원을 소비하는 대신, 기업 또는 클라우드 환경에서 표준화된 컨테이너를 사용하는 데 필요한 추가 소프트웨어 개발에 집중할 수 있다. 필요한 소프트웨어의 종류에는 컨테이너 편성 및 관리 시스템과 컨테이너 보안 시스템이 있다.
무료 오픈소스 컨테이너 관리 시스템이 있는가?
그렇다. 가장 유명하고 널리 사용되는 무료 오픈 소스 컨테이너 관리 시스템은 아마도 쿠버네티스(Kubernetes)일 것이다. 구글에서 시작된 소프트웨어 프로젝트인 쿠버네티스는 컨테이너화된 응용프로그램을 배치, 유지 관리, 확장할 수 있는 방법을 제공한다.
현재 어떤 상용 컨테이너 관리 솔루션이 있는가?
도커 엔터프라이즈 에디션(Docker Enterprise Edition)이 아마도 가장 유명한 상용 컨테이너 관리 솔루션일 것이다. 기업용 리눅스 또는 윈도우 운영체제와 클라우드 제공자에 실행되는 응용프로그램을 위해 테스트와 인증을 거친 통합 플랫폼을 제공한다.
그러나 다른 것도 많이 있다. 그 중 주목할만한 몇 가지에는 쿠버네티스를 중심으로 구축한 독자 개발 소프트웨어가 있다. 이런 종류의 관리 소프트웨어 제품으로는 다음과 같은 것이 있다.
• 코어OS의 텍토닉(Tectonic)은 구글 스타일 인프라 구축에 필요한 오픈 소스 구성요소 일체가 미리 들어가 있으며, 이와 더불어 관리 콘솔, 기업 SSO 통합, 기업용 컨테이너 레지스트리인 키(Quay)와 같은 상용 기능이 추가된다.
• 레드햇의 오픈 시프트 컨테이너 플랫폼(Open Shift Container Platform)은 사내 개인 플랫폼으로 서비스 제품이다. 도커로 구동되는 핵심 응용프로그램 컨테이너를 중심으로 구축되었다. 쿠버네티스에서 제공하는 편성 및 관리 기능이 있으며 레드햇 엔터프라이즈 리눅스를 기반으로 한다.
• 랜처 랩(Rancher Labs)의 랜처는 어떤 인프라의 생산 환경에서도 컨테이너의 배치 및 관리를 쉽게 해 주는 상용 오픈소스 솔루션이다.
컨테이너는 얼마나 안전한가?
컨테이너가 가상머신보다 안전하지 않다는 평가가 있다. 컨테이너 호스트 커널에 취약점이 있으면 이를 공유하는 컨테이너 내부에 침투되는 길을 제공할 수 있기 때문이다. 이는 하이퍼바이저도 마찬가지다. 그러나 하이퍼바이저는 (일반적으로 파일 시스템, 네트워킹, 응용프로그램 프로세스 제어 등을 구현하는) 리눅스 커널에 비해 제공 기능이 훨씬 적기 때문에 공격 표면이 훨씬 작다.
그러나 지난 몇 년간, 컨테이너 보안 향상을 위한 소프트웨어 개발에 엄청난 노력이 기울여졌다.
예를 들면, 도커를 비롯한 다른 컨테이너 시스템에는 이제 서명 인프라가 포함되어 있다. 관리자가 컨테이너 이미지에 서명함으로써 신뢰할 수 없는 컨테이너가 배치되는 것을 막을 수 있다.
그러나, 서명을 받은 신뢰할 수 있는 컨테이너를 실행한다고 해서 꼭 안전한 것은 아니다. 컨테이너가 서명을 받은 이후에 내부 소프트웨어 중에서 취약점이 발견될 수 있기 때문이다.
그러한 이유 때문에 도커 등은 컨테이너 보안 정밀검사 솔루션을 제공한다. 컨테이너 이미지에 악용 가능한 취약점이 있는 경우 관리자에게 통보하는 솔루션이다.
보다 전문화된 컨테이너 보안 소프트웨어도 개발돼 있다. 예를 들면, 트위스트록(Twistlock)에서 제공하는 소프트웨어는 컨테이너의 예상 행동에 대한 개요를 작성하고, 프로세스, 네트워킹 행동(예: 출발지 및 목적지 IP주소와 포트), 심지어는 특정 스토리지 사례를 ‘화이트리스트’(whitelist)에 등재함으로써 악성 행동이나 예상치 못한 행동이 있을 때 플래그로 표시할 수 있다.
폴리버스(Polyverse)라는 또 다른 전문 컨테이너 보안 회사의 접근 방식은 이와 달리 컨테이너 시작 시간이 매우 짧다는 점을 활용한다. 컨테이너화된 애플리케이션을 양호한 상태로 몇 초마다 다시 시작함으로써 해커가 컨테이너에서 실행되는 애플리케이션을 악용할 시간을 최소화하는 것이다.
• 포톤(Photon) OS — VM웨어 플랫폼에서의 구동에 최적화된 최소한의 리눅스 컨테이너 호스트
• 프로젝트 아토믹 호스트(Project Atomic Host) — 레드 햇의 경량 컨테이너 운영체제로서 센트OS(CentOS)와 페도라(Fedora)에 기반한 버전이 있으며, 레드 햇 엔터프라이즈 리눅스의 다운스트림 엔터프라이즈 버전도 있다.
• 우분투 코어(Ubuntu Core) — 우분투 중에서 크기가 가장 작은 버전인 우분투 코어는 사물인터넷 기기와 대규모 클라우드 컨테이너 배치를 위한 호스트 운영체제 시스템으로 설계되었다.
윈도우 시스템 사용자라면 어떻게 하는가?
도커는 리눅스 커널 버전 3.10 이상을 구동하는 모든 리눅스 배포판 뿐만 아니라 윈도우에서도 실행된다.
이것이 가능해진 이유는 2016년 마이크로소프트에서 윈도우 서버 2016과 윈도우 10에서 윈도우 컨테이너를 실행할 수 있는 기능을 도입했기 때문이다. 바로 윈도우용 도커 컨테이너이다. 모든 도커 클라이언트 또는 마이크로소프트 파워셸(PowerShell)에서 관리할 수 있다.
(마이크로소프트는 하이퍼-V 컨테이너도 도입했다. 격리를 늘리기 위해 하이퍼-V 가상머신에서 실행되는 윈도우 컨테이너이다.)
윈도우 컨테이너는 윈도우 서버 2016의 표준 설치판, 간소화된 서버 코어(Server Core) 설치판에 배치 가능하다. 아니면, 컨테이너 또는 가상머신 내부에서의 응용프로그램 실행만을 목적으로 하는 나노 서버(Nano Server) 설치 옵션에도 배치할 수 있다.
도커는 리눅스와 윈도우뿐만 아니라 아마존(Amazon) EC2, 구글 컴퓨트 엔진(Google Compute Engine), 마이크로소프트 애저(Microsoft Azure), 랙스페이스(Rackspace) 등 많이 쓰이는 클라우드 플랫폼에서도 실행된다.
컨테이너가 결국 완전한 서버 가상화를 대체할 것인가?
가까운 미래에는 일어나지 않을 가능성이 높다. 몇 가지 중요한 이유가 있다.
첫째, 보안 면에서 가상머신이 컨테이너보다 낫다는 의견이 아직 지배적이다. 가상머신이 제공하는 격리 수준이 더 높기 때문이다.
둘째, 관리 도구 측면에서 보면, 가상화된 인프라 관리 소프트웨어(예: VM웨어의 v센터 또는 마이크로소프트의 시스템 센터(System Center))는 포괄적인데 반해 많은 수의 컨테이너 편성에 사용할 수 있는 관리 도구는 아직 그렇지 못하다. 가상화된 인프라 관리 소프트웨어에 이미 많은 투자를 한 회사들로서는 가상화된 인프라를 포기할 만한 아주 좋은 이유가 있지 않는 한 포기할 가능성이 낮다.
이보다 더 중요한 이유는, 가상화와 컨테이너는 경쟁 기술이 아닌 상호 보완 기술로 여겨지고 있다는 것이다. 컨테이너는 경량 가상머신에 구동함으로써 격리를 늘려 보안 기능을 강화할 수 있으며, 하드웨어 가상화는 컨테이너 지원에 필요한 하드웨어 인프라(네트워크, 서버, 스토리지) 관리를 수월하게 해 주기 때문이다.
VM웨어는 가상머신 인프라에 투자한 고객들에게 v센터에서 관리 가능한 경량 가상머신 내부의 포톤 OS 컨테이너 리눅스 디스트로(distro)에서 컨테이너를 구동할 것을 권장한다. 이것이 VM웨어의 ‘가상머신 내의 컨테이너’ 전략이다.
이와 함께 VM웨어는 ‘v스피어 통합 컨테이너’(VIC:vSphere Integrated Containers)라는 것도 도입했다. 이 컨테이너는 마치 가상머신인 것처럼 v센터 서버에 배치하거나 독립형 ESXi 호스트에 직접 배치할 수 있다. 이것이 VM웨어의 “가상머신으로서의 컨테이너” 전략이다.
두 가지 접근 방식 모두 장점이 있지만, 중요한 것은 가상머신을 대체하는 대신 가상화된 인프라 내에서 컨테이너를 사용할 수 있다면 유용한 경우가 많다는 점이다. dl-ciokorea@foundryco.com