'Run'에 해당되는 글 2건

  1. 2015.05.26 Docker : Part 3
  2. 2015.04.14 Docker : Part 1
분류없음2015.05.26 17:08

Docker, Dockerfile, run, commit, built, attach,  image , container : today Keay

 

개발자와 Sysadmin을 위해서 빌드(Build)하고, 이동(Ship)하고, 분산된 어플리케이션을 실행(Run)하기 위한 OpenPlatform인

Docker의 3번째 포스팅입니다.  이번 포스팅에서는 Docker File을 사용하여 Docker 이미지를 만들어 봅니다.

Docker Image로 Container를 생성하고, 생성된 Container의 내용을 변경하고 변경된 Container를 이용하여

다시 새로운 Docker 이미지를 생성해봅니다. 그리고 그렇게 만들어진 이미지가 새로운 Container에 적용되는지를 알아봅니다.

 


 

Docker File로 이미지 생성하기

   - 기존 Docker 이미지와 Docker File을 사용하여 새로운 Docker Image를 생성

   - Docker File에는 필요한 내용들에 대해서 명세해 놓음. [Docker File에 대한 포스팅은 추후 포스팅 할 예정입니다]

   - Docker 이미지를 생성은 build 명령을 사용합니다.  이 때 tag 옵션을 사용하여 해당 이미지의 repository name을 지정하며,

     이 이름은 소문자, 숫자, '_', '.' 으로 이뤄지며, 대문자는 되지 않습니다.

   - # docker build --tag repository_name:tag

 

 

 

   - 생성한 이후의 dockar images 명령을 사용하여, 생성된 이미지를 다음과 확인할 수 있다.

 

 

   - Docker 이미지를 생성하는 데, 사용된 Docekrfile의 내용이다.

     추후에 다룰 예정이지만, 간단하게 몇 가지만 보면

     * FROM으로 생성한 이미지의 base 이미지를 지정합니다

        이 이미지는 Local에 존재하면 그 이미지를 사용하며 없으면 Docker Hub에서 가져옵니다.

     * MAINTAINER는 해당 이미지를 만든 사람을 기록한다.

     * RUN 으로 생성된 이미지에 적용된 명령을 넣는다.

     * VOLUME, WORKDIR, CMD, EXPOSE 등 나머지 옵션은 다음 포스팅에서 다룰 예정입니다.

   - Dockerfile에 기록된 항목은 Dockerfile에 기입하기도 하지만, Container 생성 시에 옵션으로 적용하기도 합니다.

     이 경우에는 Dockerfile보다는 옵션 값이 더 우선 시 됩니다.

 

 

 


 

 

 

Docker File로 생성한 이미지를 Container 만들고, 확인하기

 

    - Docker Image로 이제는 Container를 만들고 실행해 봅니다.

    - 방금 전에 위에서 생성한 nginx를 설치한 Docker image를 사용하여 Container를 만듭니다.

    - Container는 docker run 명령을 사용하며 각종 옵션을 사용할 수 있습니다.

      아래에서 사용된 옵션 중 -p는 Port Redirection을 하는 역할을 합니다. Host_Port:Contaner_Port 로,

      아래 예제는 Host의 8001 포트로 접근하는 것을 Container 80으로 전달합니다.

    - # docker run <option> <image_Repo | image ID> <runnning_process>

    - 현재 동작 중인 Container 확인은 docker ps  명령을 사용하여 볼 수 있습니다

 

 

    - 위와 같이 Container를 만들어서 구동 시키게 되면, Host의 8001로 접근하여 해당 Container의 80서비스를 열 수 있습니다.

      아래는 8001로 접근하여 nginx! 초기 페이지가 열린 것을 확인 할 수 있습니다.

 

    - 이번에는 다른 옵션을 사용하여 Container를 만들어서 실행해봅니다.

    - 마지막 Container에서 실행 할 값을 /bin/bash 로 입력했습니다.

    - 위의 에제에서는 Dockerfile에서 nginx를 구동하도록 되어 있지만 /bin/bash로 변경하였기 때문에 해당 명령을 쉘을 제어하게 됩니다.

    - Container 생성 후, 상태를 보면 아래와 같이 COMMAND 부분이 /bin/bash로 된 것을 볼 수 있습니다.

 

 

 

 

    - Host에서 Container로 docker attach 명령을 사용하여 접근하여, nginx 구동 후 동일하게 서비스가 되는 것을 볼 수 있습니다.

    - # docker attach [Container_name | Container_ID ]

 

 

 

 

 


 

 

Docker Container의 데이터 수정 후, 변경된 Container을 Docker 이미지로 Commit

    - 이번에는 Container 내부의 데이터를 수정하여, 변경된 사항에 대한 Container를 가지고 이미지를 생성해봅니다.

    - Docker 이미지로 Container를 만드는 것과 반대로, Container로 Docker 이미지를 만드는 작업입니다.

    - 테스트를 위해서 nginx의 index.html을 아래와 같이 변경해보았습니다.

    - 8001로 접속 시에, 초기 메시지가 변경된 것을 볼 수 있습니다.

 

  

 

   - 새로운 이미지를 만들기 전에, 현재 이미지를 확인해봅니다.

   - docker commit 명령을 사용하여 새로운 이미지를 만듭니다.

   - docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]   

      * -a , --author=""   : Image 제작한 사람

          -m, --message="" : commit 메시지

   - zigi/nginxubuntu:0.2 이미지가 생성된 것을 볼 수 있습니다. 이 이미지는 zigi1 Container를 통해서 만들어졌습니다.

 

 

   - 새로 만들어진 이미지로, 새로운 Container(zigi2)를 생성합니다. 

   - 새로운 Container는 8002포트에서 대해서 80포트로 Redirection 되도록 하였습니다. 

 

 

   - 새로운 Container의 nginx 서비스가 구동하고 나면, index.html이 변경된 nginx가 구동된 것을 확인할 수 있습니다.

 

  

Posted by 네떡지기
분류없음2015.04.14 21:21

 

 

Docker 란?

 

 - 개발자와 Sysadmin을 위해서 빌드(Build)하고, 이동(Ship)하고, 분산된 어플리케이션을 실행(Run)하기 위한 OpenPlatform이다.

 - Docker는 Application이 개발, QA, Production 등의 각기 다른 환경의 차이에 따라 발생할 수 있는 문제점을 제거한다.

 - 결과적으로 Laptop, Datacenter의 VM,  혹은 어떠한 Cloud 환경이든 상관없이 빠르게 동일한 어플리케이션을 실행할 수 있게한다.

 

 

 

 

 

 

Docker Concept

 - 기존의 VM이 Hardware와 OS의 모든 부분까지 가상화하는 것에 비해서, Docker는 기존의 Host OS의 기본 Kernel 등을 그대로 

   공유해서 사용하여, 기존의 VM에서의 Guest OS 전부 가상화 하지 않아도 된게 해준다. 

 - Docker에서의 Guest OS는 Host OS를 기본 Kernel을 사용하며, 그 위에 필요한 부분만 Packing을 하게 되기 떄문에 기존의 VM방식

   보다 성능에 대한 이슈가 줄어들게 된다. 

 - 이러한 Docker의 Guest OS는 Linux Container(LXC)를 사용하는 방식으로 사용된다. 

 - LXC를 사용하므로써, Guest OS를 Host OS로 부터 Isolation하게 동작하게 한다. 

 - 기본적 Linux에서만 동작하지만, Windows와 Mac에서도 VM을 포함하여 Docker를 사용할 수 있다.  

 - 즉, 어플리케이션을 구동하기 위한 최소한의 Dependency한 요소만을 Docker Container에 포함하여, 어느 곳에나 실행할 수 있는 

  형태의 Docker Image로 Shipping(Boxing)하는 것이다. 이러한 작업은 기존의 프로그래밍 언어에서 객체의 직렬화를 Serialized라고

  한 것처럼, Dockerized라고 부른다. 이렇게 Dockerized된 이미지는 어느 환경에서나 동일하게 실행될 수 있다.  .

 

 

○ VM에서는 애플리케이션을 구동하기 위한 Binary/Library 뿐만 아니라, Guest OS의 모든 부분까지 가상화 한다.

○ Docker에서는 애플리케이션을 구동하기 위한 최소한의 Binary/LIbrary만 포함하며, Host OS에서 User공간에 격리된 Process로

   동작하여, 기존 VM과 같은 효과를 가지면서 Mobility를 최대화 한다.

   (Host OS와 Docker Image의 Linux가 서로 상이해도 기본적인 Kernel은 동일하게 사용하기 때문에 사용 가능하다) 

 

 

 

Docker의 용어 정리

  • Docker : Linux Container(LXC)를 관리하는 도구

  • Docker Container : Docker가 관리하는 LXC Process.

  • Docker Host : 하나 이상의 Docker Container를 실행하는 Linux 서버

   Docker Daemon : Docker의 실제 Process Daemon으로, Docker Client로부터 요청을 받아서, Docker Container를 관리

  • Docker Client : Docker 명령을 실행하는 장비로, Docker Host가 그 역할을 할 수도 있고, 별개의 장비일 수도 있다.

                        또한, Linux가 아닐수도 있다.

  • Docker Image : Docker Container의 초기 상태를 기록한 파일. 즉, 원하고자 환경을 만들어 놓은 이미지 파일.

                         즉 VM과 유사한 파일이라고 볼 수 있다.

  • Docker Hub : Git Hub와 유사하게 다양한 Docker Image를 보관하는 이미지 저장소

 

 

Posted by 네떡지기

티스토리 툴바