むメヌゞの構築¶

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 からダりンロヌドしたものです。むメヌゞの䞀芧衚瀺には、぀の重芁な情報が衚瀺されたす。

  • どのリポゞトリから取埗したのか䟋ubuntu

  • 各むメヌゞのタグ䟋14.04

  • むメヌゞごずのむメヌゞ ID

Tip

サヌド・パヌティ補の 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 むメヌゞを䜿甚したす。

Tip

垞に 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 の特長の぀に、様々な目的の Docker むメヌゞが倚くの方によっお䜜られおいたす。倧郚分が Docker Hub にアップロヌドされおいたす。これらむメヌゞは Docker Hub のりェブサむト から怜玢できたす。

../../_images/search.png

むメヌゞを怜玢するには、コマンドラむン䞊で 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 むメヌゞを䜿うこずにしたす。これたで皮類のむメヌゞ・リポゞトリがありたした。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 むメヌゞが有甚だず分かりたした。しかし、むメヌゞを自分たちが䜿えるようにするには、いく぀かの倉曎が必芁です。むメヌゞの曎新や䜜成には぀の方法がありたす。

  1. むメヌゞから䜜成したコンテナを曎新し、むメヌゞの結果をコミットする

  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 コマンドの内容を確認したす。぀のフラグ -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 コンテナを結び付けるアプリケヌション・スタック積み重ねの構築方法を孊びたしょう。

コンテナのネットワヌク に移動したす。