posted by 귀염둥이채원 2018. 4. 3. 01:43

도커(Docker)는 오픈소스 프로젝트로, 하이퍼바이저(hypervisor) 없이 리눅스 컨테이너(Linux Container, LXC) 기술을 바탕으로 애플리케이션을 격리된 상태에서 실행하는 가상화 솔루션이다. 특히 하이퍼바이저 기반 가상화의 보완책으로 각광받고 있다. 


간단히 말해 도커는 플랫폼에 상관없이 실행될 수 있는 애플리케이션 컨테이너를 만드는 기술이다. 


이는 운영체제를 통째로 가상화하는 기존의 하이퍼바이저 기반 가상화와는 다른 접근 방식으로, 그 핵심은 바로 호스트 운영체제의 ‘공유’와 애플리케이션의 ‘격리’다.


하이퍼바이저: 다수의 운영체제를 하나의 컴퓨터 시스템에서 가동할 수 있게 하는 소프트웨어. CPU와 운영체제 사이에 일종의 미들웨어


하이퍼바이저 기반 가상머신은 애플리케이션에 독립된 환경을 구축해 준다는 것이 장점이지만, 애플리케이션을 실제로 배포하는 용도로 활용하기에는 무리가 있다. 호스트 운영체제 위에 또다른 운영체제, 그것도 여러 개의 운영체제를 쌓아 올리는 것 자체가 자원을 비효율적으로 활용하는 것이기 때문이다. 하이퍼바이저가 가상머신 각각의 운영체제를 격리시켜 독자적으로 동작할 수 있게 하는 것과 같이, 컨테이너 또한 애플리케이션이나 프로세스가 해당 컨테이너 안에서 샌드박스 처리돼 외부 요인에 영향받는 일 없이 안전하게 구동될 수 있게 한다. 


그러나 도커는 하이퍼바이저처럼 애플리케이션 각각에 운영체제를 제공하는 것이 아니라 호스트의 운영체제를 ‘공유’하는 방식이다.


도커는 컨테이너, 구체적으로는 ‘리눅스 컨테이너’를 통해 CPU, RAM, 파일 시스템, 스토리지, 네트워크 등의 자원을 할당받아 애플리케이션이나 프로세스가 독립적으로 운영될 수 있게 하는 기술로, 여러 개의 애플리케이션을 단일 호스트에서 구동한다. 


즉, 도커는 하이퍼바이저의 ‘자원의 비효율적 분배’라는 단점을 극복하는 한편, ‘애플리케이션 격리’라는 장점을 극대화는데 초점을 맞춘 것이다. 


# 도커의 장점

첫째, 도커는 빠르고 가벼운 가상화 솔루션을 제시한다.

도커는 호스트의 운영체제를 공유해 필요한 최소한의 리소스만 할당받아 동작하는 방식이기 때문에 운영체제 전체를 구동해야 하는 일반적인 가상머신에 비해 훨씬 빠르다. 하이퍼바이저를 사용하는 가상머신이 애플리케이션을 실행하는데 종종 수 분 가량의 시간이 걸리는데 반해 도커의 컨테이너는 단 몇 초 만에 애플리케이션을 실행할 수 있다. 또한, 도커는 단일 호스트에서 다중 워크로드를 구동할 수 있기 때문에 하이퍼바이저 기반 가상화에 비해 훨씬 더 가볍게 가상화 환경을 구성할 수 있다. 


둘째, 도커는 개발자에게 좀 더 자유로운 개발 환경을 보장한다. 

도커를 사용하면 개발자는 개발 언어나 툴에 상관없이 어떠한 애플리케이션이라도 만들 수 있으며, 도커에서 만들어진 앱은 이동성이 좋아지고 어디서나 실행될 수 있다. 즉, 컨테이너의 가장 큰 장점 중 하나는 바로 ‘이식성’이다. 컨테이너는 자체 서버에서도 구동할 수 있고, 클라우드 상에서 구동할 수도 있는 것다. 프로그래머들은 애플리케이션을 작성해 이를 컨테이너에 담고, 애플리케이션 자체는 컨테이너에 담긴 상태로 다양한 환경으로 옮겨져 실행될 수 있다. 예를 들어, 맥 OS X 노트북과 윈도우 노트북, 클라우드 내 우분투로 운영되는 QA 서버, 그리고 레드햇으로 운영되는 데이터센터 가상머신에 이르기까지 모두 함께 사용할 수 있다는 의미다. 


셋째, 도커를 사용하면 개발과 운영의 호환성이 증가한다. 

도커의 설립자이자 CTO인 솔로몬 하이크스는 홈페이지에서 “도커는 개발자와 시스템 관리자를 위한 개방형 플랫폼으로, 애플리케이션을 만들고, 이전하고 실행하기 위해 쓰인다.


도커 엔진(Docker Engine)은 이동성이 좋고 가벼운 애플리케이션 런타임과 패키징 도구이며, 도커 허브(Docker Hub)는 애플리케이션 공유와 자동 워크 플로우를 위한 클라우드 서비스”라고 설명했다.



시스템 관리자는 도커를 개발팀, QA, 그리고 생산팀을 위한 표준화된 환경을 제공하는데 사용할 수 있다.


관리자는 도커를 통해 자체 보유 서버와 클라우드의 가상머신 등 어떤 플랫폼에도 상관없이 기업 애플리케이션을 일일이 변형시키지 않고도 신속하게 서비스를 제공할 수 있다.


일반적인 ‘Install > Configure > Run’ 모드를 거치지 않고도 ‘Copy > Run’ 과정만으로도 모든 작업을 완료할 수 있는 것이다. 


즉, 도커를 통해 개발자는 애플리케이션을 좀더 쉽게 만들고, 시스템 관리자는 이를 좀더 쉽게 배포할 수 있다.


한편, 컨테이너는 단일 운영체제를 사용하는 환경에서는 매력적인 선택이지만, 오직 리눅스 플랫폼에서만 동작하기 때문에 여러 운영체제를 구동해야 할 필요가 있는 환경에서는 가상머신과 하이퍼바이저가 유용한 방안이다.


'클라우드' 카테고리의 다른 글

오픈스택(Openstack)이란?  (0) 2018.04.03