Docker

  • 도커란 무엇인가
  • 도커의 컨테이너 개념
  • 도커의 이미지란

Docker 란 무엇인가

안전하게 어디서나 애플리케이션을

구축하고 공유, 실행한다.

공식홈페이지에서 도커의 개요를 보면

 

"Docker는 컨테이너 이동을 주도하는 회사이며 하이브리드 클라우드의

모든 애플리케이션을 처리할수 있는 유일한 컨테이너 플랫폼 제공 업체

입니다" 라고 쓰여있습니다.

 

Docker란?

  • Docker는 2013년에 세상에 첫 선을 보였습니다.
  • Docker는 Go 언어로 개발된 오픈 소스 프로젝트입니다.
  • Docker는 컨테이너 기반 오픈 소스 가상화 플랫폼입니다.
  • 일반적으로 불리우는 Docker는 도커 엔진(Docker Engine)을 의미하고 있습니다.
  • 도커 엔진(Docker Engine)컨테이너 생성 및 관리하는 주체로,
    컨테이너를 제어할 수 있고 다양한 기능들을 제공합니다.
 

Docker의 특징

  • 플랫폼에 상관없이 실행 가능한 애플리케이션 컨테이너를 만드는
    기술입니다.

     
  • 하이퍼바이저(Hypervisor) 없이
    리눅스 컨테이너(LinuX Containers, LXC) 기술을 바탕으로
    애플리케이션을 격리된 상태로 실행할 수 있는 가상화 솔루션입니다.
 

하이퍼바이저(Hypervisor)

하이퍼바이저는 물리적 하드웨어에 설치된 소프트웨어 계층으로 

물리적 머신을 다수의 가상 머신으로 분할할 수 있도록 해줍니다. 하이퍼바이저를 이용하면 동일한 물리적 하드웨어에서 여러 운영 체제를 동시에 실행할 수 있습니다.
가상 머신에 설치된 운영 체제는
게스트 OS라고 부르며 경우에 따라 인스턴스라고 부를 때도 있습니다. 또한 하이퍼바이저가 실행되는 하드웨어는 호스트 머신이라고 부릅니다.

 

 

하이퍼바이저의 종류로는 두 가지가 있습니다. Type 1, Type 2가 있습니다.

 

  • 하드웨어 직접 설치되어 여러 개의 운영체제를 실행할 수 있다고 볼 수 있는 Type1
  • 즉, 호스트 운영체제에서 하이퍼바이저를 설치하고 그 하이퍼바이저를 통해 가상 시스템을 설치해 실행하는 것으로 볼 수 있습니다.
  • 물리 서버를 가상화 환경으로 만들기 위해서는
    하이퍼 바이저 ( Hypervisor ) 기술이 필요하다.

     
  • 하이퍼 바이저는 호스트 컴퓨터 1대에서
    다수의 운영체제를 동시에 실행
    할 수 있도록 해준다.

리눅스 컨테이너 (LinuX Containers, LXC)란

리눅스 컨테이너는 “단일 컨트롤 호스트 상에서 여러 개의 고립된 리눅스 시스템(컨테이너)들을 실행하기 위한 운영 시스템 레벨 가상화 방법이다.

 

  • 리눅스 컨테이너는 application과 실행에 필요한 모든 사항들을 포함하는 software 패키징 개념으로 볼 수 있습니다.
  • 쉽게 말해 application의 종속성과 함께 application을 독립적으로 캡슐화한 것으로 볼 수 있습니다.

Docker Container란?

앞 특징에서 설명한 하이퍼바이저(Hypervisor) 없이
리눅스 컨테이너(LinuX Containers, LXC) 기술을 바탕으로
애플리케이션을 격리된 상태로 실행할 수 있는 가상화 솔루션입니다

Docker를 사용하는 이유?

도커는 리눅스의 컨테이너 기술인 LXC(리눅스 컨테이너)의 기술로 시작하여 개발에 사용되었으나

0.9버전부터 libcontainer를 개발해서 사용하고있다.

 

 

가상 머신은 하이퍼바이저에 의해 생성된 다른 게스트 운영체제와 분리 독립된 공간과 자원을 할당받아 사용됩니다. 가상 머신은 안정 및 보안성 관련 측면에서는 효율적으로 볼 수 있지만, 일반 호스트 운영체제에 비해 성능의 손실이 발생됩니다. 가상 머신을 이미지로 생성 시, 굉장히 많은 용량을 가지게 됩니다. 이에 이미지를 배포 시, 용량으로 인해 부담이 존재한다는 단점이 있습니다.

가상 머신(Virtual Machine)

도커 컨테이너는 가상화 공간을 생성하기 위해 리눅스의 자체적인 기능인 chroot, 네임스페이스(namespace), cgorup을 사용합니다. 프로세스 단위의 분리 독립된 환경을 생성하기 때문에 성능 손실은 희박합니다.
도커 컨테이너에서 필요한 커널은 호스트의 커널을 공유해서 사용합니다. 컨테이너 내부는 application을 실행하는데 필요한 라이브러리 및 실행 파일만 존재하기 때문에 컨테이너를 이미지로 생성 시, 가상 머신을 이미지로 생성했을 때에 비해 굉장히 적은 용량으로 이미지를 생성할 수 있습니다. 이미지를 배포하는데도 시간적으로도 빠르며, 성능 손실 부분이 희박하다는 점에서도 장점이 있습니다.

도커 컨테이너(Docker Containers)

바다는 결국 고래가 사는환경 호스트OS 이고 고래는 도커 엔진이며 고래가 등에 지고다니는 컨테이너들은 결국 각자의 어플리케이션이 독립된 환경에서 수행할수있는 패키지입니다.

정리하면....

가상머신은 하드웨어 스택을 가상화합니다. 컨테이너는 이와 달리 운영체제 수준에서 가상화를 실시하여 다수의 컨테이너를 OS 커널에서 직접 구동합니다. 컨테이너는 훨씬 가볍고 운영체제 커널을 공유하며, 시작이 훨씬 빠르고 운영체제 전체 부팅보다 메모리를 훨씬 적게 차지합니다.

Docker Image란?

도커 이미지는 베이스 이미지에서 몇가지를 라이브러리, 프로그램, 소스 파일등을 추가/설치/저장한 이미지다. 도커 이미지는 베이스이미지부터 상속받듯이 만들어진다. 즉, 베이스이미지에서 추가되거나 변형되는 부분만 도커 이미지에 저장된다. 이렇게 만들어진 도커 이미지는 또 수정될 수 있는데, 이렇게 수정되면 또 그 변형된 부분만 다시 도커 이미지에 저장된다.
 

Docker Image란?

도커 이미지는 베이스 이미지에서 몇가지를 라이브러리, 프로그램, 소스 파일등을 추가/설치/저장한 이미지다.
 

도커 이미지란 컨테이너를 생성하기 위해 필요한 설계도 개념입니다. 도커 컨테이너와 이미지의 관계는 마치 디스크에 저장된 프로그램과 이를 실행했을때 메모리에 상주하게 되는 프로세스 관계와 비슷합니다.

Docker Image구조

이미지에는 베이스 이미지 라는게 있는데, 배포판 리눅스에서 유저랜드(User Land)만을 포함하는 파일을 말합니다. 이러한 베이스 이미지는 직접 만들 수도 있으며, 리눅스 배포판 유저랜드에 mysql, wordpress 등의 어플리케이션까지 포함되는 베이지 이미지도 있습니다.
즉 도커 이미지는 베이스 이미지에 필요한 어플리케이션 및 라이브러리등을 포함시킨 것을 의미합니다.

 

Docker Image 의존관계

도커 이미지는 컨테이너를 생성하기 위한 파일입니다. 도커의 이미지는 형상관리 툴인 Git에 비유되곤 하는데, 다음의 구조를 보면 더욱 비슷하게 느낄 수 있습니다. 이미지들간의 관계는 마치 Git의 브랜치와 같이 트리구조로 분기되어지는 형태를 가집니다.

도커 이미지 원격저장소 Docker Hub

도커는 가상머신과 다르게 이미지를 관리할 수 있는 기능들을 제공합니다. Git 원격 저장소인 GitHub에서 소스를 관리하듯이 도커에서는 이미지를 Docker Hub(https://hub.docker.com/)라는 중앙 저장소에서 관리하며, 이미지 버전 관리 기능까지 제공합니다. Git과 마찬가지로 이미지를 Push(업로드), Pull(다운로드) 할 수 있으며, 다양한 어플리케이션을 이미지로 제공하고 있습니다. 물론 Git과 마찬가지로 유료 저장소 또한 제공됩니다.

또한 하나의 이미지만 있으면 서버가 몇대가 되든 여러개의 컨테이너

생성이 가능합니다.

Dockerfile을 이용한 image 생성

 

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

다양한 개발.운영 환경에 적용할 수 있는 유연한 배포방식 제공

deck

By Beom lee