Docker


- 도커는 리눅스 컨테이너에 여러 기능을 추가함으로써 애플리케이션을 컨테이너로서 좀 더 쉽게 사용할 수 있게 만들어진 오픈소스 프로젝트이다.

- Go 언어로 작성 돼 있다.

- 도커와 관련된 프로젝트는 도커 컴포즈(Compose), 레지스트리, 도커머신, Kitematic 등 여러가지가 있지만 일반적으로 도커 엔진, 도커 관련 프로젝트를 일컫는다.


- 도커는 원래 리눅스에서 작동하는데 최적화 돼 있으므로, 윈도우 혹은 MAC OS에서 사용할 경우 일부 기능의 제약이 있을 수 있다.




가상 머신과 도커 컨테이너


기존의 가상화 기술은 하이퍼바이저를 이용해 여러 개의 운영체제를 하나의 호스트에서 생성해 사용하는 방식이었다.




출처: https://devnet.kentico.com/articles/running-kentico-in-a-docker-container

(기존의 가상화 머신과 도커의 비교)




그러나 각종 시스템 자원을 가상화하고 독립된 공간을 생성하는 작업은 하이퍼 바이저를 반드시 거치기에 일반 호스트에 비해 성능 손실이 발생한다. 즉 가상 머신은 완벽한 운영체제를 생성할 수 있다는 장점은 있지만 일반 호스트에 비해 성능 손실이 있으며, 이에 따른 배포에 부담이 있을 수 있다.


반면 도커 컨테이너는 가상화된 공간을 생성하기 위해 리눅스 자체 기능인 chroot, namespace, cgroup를 사용함으로서 프로세스 단위의 격리 환경을 만들기 때문에 성능의 손실이 거의 없다. 


컨테이너에 필요한 커널은 호스트의 커널을 공유해 사용할 수 있으며, 컨테이너 안에서 사용하는 애플리케이션을 구동하는데 필요한 라이브러리 및 실행파일만 존재하기 때문에 이미지의 크기가 줄어들게 된다.


도커 컨테이너 이미지는 코드, 런타임, 시스템 도구, 라이브러리 및 설정과 같은 애플리케이션 단위의 프로그램을 실행하는데 필요한 모든 것을 포함하는 경량 소프트웨어 패키지다.


컨테이너 이미지를 생성하여 실행(Runtime)할 때 컨테이너가 생성된다. - (이미지는 도커엔진이 실행하여 컨테이너로 만들어준다.)



정리하면 도커 컨테이너의 특징은 간단하게 3가지로 구분할 수 있다.


1) Standard : 컨테이너는 표준화된 소프트웨어이기에 손쉽게 개발, 배포가 가능하다.

2) LightWeight : 컨테이너는 OS의 커널을 공유하기 때문에 애플리케이션 별 OS가 필요하지 않다. 때문에 서버효율성이 증대된다.

3) Secure : 애플리케이션은 컨테이너에서 안전하며, 도커에서 기본적으로 안정성을 제공한다.








'Cloud & NoSQL & Middleware > Docker' 카테고리의 다른 글

Docker Network (2) - 브리지(bridge) network  (0) 2018.09.17
Docker Network (1) - docker0  (0) 2018.09.14
Docker Container - 명령어 & Volume  (0) 2018.09.09
Docker Engine, image  (0) 2018.09.08
Docker in MacOS 설치  (0) 2018.08.04

+ Recent posts