안전하게 어디서나 애플리케이션을
구축하고 공유, 실행한다.
공식홈페이지에서 도커의 개요를 보면
"Docker는 컨테이너 이동을 주도하는 회사이며 하이브리드 클라우드의
모든 애플리케이션을 처리할수 있는 유일한 컨테이너 플랫폼 제공 업체
입니다" 라고 쓰여있습니다.
하이퍼바이저(Hypervisor)
하이퍼바이저는 물리적 하드웨어에 설치된 소프트웨어 계층으로
물리적 머신을 다수의 가상 머신으로 분할할 수 있도록 해줍니다. 하이퍼바이저를 이용하면 동일한 물리적 하드웨어에서 여러 운영 체제를 동시에 실행할 수 있습니다.
가상 머신에 설치된 운영 체제는 게스트 OS라고 부르며 경우에 따라 인스턴스라고 부를 때도 있습니다. 또한 하이퍼바이저가 실행되는 하드웨어는 호스트 머신이라고 부릅니다.
하이퍼바이저의 종류로는 두 가지가 있습니다. Type 1, Type 2가 있습니다.
리눅스 컨테이너 (LinuX Containers, LXC)란
리눅스 컨테이너는 “단일 컨트롤 호스트 상에서 여러 개의 고립된 리눅스 시스템(컨테이너)들을 실행하기 위한 운영 시스템 레벨 가상화 방법이다.
앞 특징에서 설명한 하이퍼바이저(Hypervisor) 없이
리눅스 컨테이너(LinuX Containers, LXC) 기술을 바탕으로
애플리케이션을 격리된 상태로 실행할 수 있는 가상화 솔루션입니다
도커는 리눅스의 컨테이너 기술인 LXC(리눅스 컨테이너)의 기술로 시작하여 개발에 사용되었으나
0.9버전부터 libcontainer를 개발해서 사용하고있다.
가상 머신은 하이퍼바이저에 의해 생성된 다른 게스트 운영체제와 분리 독립된 공간과 자원을 할당받아 사용됩니다. 가상 머신은 안정 및 보안성 관련 측면에서는 효율적으로 볼 수 있지만, 일반 호스트 운영체제에 비해 성능의 손실이 발생됩니다. 가상 머신을 이미지로 생성 시, 굉장히 많은 용량을 가지게 됩니다. 이에 이미지를 배포 시, 용량으로 인해 부담이 존재한다는 단점이 있습니다.
도커 컨테이너는 가상화 공간을 생성하기 위해 리눅스의 자체적인 기능인 chroot, 네임스페이스(namespace), cgorup을 사용합니다. 프로세스 단위의 분리 독립된 환경을 생성하기 때문에 성능 손실은 희박합니다.
도커 컨테이너에서 필요한 커널은 호스트의 커널을 공유해서 사용합니다. 컨테이너 내부는 application을 실행하는데 필요한 라이브러리 및 실행 파일만 존재하기 때문에 컨테이너를 이미지로 생성 시, 가상 머신을 이미지로 생성했을 때에 비해 굉장히 적은 용량으로 이미지를 생성할 수 있습니다. 이미지를 배포하는데도 시간적으로도 빠르며, 성능 손실 부분이 희박하다는 점에서도 장점이 있습니다.
바다는 결국 고래가 사는환경 호스트OS 이고 고래는 도커 엔진이며 고래가 등에 지고다니는 컨테이너들은 결국 각자의 어플리케이션이 독립된 환경에서 수행할수있는 패키지입니다.
정리하면....
가상머신은 하드웨어 스택을 가상화합니다. 컨테이너는 이와 달리 운영체제 수준에서 가상화를 실시하여 다수의 컨테이너를 OS 커널에서 직접 구동합니다. 컨테이너는 훨씬 가볍고 운영체제 커널을 공유하며, 시작이 훨씬 빠르고 운영체제 전체 부팅보다 메모리를 훨씬 적게 차지합니다.
도커 이미지는 베이스 이미지에서 몇가지를 라이브러리, 프로그램, 소스 파일등을 추가/설치/저장한 이미지다. 도커 이미지는 베이스이미지부터 상속받듯이 만들어진다. 즉, 베이스이미지에서 추가되거나 변형되는 부분만 도커 이미지에 저장된다. 이렇게 만들어진 도커 이미지는 또 수정될 수 있는데, 이렇게 수정되면 또 그 변형된 부분만 다시 도커 이미지에 저장된다.
도커 이미지는 베이스 이미지에서 몇가지를 라이브러리, 프로그램, 소스 파일등을 추가/설치/저장한 이미지다.
도커 이미지란 컨테이너를 생성하기 위해 필요한 설계도 개념입니다. 도커 컨테이너와 이미지의 관계는 마치 디스크에 저장된 프로그램과 이를 실행했을때 메모리에 상주하게 되는 프로세스 관계와 비슷합니다.
이미지에는 베이스 이미지 라는게 있는데, 배포판 리눅스에서 유저랜드(User Land)만을 포함하는 파일을 말합니다. 이러한 베이스 이미지는 직접 만들 수도 있으며, 리눅스 배포판 유저랜드에 mysql, wordpress 등의 어플리케이션까지 포함되는 베이지 이미지도 있습니다.
즉 도커 이미지는 베이스 이미지에 필요한 어플리케이션 및 라이브러리등을 포함시킨 것을 의미합니다.
도커 이미지는 컨테이너를 생성하기 위한 파일입니다. 도커의 이미지는 형상관리 툴인 Git에 비유되곤 하는데, 다음의 구조를 보면 더욱 비슷하게 느낄 수 있습니다. 이미지들간의 관계는 마치 Git의 브랜치와 같이 트리구조로 분기되어지는 형태를 가집니다.
도커는 가상머신과 다르게 이미지를 관리할 수 있는 기능들을 제공합니다. Git 원격 저장소인 GitHub에서 소스를 관리하듯이 도커에서는 이미지를 Docker Hub(https://hub.docker.com/)라는 중앙 저장소에서 관리하며, 이미지 버전 관리 기능까지 제공합니다. Git과 마찬가지로 이미지를 Push(업로드), Pull(다운로드) 할 수 있으며, 다양한 어플리케이션을 이미지로 제공하고 있습니다. 물론 Git과 마찬가지로 유료 저장소 또한 제공됩니다.
또한 하나의 이미지만 있으면 서버가 몇대가 되든 여러개의 컨테이너
생성이 가능합니다.
FROM bridh/java8
ENV http_proxy 'http://proxy.*****.co.kr:8080
ENV http_proxy 'http://proxy.*****.co.kr:8080
RUN export http_proxy=$http_proxy&&export https_proxy=$https_proxy
Pass & Docker
다양한 개발.운영 환경에 적용할 수 있는 유연한 배포방식 제공