Docker | Images #docker

# Docker | Images #docker
## <i class="fa  fa-cubes" style="font-size:1em;"></i> 概要
Docker の Images について。
## <i class="fa fa-question-circle" style="font-size:1em;"></i> Image とは？
Docker のコンテナの基盤。
Image は Docker Host にダウンロードして利用する。
Host に Image がない場合は、 レジストリからダウンロードされます。
デフォルトのレジストリは Docker Hub の public レジストリです。
## <i class="fa  fa-cube" style="font-size:1em;"></i> Local Host にある Image の確認
`docker images` コマンドで確認できます

~~~bash
$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
tomcat              8.0                 5814f70bc700        2 weeks ago         352.6 MB
ubuntu              14.04               5506de2b643b        4 weeks ago         199.3 MB
hello-world         latest              ef872312fe1b        7 weeks ago         910 B
training/webapp     latest              31fa814ba25a        6 months ago        278.8 MB
~~~

## <i class="fa  fa-cube" style="font-size:1em;"></i> Image の指定

前述の `docker images` で確認した REPOSITORY:TAG でイメージを指定できます。
※タグを省略すると latest を指定したことになります。

~~~bash
$ sudo docker run ubuntu:14.04 /bin/echo hoge
hoge
$ sudo docker run tomcat:8.0 /bin/echo hoge
hoge
$ sudo docker run training/webapp /bin/echo hoge
hoge
~~~

## <i class="fa fa-cloud-download" style="font-size:1em;"></i> Image のダウンロード
Image のダウンロードは、実行時に行われますが
事前に行うことも可能です。
事前に行う場合は `docker pull` を利用します

~~~bash
$ sudo docker images | grep hello-world
$ sudo docker pull hello-world
$ sudo docker images | grep hello-world
hello-world         latest              ef872312fe1b        7 weeks ago         910 B
~~~

## <i class="fa fa-search" style="font-size:1em;"></i> DockerHub で Image を検索
DockerHub では、多くの人が作成した様々な用途の Image を検索・利用できます。
<i class="fa fa-external-link" style="font-size:1.5em;"></i> [Docker Hub](https://registry.hub.docker.com/)

また、 `docker search` コマンドでも検索可能です。


~~~bash
$ sudo docker search middleman
NAME                         DESCRIPTION   STARS     OFFICIAL   AUTOMATED
hivetech/middleman                         0                    [OK]
supaspoida/middleman-nginx                 0
boymaas/middleman-nginx                    0
octohost/middleman-nginx                   0
durdn/middleman-3.2.1                      0
~~~

## <i class="fa  fa-refresh" style="font-size:1em;"></i> Image の更新
`docker commit` によって、既存のイメージを更新し、新たなバージョンの Image を作成することができます。

* インタラクティブモードでコンテナを起動して、 tree を追加インストールしてみます

~~~bash
$ sudo docker run -t -i training/sinatra /bin/bash
root@408666a36ef7:/# which tree
root@408666a36ef7:/# tree -L 1
bash: tree: command not found
root@408666a36ef7:/# apt-get install tree
root@408666a36ef7:/# tree -L 1
.
|-- bin
|-- boot
|-- dev
|-- etc
|-- home
|-- lib
|-- lib64
|-- media
|-- mnt
|-- opt
|-- proc
|-- root
|-- run
|-- sbin
|-- srv
|-- sys
|-- tmp
|-- usr
`-- var
root@408666a36ef7:/# exit
$
~~~

* tree install 済みのイメージを新バージョンとして登録する

~~~bash
$ sudo docker ps -a
CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS                          PORTS               NAMES
18be000ffcb7        training/sinatra:latest   "/bin/bash"         3 minutes ago       Exited (0) About a minute ago                       silly_hoover
$ sudo docker commit -m="Added tree" -a="tbpgr" 18be000ffcb7 ouruser/sinatra:v2
$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ouruser/sinatra     v2                  1a444f8947b7        21 seconds ago      448.3 MB
training/sinatra    latest              f0f4ab557f95        5 months ago        447 MB
~~~

* 新バージョンのイメージを起動してみる

~~~
$ sudo docker run -t -i ouruser/sinatra:v2 /usr/bin/tree -L 1
$ sudo docker run -t -i ouruser/sinatra:v2 /usr/bin/tree
-L 1
.
|-- bin
|-- boot
|-- dev
|-- etc
|-- home
|-- lib
|-- lib64
|-- media
|-- mnt
|-- opt
|-- proc
|-- root
|-- run
|-- sbin
|-- srv
|-- sys
|-- tmp
|-- usr
`-- var
~~~

## <i class="fa fa-wrench" style="font-size:1em;"></i> Dockerfile による Image の作成

* Image 作成作業用ディレクトリと Dockerfile のひな形を生成

~~~bash
$ mkdir qiita_scouter
$ cd qiita_scouter
$ touch Dockerfile
~~~

* Dockerfile の編集  
Ubuntu 1404 環境に Ruby をインストールし、 qiita_scouter gem をインストールします。  
<i class="fa fa-github-square" style="color: black;font-size:1.5em"></i> [qiita_scouter gem](https://github.com/tbpgr/qiita_scouter)

~~~
FROM ubuntu:14.04
MAINTAINER tbpgr <tbpgr@tbpgr.jp>
RUN apt-get update && apt-get install -y ruby ruby-dev
RUN gem install qiita_scouter
~~~

* Dockerfile を利用した build

~~~bash
$ sudo docker build -t="tbpgr/qiita_scouter" .
$ sudo docker images | grep tbpgr
tbpgr/qiita_scouter   latest              fcec37091608        59 seconds ago      315.5 MB
~~~

* 作成したイメージを使ってみる

~~~bash
$ sudo docker run -i -t tbpgr/qiita_scouter
root@19b2b4dfec37:/# qiita_scouter h
Commands:
  qiita_scouter analyze         # Analyze qiita power_levels
  qiita_scouter help [COMMAND]  # Describe available commands or one specific command
  qiita_scouter version         # version

Options:
  -h, [--help]     # help message.
      [--version]  # version

root@19b2b4dfec37:/# qiita_scouter analyze tbpgr
ユーザー名: tbpgr 戦闘力: 316642 攻撃力: 41540 知力: 264650 すばやさ: 10452
~~~

## <i class="fa fa-tag" style="font-size:1em;"></i> Image にタグを設定

~~~bash
$ sudo docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
tbpgr/qiita_scouter   latest              fcec37091608        19 minutes ago      315.5 MB
$ sudo docker tag fcec37091608 tbpgr/qiita_scouter:v1
$ sudo docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
tbpgr/qiita_scouter   latest              fcec37091608        19 minutes ago      315.5 MB
tbpgr/qiita_scouter   v1                  fcec37091608        19 minutes ago      315.5 MB
~~~

## <i class="fa fa-cloud-upload" style="font-size:1em;"></i> Image を DockerHub に公開（ Private 設定も可 ）

~~~bash
$ sudo docker push tbpgr/qiita_scouter
~~~

## <i class="fa fa-trash" style="font-size:1em;"></i> Image を削除

~~~bash
$ sudo docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
tbpgr/qiita_scouter   latest              fcec37091608        19 minutes ago      315.5 MB
tbpgr/qiita_scouter   v1                  fcec37091608        19 minutes ago      315.5 MB
r$ sudo docker rmi tbpgr/qiita_scouter:v1
Untagged: tbpgr/qiita_scouter:v1
$ sudo docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
tbpgr/qiita_scouter   latest              fcec37091608        19 minutes ago      315.5 MB
~~~

## <i class="fa fa-link" style="font-size:1em;"></i> 参照
[【N番煎じ】Ruby で Qiita 戦闘力を計測するQiitaScouter を作ってみた](http://qiita.com/tbpgr/items/d6b805c44ee1acf5898f)
<i class="fa fa-external-link" style="font-size:1.5em;"></i> [Docker Official | Working with Docker Images](https://docs.docker.com/userguide/dockerimages/)