イメージの構築¶
Docker イメージはコンテナの土台(基盤)です。docker run
を実行する度に、どのイメージを使うか指定します。ガイドの前セクションでは、既存の ubuntu
イメージと training/webapp
イメージを使いました。
Docker はダウンロードしたイメージを Docker ホスト上に保管しており、それらを見ることができます。もしホスト上にイメージがなければ、Docker はレジストリからイメージをダウンロードします。標準のレジストリは Docker Hub レジストリ です。
このセクションでは Docker イメージについて、次の内容を含めて深掘りします。
- ローカルの Docker ホスト上にあるイメージの管理と操作
- 基本イメージの作成
- イメージを Docker Hub レジストリ にアップロード
ホスト上のイメージ一覧を表示¶
ローカルのホスト上にあるイメージの一覧を表示しましょう。表示するには docker images
コマンドを使います。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 14.04 1d073211c498 3 days ago 187.9 MB
busybox latest 2c5ac3f849df 5 days ago 1.113 MB
training/webapp latest 54bb4e8718e8 5 months ago 348.7 MB
これまでのガイドで使用したイメージを表示します。それぞれ、コンテナでイメージを起動する時に Docker Hub からダウンロードしたものです。イメージの一覧表示には、3つの重要な情報が表示されます。
- どのリポジトリから取得したのか(例:
ubuntu
) - 各イメージのタグ(例:
14.04
) - イメージごとのイメージ ID
ちなみに
サード・パーティ製の dockviz tool や image layers サイト でイメージ・データを可視化できます。
リポジトリによっては複数の派生イメージを持つ場合があります。先ほどの ubuntu
イメージの場合は、Ubuntu 10.04、12.04、12.10、13.03、13.10 という、複数の異なる派生イメージがあります。それぞれの違いをタグ (tag) によって識別します。そして、次のようにイメージに対するタグとして参照できます。
ubuntu:14.04
そのため、コンテナを実行する時は、次のようにタグ付けされたイメージを参照できます。
$ docker run -t -i ubuntu:14.04 /bin/bash
あるいは Ubuntu 12.04 イメージを使いたい場合は、次のようにします。
$ docker run -t -i ubuntu:12.04 /bin/bash
タグを指定しない場合、ここでは ubuntu
しか指定しなければ、Docker は標準で ubuntu:latest
イメージを使用します。
ちなみに
常に ubuntu:14.04
のようにイメージに対するタグを指定すべきです。タグの指定こそが、確実にイメージを使えるようにする手法だからです。トラブルシュートやデバッグに便利です。
新しいイメージの取得¶
それでは、新しいイメージをどうやって取得できるのでしょうか。Docker は Docker ホスト上に存在しないイメージを使う時、自動的にイメージをダウンロードします。しかしながら、コンテナを起動するまで少々時間がかかる場合があります。イメージをあらかじめダウンロードしたい場合は、docker pull
コマンドを使えます。以下は centos
イメージをダウンロードする例です。
$ docker pull centos
Pulling repository centos
b7de3133ff98: Pulling dependent layers
5cc9e91966f7: Pulling fs layer
511136ea3c5a: Download complete
ef52fb1fe610: Download complete
. . .
Status: Downloaded newer image for centos
イメージの各レイヤを取得しているのが見えます。コンテナを起動する時、このイメージを使えばイメージのダウンロードのために待つ必要はありません。
$ docker run -t -i centos /bin/bash
bash-4.1#
イメージの検索¶
Docker の特長の1つに、様々な目的の Docker イメージが多くの方によって作られています。大部分が Docker Hub にアップロードされています。これらイメージは Docker Hub のウェブサイト から検索できます。
イメージを検索するには、コマンドライン上で docker search
コマンドを使う方法もあります。チームでウェブ・アプリケーションの開発のために Ruby と Sinatra をインストールしたイメージが必要と仮定します。docker search
コマンドを使うことで、文字列 sinatra
を含む全てのイメージを表示して、そこから適切なイメージを探せます。
$ docker search sinatra
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
training/sinatra Sinatra training image 0 [OK]
marceldegraaf/sinatra Sinatra test app 0
mattwarren/docker-sinatra-demo 0 [OK]
luisbebop/docker-sinatra-hello-world 0 [OK]
bmorearty/handson-sinatra handson-ruby + Sinatra for Hands on with D... 0
subwiz/sinatra 0
bmorearty/sinatra 0
. . .
コマンドを実行したら、sinatra
を含む多くのイメージを表示します。表示するのは、イメージ名の一覧、スター(イメージがソーシャル上で有名かどうか測るものです。利用者はイメージを気に入れば”スター”を付けられます )、公式(OFFICIAL)か、自動構築(AUTOMATED)といった状態です。公式リポジトリ とは、Docker 社のサポートよって丁寧に精査されている Docker リポジトリです。自動構築(Automated Build) とは有効なソースコードを元に、イメージ内容が自動構築されたリポジトリです。
さて、利用可能なイメージの内容を確認します。ここでは training/sinatra
イメージを使うことにします。これまで2種類のイメージ・リポジトリがありました。ubuntu
のようなイメージはベース・イメージまたはルート・イメージと呼ばれます。このベース・イメージは Docker 社によって提供、構築、認証、サポートされています。これらは単一の単語名として表示されています。
また、training/sinatra
イメージのようなユーザ・イメージもあります。ユーザ・イメージとは Docker コミュニティのメンバーに属するもので、メンバーによって構築、メンテナンスされます。ユーザ・イメージは、常にユーザ名がイメージの前に付きます。この例のイメージは、training
というユーザによって作成されました。
イメージの取得¶
適切なイメージ training/sinatra
を確認したら、docker pull
コマンドを使ってダウンロードできます。
$ docker pull training/sinatra
これでチームはこのイメージを使い、自身でコンテナを実行できます。
$ docker run -t -i training/sinatra /bin/bash
root@a8cb6ce02d85:/#
イメージの作成¶
チームでは training/sinatra
イメージが有用だと分かりました。しかし、イメージを自分たちが使えるようにするには、いくつかの変更が必要です。イメージの更新や作成には2つの方法があります。
- イメージから作成したコンテナを更新し、イメージの結果をコミットする
Dockerfile
を使って、イメージ作成の命令を指定する
更新とイメージのコミット¶
イメージを更新するには、まず更新したいイメージからコンテナを作成する必要があります。
$ docker run -t -i training/sinatra /bin/bash
root@0b2616b0e5a8:/#
注釈
作成したコンテナ ID 、ここでは 0b2616b0e5a8
をメモしておきます。このあとすぐ使います。
実行しているコンテナ内に json
gem を追加しましょう。
root@0b2616b0e5a8:/# gem install json
この作業が終わったら、exit
コマンドを使ってコンテナを終了します。
以上で自分たちが必要な変更を加えたコンテナができました。次に docker commit
コマンドを使い、イメージに対してこのコンテナのコピーをコミット(収容)できます。
$ docker commit -m "Added json gem" -a "Kate Smith" \
0b2616b0e5a8 ouruser/sinatra:v2
4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1c
ここで使った docker commit
コマンドの内容を確認します。2つのフラグ -m
と -a
を指定しています。-m
フラグはコミット・メッセージを指定するもので、バージョン・コントロール・システムのようにコミットできます。-a
フラグは更新を行った担当者を指定できます。
また、新しいイメージを作成する元となるコンテナを指定します。ここでは 0b2616b0e5a8
(先ほど書き留めた ID)です。そして、ターゲットとなるイメージを次のように指定します。
ouruser/sinatra:v2
こちらの詳細を見ていきましょう。ouruser
は新しいユーザ名であり、このイメージを書いた人です。また、イメージに対して何らかの名前も指定します。ここではオリジナルのイメージ名 sinatra
をそのまま使います。最後に、イメージに対するタグ v2
を指定します。
あとは docker images
コマンドを使えば、作成した新しいイメージ ouruser/sinatra
が見えます。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
training/sinatra latest 5bc342fa0b91 10 hours ago 446.7 MB
ouruser/sinatra v2 3c59e02ddd1a 10 hours ago 446.7 MB
ouruser/sinatra latest 5db5f8471261 10 hours ago 446.7 MB
作成したイメージを使ってコンテナを作成するには、次のようにします。
$ docker run -t -i ouruser/sinatra:v2 /bin/bash
root@78e82f680994:/#
Dockerfile
からイメージを構築¶
docker commit
コマンドを使う方法は、イメージを簡単に拡張します。しかし、少々面倒なものであり、チーム内の開発プロセスでイメージを共有するのは簡単ではありません。この方法ではなく、新しいコマンド docker build
を使い構築する方法や、イメージをスクラッチ(ゼロ)から作成する方法があります。
この構築コマンドを使うには Dockerfile
を作成します。この中に Docker がどのようにしてイメージを構築するのか、命令セットを記述します。
作成するにはまず、ディレクトリと Dockerfile
を作成します。
$ mkdir sinatra
$ cd sinatra
$ touch Dockerfile
Windows で Docker Machine を使っている場合は、ホスト・ディレクトリには cd
で /c/Users/ユーザ名
を指定してアクセスできるでしょう。
各々の命令で新しいイメージ層を作成します。簡単な例として、架空の開発チーム向けの Sinatra イメージを構築しましょう。
# ここはコメントです
FROM ubuntu:14.04
MAINTAINER Kate Smith <ksmith@example.com>
RUN apt-get update && apt-get install -y ruby ruby-dev
RUN gem install sinatra
Dockerfile
が何をしているか調べます。それぞれの命令(instruction)は、ステートメント(statement)の前にあり、大文字で記述します。
命令 ステートメント
注釈
#
を使ってコメントを示せます
冒頭の FROM
命令は Docker に対して基となるイメージを伝えます。この例では、新しいイメージは Ubuntu 14.04 イメージを基にします。MAINTAINER
命令は誰がこの新しいイメージを管理するか指定します。
最後に RUN
命令を指定しています。RUN
命令はイメージの中で実行するコマンドを指示します。この例ではパッケージのインストールのため。まず APT キャッシュを更新します。それから、Ruby と RubyGem をインストールし、Sinatra gem をインストールします。
あとは Dockerfile
を用い、docker build
コマンドでイメージを構築します。
$ docker build -t ouruser/sinatra:v2 .
Sending build context to Docker daemon 2.048 kB
Sending build context to Docker daemon
Step 1 : FROM ubuntu:14.04
---> e54ca5efa2e9
Step 2 : MAINTAINER Kate Smith <ksmith@example.com>
---> Using cache
---> 851baf55332b
Step 3 : RUN apt-get update && apt-get install -y ruby ruby-dev
---> Running in 3a2558904e9b
Selecting previously unselected package libasan0:amd64.
(Reading database ... 11518 files and directories currently installed.)
Preparing to unpack .../libasan0_4.8.2-19ubuntu1_amd64.deb ...
Unpacking libasan0:amd64 (4.8.2-19ubuntu1) ...
Selecting previously unselected package libatomic1:amd64.
Preparing to unpack .../libatomic1_4.8.2-19ubuntu1_amd64.deb ...
Unpacking libatomic1:amd64 (4.8.2-19ubuntu1) ...
Selecting previously unselected package libgmp10:amd64.
Preparing to unpack .../libgmp10_2%3a5.1.3+dfsg-1ubuntu1_amd64.deb ...
Unpacking libgmp10:amd64 (2:5.1.3+dfsg-1ubuntu1) ...
Selecting previously unselected package libisl10:amd64.
Preparing to unpack .../libisl10_0.12.2-1_amd64.deb ...
Unpacking libisl10:amd64 (0.12.2-1) ...
Selecting previously unselected package libcloog-isl4:amd64.
Preparing to unpack .../libcloog-isl4_0.18.2-1_amd64.deb ...
Unpacking libcloog-isl4:amd64 (0.18.2-1) ...
Selecting previously unselected package libgomp1:amd64.
Preparing to unpack .../libgomp1_4.8.2-19ubuntu1_amd64.deb ...
Unpacking libgomp1:amd64 (4.8.2-19ubuntu1) ...
Selecting previously unselected package libitm1:amd64.
Preparing to unpack .../libitm1_4.8.2-19ubuntu1_amd64.deb ...
Unpacking libitm1:amd64 (4.8.2-19ubuntu1) ...
Selecting previously unselected package libmpfr4:amd64.
Preparing to unpack .../libmpfr4_3.1.2-1_amd64.deb ...
Unpacking libmpfr4:amd64 (3.1.2-1) ...
Selecting previously unselected package libquadmath0:amd64.
Preparing to unpack .../libquadmath0_4.8.2-19ubuntu1_amd64.deb ...
Unpacking libquadmath0:amd64 (4.8.2-19ubuntu1) ...
Selecting previously unselected package libtsan0:amd64.
Preparing to unpack .../libtsan0_4.8.2-19ubuntu1_amd64.deb ...
Unpacking libtsan0:amd64 (4.8.2-19ubuntu1) ...
Selecting previously unselected package libyaml-0-2:amd64.
Preparing to unpack .../libyaml-0-2_0.1.4-3ubuntu3_amd64.deb ...
Unpacking libyaml-0-2:amd64 (0.1.4-3ubuntu3) ...
Selecting previously unselected package libmpc3:amd64.
Preparing to unpack .../libmpc3_1.0.1-1ubuntu1_amd64.deb ...
Unpacking libmpc3:amd64 (1.0.1-1ubuntu1) ...
Selecting previously unselected package openssl.
Preparing to unpack .../openssl_1.0.1f-1ubuntu2.4_amd64.deb ...
Unpacking openssl (1.0.1f-1ubuntu2.4) ...
Selecting previously unselected package ca-certificates.
Preparing to unpack .../ca-certificates_20130906ubuntu2_all.deb ...
Unpacking ca-certificates (20130906ubuntu2) ...
Selecting previously unselected package manpages.
Preparing to unpack .../manpages_3.54-1ubuntu1_all.deb ...
Unpacking manpages (3.54-1ubuntu1) ...
Selecting previously unselected package binutils.
Preparing to unpack .../binutils_2.24-5ubuntu3_amd64.deb ...
Unpacking binutils (2.24-5ubuntu3) ...
Selecting previously unselected package cpp-4.8.
Preparing to unpack .../cpp-4.8_4.8.2-19ubuntu1_amd64.deb ...
Unpacking cpp-4.8 (4.8.2-19ubuntu1) ...
Selecting previously unselected package cpp.
Preparing to unpack .../cpp_4%3a4.8.2-1ubuntu6_amd64.deb ...
Unpacking cpp (4:4.8.2-1ubuntu6) ...
Selecting previously unselected package libgcc-4.8-dev:amd64.
Preparing to unpack .../libgcc-4.8-dev_4.8.2-19ubuntu1_amd64.deb ...
Unpacking libgcc-4.8-dev:amd64 (4.8.2-19ubuntu1) ...
Selecting previously unselected package gcc-4.8.
Preparing to unpack .../gcc-4.8_4.8.2-19ubuntu1_amd64.deb ...
Unpacking gcc-4.8 (4.8.2-19ubuntu1) ...
Selecting previously unselected package gcc.
Preparing to unpack .../gcc_4%3a4.8.2-1ubuntu6_amd64.deb ...
Unpacking gcc (4:4.8.2-1ubuntu6) ...
Selecting previously unselected package libc-dev-bin.
Preparing to unpack .../libc-dev-bin_2.19-0ubuntu6_amd64.deb ...
Unpacking libc-dev-bin (2.19-0ubuntu6) ...
Selecting previously unselected package linux-libc-dev:amd64.
Preparing to unpack .../linux-libc-dev_3.13.0-30.55_amd64.deb ...
Unpacking linux-libc-dev:amd64 (3.13.0-30.55) ...
Selecting previously unselected package libc6-dev:amd64.
Preparing to unpack .../libc6-dev_2.19-0ubuntu6_amd64.deb ...
Unpacking libc6-dev:amd64 (2.19-0ubuntu6) ...
Selecting previously unselected package ruby.
Preparing to unpack .../ruby_1%3a1.9.3.4_all.deb ...
Unpacking ruby (1:1.9.3.4) ...
Selecting previously unselected package ruby1.9.1.
Preparing to unpack .../ruby1.9.1_1.9.3.484-2ubuntu1_amd64.deb ...
Unpacking ruby1.9.1 (1.9.3.484-2ubuntu1) ...
Selecting previously unselected package libruby1.9.1.
Preparing to unpack .../libruby1.9.1_1.9.3.484-2ubuntu1_amd64.deb ...
Unpacking libruby1.9.1 (1.9.3.484-2ubuntu1) ...
Selecting previously unselected package manpages-dev.
Preparing to unpack .../manpages-dev_3.54-1ubuntu1_all.deb ...
Unpacking manpages-dev (3.54-1ubuntu1) ...
Selecting previously unselected package ruby1.9.1-dev.
Preparing to unpack .../ruby1.9.1-dev_1.9.3.484-2ubuntu1_amd64.deb ...
Unpacking ruby1.9.1-dev (1.9.3.484-2ubuntu1) ...
Selecting previously unselected package ruby-dev.
Preparing to unpack .../ruby-dev_1%3a1.9.3.4_all.deb ...
Unpacking ruby-dev (1:1.9.3.4) ...
Setting up libasan0:amd64 (4.8.2-19ubuntu1) ...
Setting up libatomic1:amd64 (4.8.2-19ubuntu1) ...
Setting up libgmp10:amd64 (2:5.1.3+dfsg-1ubuntu1) ...
Setting up libisl10:amd64 (0.12.2-1) ...
Setting up libcloog-isl4:amd64 (0.18.2-1) ...
Setting up libgomp1:amd64 (4.8.2-19ubuntu1) ...
Setting up libitm1:amd64 (4.8.2-19ubuntu1) ...
Setting up libmpfr4:amd64 (3.1.2-1) ...
Setting up libquadmath0:amd64 (4.8.2-19ubuntu1) ...
Setting up libtsan0:amd64 (4.8.2-19ubuntu1) ...
Setting up libyaml-0-2:amd64 (0.1.4-3ubuntu3) ...
Setting up libmpc3:amd64 (1.0.1-1ubuntu1) ...
Setting up openssl (1.0.1f-1ubuntu2.4) ...
Setting up ca-certificates (20130906ubuntu2) ...
debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (This frontend requires a controlling tty.)
debconf: falling back to frontend: Teletype
Setting up manpages (3.54-1ubuntu1) ...
Setting up binutils (2.24-5ubuntu3) ...
Setting up cpp-4.8 (4.8.2-19ubuntu1) ...
Setting up cpp (4:4.8.2-1ubuntu6) ...
Setting up libgcc-4.8-dev:amd64 (4.8.2-19ubuntu1) ...
Setting up gcc-4.8 (4.8.2-19ubuntu1) ...
Setting up gcc (4:4.8.2-1ubuntu6) ...
Setting up libc-dev-bin (2.19-0ubuntu6) ...
Setting up linux-libc-dev:amd64 (3.13.0-30.55) ...
Setting up libc6-dev:amd64 (2.19-0ubuntu6) ...
Setting up manpages-dev (3.54-1ubuntu1) ...
Setting up libruby1.9.1 (1.9.3.484-2ubuntu1) ...
Setting up ruby1.9.1-dev (1.9.3.484-2ubuntu1) ...
Setting up ruby-dev (1:1.9.3.4) ...
Setting up ruby (1:1.9.3.4) ...
Setting up ruby1.9.1 (1.9.3.484-2ubuntu1) ...
Processing triggers for libc-bin (2.19-0ubuntu6) ...
Processing triggers for ca-certificates (20130906ubuntu2) ...
Updating certificates in /etc/ssl/certs... 164 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d....done.
---> c55c31703134
Removing intermediate container 3a2558904e9b
Step 4 : RUN gem install sinatra
---> Running in 6b81cb6313e5
unable to convert "\xC3" to UTF-8 in conversion from ASCII-8BIT to UTF-8 to US-ASCII for README.rdoc, skipping
unable to convert "\xC3" to UTF-8 in conversion from ASCII-8BIT to UTF-8 to US-ASCII for README.rdoc, skipping
Successfully installed rack-1.5.2
Successfully installed tilt-1.4.1
Successfully installed rack-protection-1.5.3
Successfully installed sinatra-1.4.5
4 gems installed
Installing ri documentation for rack-1.5.2...
Installing ri documentation for tilt-1.4.1...
Installing ri documentation for rack-protection-1.5.3...
Installing ri documentation for sinatra-1.4.5...
Installing RDoc documentation for rack-1.5.2...
Installing RDoc documentation for tilt-1.4.1...
Installing RDoc documentation for rack-protection-1.5.3...
Installing RDoc documentation for sinatra-1.4.5...
---> 97feabe5d2ed
Removing intermediate container 6b81cb6313e5
Successfully built 97feabe5d2ed
docker build
コマンドで -t
フラグを指定しました。ここでは新しいイメージがユーザ ouruser
に属していること、リポジトリ名が sinatra
、タグを v2
に指定しました。
また、Dockerfile
の場所を示すため .
を使うと、現在のディレクトリにある Dockerfile
の使用を指示します。
注釈
Dockerfile
のパスも指定できます。
これで構築プロセスが進行します。まず Docker が行うのは構築コンテクスト(訳者注:環境や内容物の意味)のアップロードです。典型的なコンテクストとは、構築時のディレクトリです。この指定によって、Docker デーモンが実際のイメージ構築にあたり、ローカルのコンテクストをそこに入れるために必要とします。
この次は Dockerfile
の命令を一行ずつ実行します。それぞれのステップで、新しいコンテナを作成し、コンテナ内で命令を実行し、変更に対してコミットするのが見えるでしょう。これは先ほど見た docker commit
処理の流れです。全ての命令を実行したら、イメージ 97feabe5d2ed
が残ります(扱いやすいよう ouruser/sinatra:v2
とタグ付けもしています)。そして、作業中に作成された全てのコンテナを削除し、きれいに片付けています。
注釈
127 層以上のイメージはストレージ・ドライバに関わらず作成できません。この制限が幅広く適用されるのは、イメージ全体のサイズが大きくならないよう、多くの人に最適化を促すためです。
あとは、新しいイメージからコンテナを作成できます。
$ docker run -t -i ouruser/sinatra:v2 /bin/bash
root@8196968dac35:/#
注釈
ここではイメージ作成の簡単な概要を紹介しました。他にも利用可能な命令がありますが、省略しています。ガイドの後半に読み進めれば、Dockerfile
のリファレンスから、コマンドごとに更なる詳細や例を参照いただけます。Dockerfile
を明らかに、読めるように、管理できるようにするためには Dockerfile
ベストプラクティス・ガイド もお読みください。
イメージにタグを設定¶
コミットまたは構築後のイメージに対しても、タグを付けられます。タグ付けには docker tag
コマンドを使います。ここでは ouruser/sinatra
イメージに新しいタグを付けましょう。
$ docker tag 5db5f8471261 ouruser/sinatra:devel
docker tag
コマンドにはイメージ ID を使います。ここでは 5db5f8471261
です。そしてユーザ名、リポジトリ名、新しいタグを指定します。
それから、docker images
コマンドを使い新しいタグを確認します。
$ docker images ouruser/sinatra
REPOSITORY TAG IMAGE ID CREATED SIZE
ouruser/sinatra latest 5db5f8471261 11 hours ago 446.7 MB
ouruser/sinatra devel 5db5f8471261 11 hours ago 446.7 MB
ouruser/sinatra v2 5db5f8471261 11 hours ago 446.7 MB
イメージのダイジェスト値¶
v2 以上のフォーマットのイメージには、内容に対して digest
と呼ばれる識別子が割り当て可能です。作成したイメージが長期間にわたって変更がなければ、ダイジェスト値は(変更不可能なため)予想できます。イメージの digest 値を一覧表示するには、--digests
フラグを使います。
$ docker images --digests | head
REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE
ouruser/sinatra latest sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf 5db5f8471261 11 hours ago 446.7 MB
2.0 レジストリに対して送信(push)や取得(pull)の実行に、push
か pull
コマンドを使うと、その出力にイメージのダイジェスト値も含みます。このダイジェストを使っても、イメージを pull
できます。
$ docker pull ouruser/sinatra@cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf
ダイジェスト値は create
、run
、rmi
コマンドや、Dockerfile で FROM
イメージの参照にも使えます。
イメージを Docker Hub に送信¶
イメージを構築・作成したあとは、docker push
コマンドを使って Docker Hub に送信できます。これにより、イメージを他人と共有したり、パブリックに共有したり、あるいは プライベート・リポジトリ にも送信できます。
$ docker push ouruser/sinatra
The push refers to a repository [ouruser/sinatra] (len: 1)
Sending image list
Pushing repository ouruser/sinatra (3 tags)
. . .
ホストからイメージを削除¶
Docker ホスト上で、 コンテナの削除 と同じように docker rmi
コマンドでイメージも削除できます。
不要になった training/sinatra
イメージを削除します。
$ docker rmi training/sinatra
Untagged: training/sinatra:latest
Deleted: 5bc342fa0b91cabf65246837015197eecfa24b2213ed6a51a8974ae250fedd8d
Deleted: ed0fffdcdae5eb2c3a55549857a8be7fc8bc4241fb19ad714364cbfd7a56b22f
Deleted: 5c58979d73ae448df5af1d8142436d81116187a7633082650549c52c3a2418f0
注釈
ホストからイメージを削除する時は、どのコンテナも対象となるイメージを利用していないことを確認してください。
次のステップ¶
ここまでは、Docker コンテナ内に個々のアプリケーションを構築する方法を見てきました。次は、複数の Docker コンテナを結び付けるアプリケーション・スタック(積み重ね)の構築方法を学びましょう。
コンテナのネットワーク に移動します。
参考
- Build your own images
- https://docs.docker.com/engine/userguide/containers/dockerimages/