Infomation

도커(Docker) 살펴보기

DarkSoul.Story 2016. 6. 5. 14:00
반응형



최근들어 점점 주목박고 있는 오픈소스 어플리케이션 컨테이너 기술인 도커(Docker)에 대해서 살펴본다.


 Steps.

 1. 도커 (Docker) 란?

 2. 기본 가상화 기술과 Docker (LXC 기술)의 차이점


1. 도커 (Docker) 란?


도커(Docker)는 오픈소스 프로젝트명인 동시에 기업명이기도 하다. 도커(Docker)는 리눅스컨테이너 (LXC : LinuX Containers) 기술을 기반으로 어플리케이션 샌드박스를 자동으로 생성하는 기술이다. 리눅스 운영체제 상에 CPU, 메모리, 스토리지, 네트워크 등의 자원을 애플리케이션마다 별도로 격리된 가상공간으로 할당해서 개발자가 어플리케이션을 도커 플랫폼을 활용해 개발하면 설정부터 애플리케이션 배포까지 자동화된다. 도커(Docker)는 도커 엔진, 컨테이너 런타임, 패키징 툴, 도커허브 등으로 구성되는 플랫폼으로, 레드햇(Red Hat), 데비안(Debian), 우분투(Ubuntu), 페도라(Fedora), 젠투(Gentoo), 수세 리눅스(SUSE ), 아크 리눅스 (Ark Linux) 등 현존하는 주요 리눅스 배포판에서 동작하며, boot2docker를 통해 Mac OS X, Windows에서도 동작한다. 


 LXC (LinuX Containers)는 단일 컨트롤 호스트 상에서 여러개의 고립된 리눅스 시스템 (컨테이너)들을 실행하기 위한 운영 시스템 레벨 가상화 방법이다. 리눅스 커널은 cgroups를 절충하여 가상화 머신을 시작할 필요 없이 자원 할당 (CPU, 메모리, 블록 I/O, 네트워크 등)을 한다. Cgroups는 또한 애플리케이션 입장에서 프로세스 트리, 네트워크, 사용자 ID, 마운트된 파일 시스템 등의 운영 환경을 완전히 고립시키기 위해 namespace isolation을 제공한다. LXC는 cgroups와 namespace를 결합하여 애플리케이션을 위한 고립된 환경을 제공한다. - 위키백과 (https://ko.wikipedia.org/wiki/LXC)


도커(Docker)는 두가지 주요 구성요소가 있다. 


Docker Engine : 오픈소스 컨테이너화 플랫폼 (the open source containerization platform)

Docker Hub : SaaS 플랫폼 (Software-as-a-Service platform), Docker container를 공류하고 관리하는 플랫폼


참고 : Docker는 open source Apache 2.0 license로 배포된다.


2. 도커 아키텍처 (Docker architecture)


도커(Docker)는 클라이언트-서버 아키텍처를 사용한다. Docker Client는 Docker Daemon과 소켓(socket) 또는 RESTful API를 통해 통신을 하며, Docker building, Docker 실행, Docker container 배포등을 한다. Docker Client와 Docker Daemon은 동일한 시스템에서 실행하거나 원격에 있는 Docker Daemon에 Docker Client를 연결할 수 있다.



1) Docker Daemon


위 그림에서 보듯이 Docker Daemon은 호스트 시스템에서 실행 된다. 사용자는 Docker Daemon과 직접 상호 작용하지 않으며, Docker Client를 통해서만 상호 작용할 수 있다.

 

2) Docker Client


Docker Client는 docker 바이너리 형태로 주요 사용자 인터페이스로, 사용자로부터 명령을 받아 Docker Daemon과 통신한다.


3) Docker 내부


Docker 내부를 이해하려면 도커 이미지(Docker image), 도커 레지스트리(Docker registry), 도커 컨테이너(Docker container) 대해서 알아야 한다.


① 도커 이미지(Docker image)


도커 이미지(Docker image)는 읽기 전용 플랫폼으로, 도커 컨테이너(Docker container)를 만드는데 사용된다. 도커(Docker)는 기존의 이미지를 새로운 이미지를 만들거나 업데이트 할 수있는 간단한 방법을 제공한다. 그리고, 다른 사람들이 이미 만든 도커 이미지(Docker image)를 다운로드 할 수 있다. 도커 이미지(Docker image)는 도커(Docker)의 빌드 구성 요소이다.


각 이미지는 일련의 레이어로 구성되어 있으며, 하나의 이미지에 UnionFS (Union file systems)을 사용하여 레이어를 결합한다. 도커 이미지(Docker image)를 변경하면 새로운 레이어가 구축된다. 따라서 이미지 전체를 교체하거나 재구성되는 것이 아니라 해당 레이어만 추가 또는 업데이트된다. 


각각의 명령은 이미지에 새 레이어를 만들며, 아래와 같은 작업을 포함한다. 


- 명령 실행

- 파일이나 디렉토리를 추가

- 환경 변수를 만듬

- 이미지에서 컨테이너를 시작할 때 지정한 프로세스를 실행


명령들은 Dockerfile라는 파일에 저장되어 있으며, 기본 이미지에서 이미지를 구축하기 위한 명령과 명령에 대한 설명이 포함된 텍스트 기반의 스크립트이다. 도커(Docker)는이미지의 빌드를 요청할 때, 이 Dockerfile을 읽고 지시사항을 실행하고, 최종 이미지를 반환한다.


② 도커 레지스트리(Docker registry)


도커 레지스트리(Docker registry)는 이미지와 연결되어 있으며, 이미지를 업로드하거나 다운로드하는 공용 또는 개인 저장소로 도커(Docker)의 배포 구성 요소 이다. Docker Client를 사용하여, 이미 게시된 이미지를 검색 하거나, 컨테이너를 구축하기 위해 도커 호스트로 다운로드 할 수 있다. 공용 도커 레지스트리(Docker registry)는 도커 허브(Docker Hub)와 함께 제공된다. 


도커 허브(Docker Hub)는 이미지에 대한 공용/개인 저장 공간을 모두 제공한다. 공용 저장소는 누구나 검색하고 다운로드할 수 있다. 개인 저장소는 검색 결과에서 제외된다.


③ 도커 컨테이너(Docker container)


도커 컨테이너(Docker container)는 디렉터리와 비슷하며, 응용 프로그램을 실행하는데 필요한 모든 것을 보유하고 있으며, 각 컨테이너는 별도의 안전한 응용 프로그램 플랫폼이다. 도커 컨테이너(Docker container)는 운영 체제 사용자가 추가한 파일 및 메타 데이터로 구성되어 있으며, 도커(Docker)의 실행 구성 요소 이다. 컨테이너는 도커 이미지(Docker image)에서 생성되며, 이동, 시작, 중지, 실행, 삭제할 수 있다. 즉 이미지 컨테이너는 컨테이너가 시작될 때 어떤 프로세스가 실행 될지, 기타 구성 및 다양한 데이터를 도커(Docker)에 알려준다. 도커 이미지(Docker image)에서 컨테이너를 실행하면 응용프로그램이 다음 실행할 수있는 이미지의 상단에 읽기 - 쓰기 레이어를 추가한다.


추가 보기 : Docker 한글 문서 / 영상 모음집(http://documents.docker.co.kr) : 도커에 관련된 한글 문서를 정리한 메타 문서




Reference

Docker : https://www.docker.com/



반응형