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를 생성, 시작, 중지, 삭제 등 관리할 수 있다.
댓글남기기