ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Docker? Docker? Docker!!
    카테고리 없음 2017. 3. 10. 22:08





    Docker 개념


    Docker는 Linux 기반의 Container RunTime 오픈소스이다. Virtual Machine 과 유사한 기능을 가지면서, Virtual Machine 보다 훨씬 가벼운 형태로 배포가 가능하다. VM과 Docker Container 차이를 살펴보자.


    아래는 VM에 대한 컨셉이다. Host OS가 깔리고, 그 위에 Hypervisor (VMWare, KVM, Xen etc)가 깔린 후에, 그 위에, Virtual Machine 이 만들어진다. Virtual Machine은 일종의 x86 하드웨어를 가상화 한 것이라고 보면된다. 그래서 VM위에 다양한 종류의 Linux나, Windows등의 OS를 설치할 수 있다. 




    Docker의 Container 컨셉은 비슷하지만 약간 다르다. Docker도 VM처럼 Docker Engine 이 Host 위에서 수행된다. 그리고 Container 는 Linux 기반의 OS만 수행이 가능하다. 

    Docker는 VM처럼 Hardware를 가상화 해주는 것이 아니라, Guest OS (Container)를 Isolation 해준다. 즉, Container의 OS는 기본적으로 Linux OS 만 지원하는데, Container 자체에는 Kernel 등의 OS가 들어가 있지 않다. Kernel은 Host OS를 그대로 사용하되, Host OS와 Container의 OS의 다른 부분만 Container 내에 같이 Packing 된다. 예를 들어 Host OS가 Ubuntu version X이고, Container의 OS가 CentOS version Y라고 햇을 때, Container 에는 CentOS version Y의 full image가 들어가 있는 것이 아니라, Ubuntu version X와 CentOS version Y의 차이가 되는 부분만 패키징이 된다. Container 내에서 명령어를 수행하면 실제로는 Host OS에서 그 명령어가 수행된다. 즉 Host OS의 Process 공간을 공유한다. 




    실제로 Container 에서 App을 수행하고 ps -ef를 이용하여 process를 보면, "lxc"라는 이름으로 해당 App이 수행됨을 확인할 수 있다. LXC는 Linux Container의 약자로 Container를 실행시켜주는 runtime 으로, 앞에서 설명한 것과 같이 VM과 비슷한 기능을 제공하지만, 실제 수행에 있어, guest os (container) 를 마치 VM처럼 isolate 해서 수행해주는 기능을 제공한다. 


    Docker는 LXC라는 Linux에 특화된 feature 를 사용하기 때문에 현재까지 Docker는 Ubuntu 12.04 이상에서만 사용이 가능하다.


    Performance에 대해서는 당연히 Host OS에서 직접 application을 돌리는 것보다 performance 감소가 있는데, 아래 표와 같이 performance 감소가 매우 적은 것을 볼 수 있다. 






    Repository 연계 


    Docker의 특징중의 하나는 repository 연계이다. Container Image를 중앙의 Repository에 저장했다가, 다른 환경에서 가져다가 사용할 수 있다. 마치 git과 같은 VCS (Version Control System)과 같은 개념인데, 이를 통해 Application 들을 Container 로 패키징해서 다른 환경으로 쉽게 옮길 수 있다. 






    Base Image vs Dockerfile 


    Docker의 Container Image를 packing하기 위해서, Docker는 Base Image와 Docker File 이라는 컨셉을 이용한다. 쉽게 설명하면, Base Image는 기본적인 인스톨 이미지를, Docker File은 기본적인 인스톨 이미지와 그 위에 추가로 설치되는 스크립트를 정의한다. 


    예를 들어 Base Image가 Ubuntu OS 이미지라면, Docker File은 ubuntu OS + Apache, MySQL을 인스톨하는 스크립트라고 보면 된다. 일반적으로 Docker Base Image는 기본 OS 인스톨 이미지라고 보면 된다. 


Designed by Tistory.