docker logo
도커의 의미
공식 홈페이지에서 도커의 개요를 보면 도커란 "Docker는 컨테이너 이동을 주도하는 회사이며 하이브리드 클라우드의 모든 애플리케이션 을 처리할 수 있는 유일한 컨테이너 플랫폼 제공 업체입니다“ 라고 쓰여있다.
여기서 '컨테이너'란 말에 주목할 필요가 있다.
컨테이너란 무엇일까?
아래 그림을 보면 대충 감이 온다. 아래에 도커 이미지를 보면 귀여운 배 위에 컨테이너를 올린 모습을 볼 수 있다.
대충 아! 컨테이너란 "다양한 OS에 여러 application이 올려져 있는 것"을 의미하는 거고 그런 컨테이너를 도커 위에 올리는구나
도커는 2013년 3월에 출시한 오픈소스 컨테이너 프로젝트다. 현재 2년정도 지난 시점에 세계적으로 엄청난 인기를 구사중인 대단한 프로젝트기도 하다.
서버시장이 클라우드 환경으로 옮겨가게 되면서 우리는 가상서버를 손쉽게 수백대를 구매하여 바로 사용할 수 있게 되었다. 그런데, 서버 갯수가 많아지면서 각각의 서버에 소프트웨어 설치와 설정이 큰 귀찮음으로 다가오게 됐다. 몇개 안됐다면 직접 할텐데 갯수가 엄청나니 이것을 처리할 무언가가 필요했다.
초기에 쉘 스크립트를 통해 해결하려는 시도도 있었다. 이 방법으로 필자도 오랜기간 서버 관리를 해왔다. 그러나 쉘 스크립트는 복잡한 기능 구현은 거의 불가능 할 뿐더러 자동화의 한계가 있다. 이를 어떻게 해결 할 것인가.
이를 해결하기 위해 나온 아이디어가 바로 Immutable Infrastructure다. 그 서버에 깔린 OS(호스트 OS)와 서비스 운영을 위한 환경(서버 운영을 위해 필요한 프로그램들; node js, mysql, java등)을 분리해 이 서비스 운영환경을 패키징 해 배포한다는 아이디어이다. 이때 이/ 패키지를 데몬툴즈같은 가상 이미지 파일과 비슷하다해서 이미지라 부른다. 어쨋든 이런 생각을 구현한 것이 Docker다.
이것은 엄청난 확장성을 가져다 준다. 클라우드 플랫폼에 이것을 적용하면 자동 확장이 가능해지고 마치 공장에서 틀에 물건을 찍어내듯 마구마구 서비스를 확장할 수 있다.
도커의 특징
- 플랫폼에 상관없이 실행 가능한 애플리케이션 컨테이너를 만드는 기술입니다.
- 하이퍼바이저(Hypervisor) 없이 리눅스 컨테이너(LinuX Containers, LXC) 기술을 바탕으로 애플리케이션을 격리된 상태로 실행할 수 있는 가상화 솔루션입니다.
하이퍼바이저(Hypervisor)란?
- 호스트 PC에서 다수의 운영체제를 동시에 실행하기 위한 플랫폼입니다.
- 예를 들어, 개인 노트북에 현재 설치되어 있는 운영체제를 Windows 10(64 bit)이 설치되어 있다고 가정을 해보겠습니다.
- 현재 사용하는 운영체제는 Windows 10(64 bit) 인데, Ubuntu 운영체제를 사용해야 하는 상황이 발생했습니다.
- 노트북 컴퓨터에 설치되어 있는 운영체제인 Windows 10을 밀고, Ubuntu를 설치해야 할까요?
- 하이퍼바이저를 이용해서 사용하면 됩니다. 이 때, 어떻게 Ubuntu 운영체제를 사용할까요?
- Windows 10 운영체제에 하이퍼바이저를 설치하고, 하이퍼바이저 내에 Ubuntu 운영체제를 설치해 사용하면 됩니다.
도커 컨테이너 VS 가상 머신
Docker Containers vs Virtual Machine
위 그림은 도커 컨테이너와 가상 머신을 비교한 그림입니다.
가상 머신(Virtual Machine)
기존 가상화 기술은 하이퍼바이저(Hypervisor)를 이용해 여러 개의 운영체제들을 하나의 호스트 OS에서 사용하는 방식이었습니다. 하이퍼바이저에서 생성되고 관리되는 운영체제를 가상 머신(Virtual Machine) 또는 게스트 운영체제(Guest OS)라고 합니다.
가상 머신은 하이퍼바이저에 의해 생성된 다른 게스트 운영체제와 분리 독립된 공간과 자원을 할당받아 사용됩니다. 가상 머신은 안정 및 보안성 관련 측면에서는 효율적으로 볼 수 있지만, 일반 호스트 운영체제에 비해 성능의 손실이 발생됩니다. 가상 머신을 이미지로 생성 시, 굉장히 많은 용량을 가지게 됩니다. 이에 이미지를 배포 시, 용량으로 인해 부담이 존재한다는 단점이 있습니다.
도커 컨테이너(Docker Containers)
도커 컨테이너는 가상화 공간을 생성하기 위해 리눅스의 자체적인 기능인 chroot, 네임스페이스(namespace), cgorup을 사용합니다. 프로세스 단위의 분리 독립된 환경을 생성하기 때문에 성능 손실은 희박합니다.
도커 컨테이너에서 필요한 커널은 호스트의 커널을 공유해서 사용합니다. 컨테이너 내부는 application을 실행하는데 필요한 라이브러리 및 실행 파일만 존재하기 때문에 컨테이너를 이미지로 생성 시, 가상 머신을 이미지로 생성했을 때에 비해 굉장히 적은 용량으로 이미지를 생성할 수 있습니다. 이미지를 배포하는데도 시간적으로도 빠르며, 성능 손실 부분이 희박하다는 점에서도 장점이 있습니다.
참고
https://lukelee91.github.io/blog/docker/
https://likefree.tistory.com/18
https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html
'Capstone > Capstone1 - 2019-2학기' 카테고리의 다른 글
[6] 구글 이미지 크롤러 (0) | 2019.12.18 |
---|---|
[5] Yolo mark 사용법 (2) | 2019.12.18 |
[4] YOLO 설치 및 실행 방법 (0) | 2019.12.13 |
[3] YOLO 설치전 OpenCV 3.2 설치 (0) | 2019.12.13 |
[1] 개발 배경 ( 포트홀로 인한 사고) (0) | 2019.12.12 |