Dockerでイメージを作ってみる

Docker-docs-jaのイメージの構築を読みつつ、イメージの作成について勉強します。

イメージとは

コンテナの起動(docker run)では、どのイメージを使うか指定します。

[~] $ docker run ubuntu:14.04 /bin/echo 'Hello world'

ホスト上にイメージがなければ、Docker Hubからダウンロードします。

イメージの一覧

ローカルホスト上のイメージ一覧は、”docker images”で確認できます。

[~] $ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              14.04               971bb384a50a        3 weeks ago         188MB

“docker run”で指定してきたubuntu:14.04がローカルホストにダウンロードされていました。

イメージのバージョンとタグ

“ubuntu:14.04″=”REPOSITORY:TAG”です。

TAGを省略するとlatestとなります。

イメージの取得

“docker run”で、ローカルホストにないイメージを指定するとダウンロードされますが、”docker pull”でイメージのだダウンロードだけでもできます。

下記では、もともとあった”ubuntu:14.04″とは別に”ubuntu:16.04″をダウンロードしています。

[~] $ docker pull ubuntu:16.04
16.04: Pulling from library/ubuntu
8ee29e426c26: Pull complete
6e83b260b73b: Pull complete
e26b65fd1143: Pull complete
40dca07f8222: Pull complete
b420ae9e10b3: Pull complete
Digest: sha256:3097ac92b852f878f802c22a38f97b097b4084dbef82893ba453ba0297d76a6a
Status: Downloaded newer image for ubuntu:16.04

[~] $ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               7aa3602ab41e        2 weeks ago         115MB
ubuntu              14.04               971bb384a50a        3 weeks ago         188MB

イメージの検索

“docker search”でイメージを検索できます。

Docker Hubからも検索できます。

下記では、jupyterに関連しそうなイメージを検索しています。

[~] $ docker search jupyter
NAME                                   DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
jupyter/datascience-notebook           Jupyter Notebook Data Science Stack from htt…   333
jupyter/all-spark-notebook             Jupyter Notebook Python, Scala, R, Spark, Me…   188
jupyterhub/jupyterhub                  JupyterHub: multi-user Jupyter notebook serv…   152                                     [OK]
jupyter/scipy-notebook                 Jupyter Notebook Scientific Python Stack fro…   116
jupyter/tensorflow-notebook            Jupyter Notebook Scientific Python Stack w/ …   75
jupyter/pyspark-notebook               Jupyter Notebook Python, Spark, Mesos Stack …   72
jupyter/minimal-notebook               Minimal Jupyter Notebook Stack from https://…   52
ermaker/keras-jupyter                  Jupyter with Keras (with Theano backend and …   52                                      [OK]
xblaster/tensorflow-jupyter            Dockerized Jupyter with tensorflow              50                                      [OK]
jupyter/base-notebook                  Small base image for Jupyter Notebook stacks…   44
jupyter/r-notebook                     Jupyter Notebook R Stack from https://github…   21
jupyterhub/singleuser                  single-user docker images for use with Jupyt…   19                                      [OK]
jupyter/demo                           Demo of the IPython/Jupyter Notebook            14
eboraas/jupyter                        Jupyter Notebook (aka IPython Notebook) with…   12                                      [OK]
jupyter/nbviewer                       Jupyter Notebook Viewer                         11                                      [OK]
mikebirdgeneau/jupyterlab              Jupyterlab based on python / alpine linux wi…   7                                       [OK]
chusiang/ansible-jupyter               Run Ansible 2.6 on Jupyter Notebook 4.4 (ipy…   6                                       [OK]
gurvin/spark-jupyter-notebook          Jupyter Notebook to be used with Spark in Ku…   5                                       [OK]
civisanalytics/civis-jupyter-python3   Custom Jupyter Notebook image for Python 3      2                                       [OK]
takaomag/jupyter.notebook              docker image of archlinux (jupyter.notebook)…   2                                       [OK]
jupyterhub/jupyterhub-onbuild          onbuild version of JupyterHub images            1
dit4c/dit4c-container-jupyterlab       DIT4C container for Jupyter Lab                 1                                       [OK]
spellrun/pytorch-jupyter                                                               1
spellrun/caffe-cpu-jupyter                                                             1
civisanalytics/civis-jupyter-r         Custom Jupyter Notebook image for R.            0                                       [OK]

イメージを作る

イメージの作り方は2つあります。

  • コンテナをコミットして作る
  • DockerFileを使ってビルドする

コンテナをコミットする

ローカルホストにあるコンテナの今の状態をもとにcommitしてイメージを作れます。

下記ではコンテナ一覧で調べたIDを指定して、”crz33/ubuntu:14.04″というイメージを作っています。

[~] $ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                           PORTS               NAMES
d4e470945b4e        ubuntu:14.04        "/bin/sh -c 'while t…"   2 hours ago         Exited (137) About an hour ago                       vigorous_bose

[~] $ docker commit -m "my ubuntu 14.04" -a "crz33" d4e470945b4e crz33/ubuntu:14.04
sha256:9909201449722512270f243d251dd869f5c4f26cc43c20bb84d9516a019a5111

一覧を見ると、上記で作ったイメージができてます。

[~] $ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
crz33/ubuntu        14.04               990920144972        About a minute ago   188MB
ubuntu              16.04               7aa3602ab41e        2 weeks ago          115MB
ubuntu              14.04               971bb384a50a        3 weeks ago          188MB

このイメージをもとに”docker run”でコンテナを生成・起動できます。

Dockerfileをビルドする

Dockerfileを用意してビルドします。

下記は、ubuntu14.04にzshをインストールして、デフォルトzshとなるイメージのDockerfileです。

FROM ubuntu:14.04
MAINTAINER crz33 <crz33.com>
RUN apt-get update && apt-get install -y \
    zsh
CMD /bin/zsh

このファイルをおいたディレクトリへ移動して、下記でビルドできます。

[~/tmp/testimage] $ docker build -t crz33/ubuntu-zsh:14.04 .
...
Successfully built ac3c769efff7
Successfully tagged crz33/ubuntu-zsh:14.04

出来上がったイメージをもとにコンテナを生成・起動できます。

[~/tmp/testimage] $ docker run -it crz33/ubuntu-zsh:14.04
47881b6e98d2# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.6  0.0   4452   764 pts/0    Ss   07:20   0:00 /bin/sh -c /bin/zsh
root         8  3.6  0.2  34812  4772 pts/0    S    07:20   0:00 /bin/zsh
root        30  0.0  0.1  15576  2224 pts/0    R+   07:20   0:00 ps -aux

Dockerfileの書き方はDockerfile リファレンスを参照してください。

Dockerまとめ記事へのリンク

Dockerの他のネタを纏めています。参考になれば嬉しいです。

↓↓↓Dockerまとめページはこちら↓↓↓
【保存版】Dockerまとめ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする