나만의 Image 만들기


docker run 시 Docker 는 Docker 호스트에서 이미지를 다운받아 저장한다.

Docker 호스트에 이미지가 없을 때는 기본적으로 Docker Hub 저장소에서 다운받는다.

이 다운로드 받은 이미지의 설정을 변경하고 어플리케이션을 추가하고 새 이미지로 생성하여 Docker Hub 저장소에 올릴 수 있다.

docker search 명령을 사용하거나 Docker Hub 사이트에서 다른 사람들이 올린 이미지를 검색할 수 있다.


# docker search ubuntu
 
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu                            Ubuntu is a Debian-based Linux operating s...   3108      [OK]
ubuntu-upstart                    Upstart is an event-based replacement for ...   61        [OK]
torusware/speedus-ubuntu          Always updated official Ubuntu docker imag...   25                   [OK]
ubuntu-debootstrap                debootstrap --variant=minbase --components...   24        [OK]
tleyden5iwx/ubuntu-cuda           Ubuntu 14.04 with CUDA drivers pre-installed    19                   [OK]
rastasheep/ubuntu-sshd            Dockerized SSH service, built on top of of...   19                   [OK]
cs


검색 결과를 보면 우측에 두가지 저장소 형태가 있다.

OFFICIAL 저장소는 Docker사 에서 제공되는 것이고, 이름에 접두어가 붙지 않는다.

AUTOMATED 저장소는 이미지의 소스와 컨텐츠를 사용자가 검증하도록 하는 것이다.

NAME 의 슬래시(/) 앞의 접두어는 해당 이미지를 만든 username 이다.


새 기본 이미지를 하나 다운받는다. (태그 없이 latest 버전을 사용하는 것보다 특정 태그를 명시하여 이미지를 사용하는 것이 명확하고 좋다.)


# docker pull ubuntu:14.04
cs


이미지를 다운받아 내용을 변경하고 이미지를 생성하는데는 docker commit 과 docker build 을 사용하는 두가지 방법이 있다.


- docker commit 으로 변경된 새로운 이미지 생성하기

- docker build (Dockerfile) 로 이미지 생성하기



1. docker commit 으로 이미지 생성하기


이미지를 변경하기 위해 해당 이미지로부터 컨테이너를 생성한다.


# docker run -t -i ubuntu:14.04 /bin/bash
root@8df050ac77ba:/# apt-get update
root@8df050ac77ba:/# apt-get upgrade
root@8df050ac77ba:/# exit
cs


패키지를 업데이트 및 업그레이드를 했으므로 컨테이너는 변경되었다.

이제 변경된 컨테이너를 이미지로 커밋한다.

docker commit 은 컨테이너를 새 이미지로 생성한다.


# docker commit -m "Added apt update" -a "ggamzzak" 8df050ac77ba ggamzzak/ubuntu:v1
15d7b97c7364cdde78fb39368b468098065ede849e8c6ee665ae3e1810cdb6c1
cs


-m 옵션은 커밋 메시지, -a 옵션은 커밋한 사람(author)을 지정한다.

이미지로 생성할 컨테이너 id 8df050ac77ba, 마지막에는 새로 생성될 이미지와 태그를 지정한다.


생성된 이미지를 확인한다.


# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ggamzzak/ubuntu     v1                  15d7b97c7364        19 seconds ago      216.5 MB
ubuntu              14.04               6cc0fc2a5ee3        13 days ago         187.9 MB
cs



2. docker build (Dockerfile) 로 이미지 생성하기


docker commit 은 이미지를 확장하는 아주 간단한 방법이지만 이미지 개발 과정을 쉽게 공유할 수 없다.

docker build 는 Dockerfile 을 기반으로 이미지를 생성하므로 Dockerfile 로 개발 과정을 공유할 수 있다.


# vi Dockerfile
FROM ubuntu:14.04
MAINTAINER Gabriel Lee <test@test.com>
RUN apt-get update && apt-get upgrade
cs


# docker build -t ggamzzak/ubuntuf:v1 .
Step 1 : FROM ubuntu:14.04
 ---> 6cc0fc2a5ee3
Step 2 : MAINTAINER Gabriel Lee <test@test.com>
 ---> Running in 5148283c2f29
 ---> c167d91fdfa4
Removing intermediate container 5148283c2f29
Step 3 : RUN apt-get update && apt-get upgrade
 ---> Running in e415cec47fe0
Ign http://archive.ubuntu.com trusty InRelease
Get:1 http://archive.ubuntu.com trusty-updates InRelease [64.4 kB]
...
Successfully built 94010692cd90
cs


docker build 명령의 마지막 . 은 Dockerfile 경로이다.


Dockerfile 을 빌드하면 위에서 처럼 Dockerfile 의 각 명령 별로 새로운 컨테이너가 생성/제거되는 것을 볼 수 있다.

각 명령을 독립적으로 처리하는 것을 볼 수 있고, 각 명령별로 생성되는 컨테이너를 레이어라고도 한다.




WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,