自分でイメージを構築¶
whalesay
イメージは更に改良できます。もしかすると、何も喋らせたくないかもしれません。あるいは、もっと喋らせることもできます。
docker run docker/whalesay cowsay boo-boo
このセクションでは whalesay
イメージを改良します。(オプションを指定しなくても)「自分で何かシャベル」新しいバージョンのイメージを作成します。実行に必要なのは、ほんの少しの単語です。
ステップ1:Docker クイックスタート・ターミナルを開く¶
このステップでは、任意のテキストエディタを使い短い Dockerfile を書きます。Dockerfile にはイメージを構成するソフトウェア要素を記述します。Dockerfile は単に素材を記述するだけではありません。どのような環境を使うかや、コンテナの中で実行するコマンドも記述できます。今回の Dockerfile は非常に短いものです。
- ターミナル・ウインドウに戻ります。
- 新しいディレクトリを作成するため、
mkdir mydockerbuild
を入力してリターンキーを押します。
$ mkdir mydockerbuild
このディレクトリは構築時の「コンテクスト」(context;内容物)の役割があります。このコンテクストとは、イメージを構築するために必要な全てを指します。
新しいディレクトリに移動します。
$ cd mydockerbuild
この時点でディレクトリには何もありません。
- 現在のディレクトリに
Dockerfile
という名称のテキストファイルを作成します。
vi
や nano
などの任意のテキストエディタを使えます。
- Dockerfile ファイルを開きます。
- 次のように行を追加します。
FROM docker/whalesay:latest
FROM
キーワードは Docker に対してイメージの元となるイメージを伝えます。これから作成する新しいイメージは、既存の whalesay
イメージを使います。
- 次はイメージに
fortunes
プログラムを追加します。
RUN apt-get -y update && apt-get install -y fortunes
fortunes
プログラムは賢そうなことを表示するプログラムです。これを今回のこの鯨プログラムに喋らせます。そのため、最初のステップはソフトウェアのインストールです。
- イメージに必要なソフトウェアをインストールしたら、イメージの読み込み時に実行するソフトウェアを命令します。
CMD /usr/games/fortune -a | cowsay
この行は fortune
プログラム(の結果)を、気の利いたことを喋る cowsay
プログラムに送ります。
- これまでの作業内容を確認します。ファイルは次のようになっているでしょう。
FROM docker/whalesay:latest
RUN apt-get -y update && apt-get install -y fortunes
CMD /usr/games/fortune -a | cowsay
- Dockerfile を保存して閉じます。
以上で Dockerfile 中にソフトウエア全ての要素と挙動を記述しました。これで新しいイメージを構築する準備が整いました。
ステップ2:Dockerfile を使ってイメージ構築¶
- 次は新しいイメージを構築するため
docker build -t docker-whale .
コマンドをターミナル上で実行します(最後にピリオド.
を忘れないでください)。
$ docker build -t docker-whale .
Sending build context to Docker daemon 158.8 MB
...省略...
Removing intermediate container a8e6faa88df3
Successfully built 7d9495d03763
このコマンドを実行すると、結果が出るまで数秒ほどかかります。この新しいイメージを使う前に、Dockerfile の構築時の流れを学びましょう。
ステップ3:構築時の流れを学ぶ¶
docker build -t docker-whale .
コマンドは現在のディレクトリ内にある Dockerfile
を使います。そして、自分のマシン上に docker-whale
という名称のイメージを構築します。コマンドの処理には少し時間がかかります。処理結果の表示は少し複雑に見えるでしょう。このセクションでは、各メッセージの意味を学びます。
まず Docker は構築時に必要な全てを確認します。
Sending build context to Docker daemon 158.8 MB
それから Docker は whalesay
イメージを読み込みます。読み込むイメージは、先ほどのステップで既にローカルにあります。そのため、Docker は改めてダウンロードしません。
Step 0 : FROM docker/whalesay:latest
---> fb434121fc77
Docker は次の行に移ります。 apt-get
パッケージ・マネージャを更新します。ここでは多くのメッセージが表示されますが、表示されるのは初回だけです。
Step 1 : RUN apt-get -y update && apt-get install -y fortunes
---> Running in 27d224dfa5b2
Ign http://archive.ubuntu.com trusty InRelease
Ign http://archive.ubuntu.com trusty-updates InRelease
Ign http://archive.ubuntu.com trusty-security InRelease
Hit http://archive.ubuntu.com trusty Release.gpg
....snip...
Get:15 http://archive.ubuntu.com trusty-security/restricted amd64 Packages [14.8 kB]
Get:16 http://archive.ubuntu.com trusty-security/universe amd64 Packages [134 kB]
Reading package lists...
---> eb06e47a01d2
それから、Docker は新しい fortunes
ソフトウエアをインストールします。
Removing intermediate container e2a84b5f390f
Step 2 : RUN apt-get install -y fortunes
---> Running in 23aa52c1897c
Reading package lists...
Building dependency tree...
Reading state information...
The following extra packages will be installed:
fortune-mod fortunes-min librecode0
Suggested packages:
x11-utils bsdmainutils
The following NEW packages will be installed:
fortune-mod fortunes fortunes-min librecode0
0 upgraded, 4 newly installed, 0 to remove and 3 not upgraded.
Need to get 1961 kB of archives.
After this operation, 4817 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu/ trusty/main librecode0 amd64 3.6-21 [771 kB]
...snip......
Setting up fortunes (1:1.99.1-7) ...
Processing triggers for libc-bin (2.19-0ubuntu6.6) ...
---> c81071adeeb5
Removing intermediate container 23aa52c1897c
最後に Docker は構築の終了を画面に表示します。
Step 3 : CMD /usr/games/fortune -a | cowsay
---> Running in a8e6faa88df3
---> 7d9495d03763
Removing intermediate container a8e6faa88df3
Successfully built 7d9495d03763
ステップ4:新しい docker-whale を実行¶
このステップではコンピュータ上にイメージがあるかどうか確認してから、新しいイメージを実行します。
- ターミナル・ウインドウ上でなければ、画面にカーソルを合わせます。
docker images
を実行してリターンキーを押します。
このコマンドはローカルにあるイメージの一覧を表示します。覚えておくと良いでしょう。
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
docker-whale latest 7d9495d03763 4 minutes ago 273.7 MB
docker/whalesay latest fb434121fc77 4 hours ago 247 MB
hello-world latest 91c95931e552 5 weeks ago 910 B
- 新しいイメージを実行します。
docker run docker-whale
を入力して、エンターキーを押します。
$ docker run docker-whale
_________________________________________
/ "He was a modest, good-humored boy. It \
\ was Oxford that made him insufferable." /
-----------------------------------------
\
\
\
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
ご覧の通り、少し賢くなった鯨プログラムを作りました。コマンドラインで何かを自分で指定すると、それの表示もできます! Docker は何もダウンロードしないことにも注目します。これはイメージをローカルで構築しており、ダウンロードする必要がないからです。
次は何をしますか¶
このページでは自分で Dockerfile を記述してイメージを構築する方法を学びました。そして、自分のイメージを使ってコンテナを実行しました。次のセクションではイメージを共有する第一歩として、 Docker Hub アカウントを作成 します。
参考
- Biuld your own image
- https://docs.docker.com/linux/step_four/