욱'S 노트

Docker - Build your own imag 본문

Programming/Docker

Docker - Build your own imag

devsun 2015. 10. 12. 19:04

Step 1: Write a Dockerfile


이번 스텝에서는 Mac의 텍스트에디터를 사용해 짧은 도커 파일을 작성해보겠다. Dockerfile은 이미지로 구워질 소프트웨어를 묘사한다. 단지 재료로서 만이 아니라 사용되기 위해 어떤 환경인지 또는 실행하기 위한 어떤 명령이든지 다 기술할 수 있다. 작성법은 매우 짧을 것이다.


만약 터미널이 오픈되어 있지 않다면 먼저 오픈을 하기 바란다.


1. 먼저 새로운 디렉토리를 만들자 


$ mkdir mydockerbuild


이 디렉토리는 빌드를 위한 context로서 제동될 것이다. context 의미는 이미지를 빌드하기 위해 필요한 모든 것들을 포함하고 있다는 것이다.


2. 새로운 디렉토리로 이동하자. 


$ cd mydockerbuild


지금은 디렉토리가 비어 있을 것이다. 


3. 디렉토리에 Dockerfile을 생성하자.


$ touch Dockerfile


이 커맨드는 실제로 아무일도 하지 않고 현재 디렉토리에 Dockerfile을 생성할 것이다.  다음 명령으로 제대로 생성되었는지 확인해보자.


$ ls Dockerfile

Dockerfile


4. 이제 Dockerfile을 열고 다음과 같은 내용을 작성해보자.


FROM docker/whalesay:latest


RUN apt-get -y update && apt-get install -y fortunes


CMD /usr/games/fortune -a | cowsay


FROM 키워드는 Docker가 어떤 이미지를 베이스로 이미지를 생성할지를 의미한다. 여기서는 기존에 존재하는 whalesay 이미지를 베이스로 생성한다. 


두번쨰 라인은 fortune 프로그램을 이미지에 추가하는 것이다. 이 라인은 apt-get를 이용하여 fortune 프로그램을 추가하는 것이다. 


이미지에 필요한 소프트웨어가 설치되었다면 이미지가 로드되었을때 소프트웨어를 실행하라고 지시해야 한다.


세번째 라인은 fortune 프로그램에게 cowsay 프로그램으로 nifty quotes를 전송하라고 하는 것이다.


이제 새로운 이미지를 빌드할 준비가 된것이다. 


Step 2: Build an image from your Dockerfile


현재 디렉토리에 도커파일이 있는지 확인하기 위해 cat 명령을 수행해보자.

$ cat Dockerfile

FROM docker/whalesay:latest



RUN apt-get -y update && apt-get install -y fortunes



CMD /usr/games/fortune -a | cowsay


이제 docker build -t docker-whale . 이라는 명령을 수행해보자.

$ docker build -t docker-whale .

Sending build context to Docker daemon 2.048 kB

Step 0 : FROM docker/whalesay:latest

 ---> fb434121fc77

Step 1 : RUN apt-get -y update && apt-get install -y fortunes

 ---> Running in dea12fa9ff26

... 중략 ...

Removing intermediate container 816e9f429d28

Successfully built e6181174002b


이 명령은 실행되고 결과를 출력하는데 수초가 소요된다. 새로운 이미지와 무언가를 하기전에 Dockerfile의 빌드 프로세스에 대해서 살펴보자.


Step 3: Learn about the build process


"docker build -t docker-whale ." 명령은 현재 디렉토리내의 Dockerfile을 획득한다. 그리고 docker-whale이라고 불리는 이미지를 당신의 로컬 머신에 생성한다. 이 명령은 몇분이 소요되고 그 추력은 실제로 길고 복잡하다. 이번 세션에서는 각 메시지가 의미하는 바에 대해 살펴보겠다.


먼저 도커가 빌드에 필요한 모든 것들에 대해서 체크한다.

Sending build context to Docker daemon 158.8 MB


그리고 도커는 whalesay 이미지를 로드한다. 이미 다운 받았다면 스킵하고 로컬에 없다면 다운로드를 받을 것이다.

Step 0 : FROM docker/whalesay:latest

 ---> fb434121fc77



도커는 다음 스텝으로 가서 apt-get 패키지 매니저를 통해 업데이트를 수행한다. 설치 라인은 엄청 길다. 여기서 다시 모두를 언급하진 않겠다.

Step 1 : RUN apt-get -y update && apt-get install -y fortunes

 ---> Running in 27d224dfa5b2

Ign http://archive.ubuntu.com trusty InRelease

Ign http://archive.ubuntu.com trusty-updates InRelease

Ign http://archive.ubuntu.com trusty-security InRelease

Hit http://archive.ubuntu.com trusty Release.gpg

....snip...

Get:15 http://archive.ubuntu.com trusty-security/restricted amd64 Packages [14.8 kB]

Get:16 http://archive.ubuntu.com trusty-security/universe amd64 Packages [134 kB]

Reading package lists...

---> eb06e47a01d2


그런 다음 도커는 새로운 fortunes 소프트웨어를 설치한다.

Removing intermediate container e2a84b5f390f

Step 2 : RUN apt-get install -y fortunes

 ---> Running in 23aa52c1897c

Reading package lists...

Building dependency tree...

Reading state information...

The following extra packages will be installed:

  fortune-mod fortunes-min librecode0

Suggested packages:

  x11-utils bsdmainutils

The following NEW packages will be installed:

  fortune-mod fortunes fortunes-min librecode0

0 upgraded, 4 newly installed, 0 to remove and 3 not upgraded.

Need to get 1961 kB of archives.

After this operation, 4817 kB of additional disk space will be used.

Get:1 http://archive.ubuntu.com/ubuntu/ trusty/main librecode0 amd64 3.6-21 [771 kB]

...snip......

Setting up fortunes (1:1.99.1-7) ...

Processing triggers for libc-bin (2.19-0ubuntu6.6) ...

 ---> c81071adeeb5

Removing intermediate container 23aa52c1897c


마침내 빌드를 완료하고 리포트를 출력한다.

Step 3 : CMD /usr/games/fortune -a | cowsay

 ---> Running in a8e6faa88df3

 ---> 7d9495d03763

Removing intermediate container a8e6faa88df3

Successfully built 7d9495d03763



Step 4: Run your new docker-whale


이번 스텝에서는 로컬 머신에 새로운 이미지가 생겼는지 그리고 새로운 이미지를 어떻게 실행하는지에 대해 살펴보겠다.

docker images 커맨드로 로컬에 설치된 이미지 리스트를 확인하자.


$ docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

docker-whale        latest              e6181174002b        9 minutes ago       274.3 MB

hello-world         latest              af340544ed62        5 months ago        960 B

devsun98/whalesay   latest              fb434121fc77        8 months ago        247 MB

docker/whalesay     latest              fb434121fc77        8 months ago        247 MB


마지막으로 새로운 이미지를 실행해보자.

$ docker run docker-whale

 ______________________________________

/ Wasting time is an important part of \

\ living.                              /

 --------------------------------------

    \

     \

      \

                    ##        .

              ## ## ##       ==

           ## ## ## ##      ===

       /""""""""""""""""___/ ===

  ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~

       \______ o          __/

        \    \        __/

          \____\______/



Comments