Docker란?
#import
Docker?
Docker
는 Container
형 Application
의 빌드, 배치, 관리 기능을 제공하는 오픈 소스 플랫폼이다.
Docker
는 LinuXContainer
를 생성 및 사용할 수 있도록 하는 Container화 기술로,
Docker
는 개발자가 개발한 Source Code(Application)
를 실행하는 표준 방식을 제공한다.
쉽게 말해 Docker
는 Container
를 위한 운영 체제(O/S)이다.
Docker
를 사용하면 Container
를 아주 가벼운 Module 형식 VM
처럼 다룰 수 있다.
Docker
를 통해 개발자는 Application
을, Container
로 Packaging
할 수 있다.
아래 그림은 Container
와 가상 머신(Virtual Machine)
의 차이점을 보여준다.
VM
환경에서는 Server 위 Hypervisor
를 통해 여러개의 O/S
를 구동시켜,
다수의 Application을 구동 시키는 형식이지만,
Container
의 경우 하나의 O/S
위에,
Docker Engine
내에서 여러개의 Container
를 구동시켜,
다수의 Application을 구동 시킬 수 있다.
Container?
Docker
에서 사용하는 Container
개념 이전에,
Linux O/S
에는 LinuXContainer(LXC)
라는 Container
기능이 2008년 부터 제공되고 있었다.
이 LinuXContainer(LXC)
는 단일 Instance
에 대해 가상화 기능을,
Linux 커널 단에서 제공한다.
Container In Docker
Docker
에서 Container
의 개념은,
Application
Source Code를 임의의 환경에서 실행하기 위해 필요한,
O/S
Library 및 종속 항목과 결합하여 실행 가능한 표준 Component이다.
이러한 Container
는 분산형으로 분화되는 Application의 실행 환경 Delivery를 간소화해주며,
Cloud 환경으로 이전되는 개발환경 상황에서 유용하게 사용된다.
Docker VS LXC
Docker
는 LinuXContainer(LXC)
에 아래와 같은 기능을 추가하였다.
완벽한 이식성
LXC
가 간간히 System의 특정 구성을 참조하는데에 반해,
Docker
의 Container
는 DeskTop, Data Center, Cloud 환경에서 별도의 수정없이도 실행된다.
경량성
LXC
를 사용할 경우 다수의 Process를 하나의 단일 Container
안에서 결합할 수 있다.
Docker
의 Container
를 사용할 경우,
각 Container
안에서는 하나의 Process만 실행할 수 있다.
이를 통해서 Update나 수정사항 반영을 위해 하나의 Process를 중단하는 동안에도,
계속해서 실행 가능한 Application을 Build 할 수 있다.
자동 Build
Docker
는 Application Souce Code를 기반으로,
Container
를 자동으로 Build할 수 있다.
Container Version 관리
Docker
는 Container
이미지의 버전에 대해,
Version Rollback이나 Build한 사용자 및 방법 등을 Tracking할 수 있다.
더나아가 이전 버전과 신규 버전 사이의 변경점만 Upload할 수 있다.
재사용성
새로운 Container
를 생성할 때,
기존에 사용하던 Container
를 Template 형식으로 재사용하여,
기본 이미지로 사용하며 생성할 수 있다.
공유성
자신이 생성한 Container
이미지나 다른 사람이 생성한 Container
이미지를,
Open Source Registry
에 등록 및 참조하여 사용할 수 있다.
Docker 구조
Docker
의 구조를 살펴보면 아래 그림과 같다.
Docker
가 실행될 때 구성 요소는 크게 5가지로,
Docker Daemon
, Docker Client
, Doker Host
, Docker Object
, Docker Registry
가 있다.
위 그림을 토대로 구성 요소들을 살펴보면 아래와 같다.
Docker Daemon
Docker Daemon
은 dockerd
로 지칭되며,
Docker API
요청을 수신하고 Docker Object
인,
Image
, Container
, Network & Volume
를 관리한다.
Docker Daemon
은 Docker Service
관리를 위해 다른 Docker Daemon
과 통신할 수 있다.
Docker Client
Docker Client
는 docker
로 지칭되며,
Docker
를 사용하는 사용자, 개발자가 Docker
와 상호 작용하는 기본 방법이다.
Docker Client(docker)
는 docker run
와 같은 명령을,
Docker Daemon(dockerd)
에게 보냄으로 써 Docker API
를 요청한다.
Docker Client
는 하나 이상의 Docker Daemon
과 통신할 수 있다.
Docker Host
Docker Host
는 Docker Engine
을 구동시키는 Server를 생각하면 된다.
하나 이상의 Docker Daemon
을 구동하는 Server
로,
해당 Server
내부에서 Docker Client(docker)
의 명령을 토대로,
자신이 구동중인 Docker Daemon(dockerd)
로 명령을 전달한다.
Docker Object
Docker
를 사용하면 Image
, Container
, Network & Volume
등을 만들어 사용하게 되는데,
이들을 Docker Object
라 지칭한다.
Image
Docker
에서 실질적으로 자주 사용하게되는 Docker Image
에 대해 조금 더 살펴보면 아래와 같다.
Image
는 Docker Container
를 생성할 수 있는 Template
형식이다.
자신만의 Docker Container
생성을 위한 Image
를 만들거나,
Registry
에 등록된 다른 사용자의 Image
를 토대로 사용 및 수정하여,
Docker Container
를 생성할 수 있게 해준다.
고유한 Image
Build를 위해서는 Image
생성 및 실행을 위한 단계를,
정의하기 위한 간단한 구문을 사용해 Dockerfile
을 만든다.
이 Dockerfile
의 각 명령은 Image
에 계층(Layer)
을 생성하게 된다.
이 Dockerfile
을 변경해 Image
를 다시 Build 하면,
변경된 계층(Layer)
만 다시 Build 되어,
다른 가상화 기술과 비교해 Docker
를 사용하는 이유인,
경량성
을 충족시키는 부분이다.
Container
Cotainer
은 앞서 살펴본 Image
를 통해 실제로 메모리 영역에 Onload 된 Instance
이다.
Docker API
나 CLI
를 사용해 Container
를 생성, 시작, 중지, 삭제 등 관리할 수 있다.
댓글남기기