自分でイメージを構築

whalesay イメージは更に改良できます。もしかすると、何も喋らせたくないかもしれません。あるいは、もっと喋らせることもできます。

docker run docker/whalesay cowsay boo-boo

このセクションでは whalesay イメージを改良します。(オプションを指定しなくても)「自分で何かを喋る」新しいバージョンのイメージを作成します。実行に必要となるのは、ほんの少しの単語です。

ステップ1:Docker クイックスタート・ターミナルを開く

ターミナルを開いていなければ、新しいものを開きます。

  1. デスクトップ上で Docker Quickstart Terminal アイコンを探します。
デスクトップ
  1. アイコンをクリックし、 Docker クイックスタート・ターミナルを起動します。

デスクトップ上にターミナルが開くまで、暫く待ちます。

ステップ2:Dockerfile を書く

このステップでは Windows メモ帳アプリケーションを使って、短い Dockerfile を書きます。Dockerfile にはイメージを構成するソフトウェア要素を記述します。Dockerfile は単に素材を記述するだけではありません。どのような環境を使うかや、コンテナの中で実行するコマンドも記述できます。今回の Dockerfile は非常に短いものです。

  1. Docker クイックスタート・ターミナル上にカーソルを合わせます。
  1. デスクトップに移動します。
$ cd Desktop
  1. コマンドラインで、デスクトップ上に testdocker という名前のフォルダを作成します。
$ mkdir testdocker
  1. testdocker フォルダに移動します。
$ cd testdocker
  1. touchDockerfile と入力してエンターキーを押すと、現在のディレクトリに Dockerfile を作成します。

ファイル名の D が大文字なので注意します。Linux のファイル名は大文字と小文字を区別します。

$ touch Dockerfile

コマンドを実行しても何も表示されませんが、実際には現在のディレクトリ内に Dockerfile が作成されています。 lsDockerfile を実行してみましょう。

$ ls Dockerfile
Dockerfile
  1. 次は notepadDockerfile& を実行し、Windows のメモ帳を開きます(最後に & アンド記号を忘れないでください)。
&記号

システムはメモ帳プログラムを実行し、空の Dockerfile を開きます。

メモ帳を編集
  1. 開いたファイルの中に FROMdocker/whalesay:latest と入力します。

次のような表示になります。

1行目

FROM キーワードは Docker に対してイメージの元となるイメージを伝えます。これから作成する新しいイメージは、既存の whalesay イメージを使います。

  1. 次はイメージに fortunes プログラムを追加します。
2行目

fortunes プログラムは賢そうな言葉を表示するプログラムです。これを今回のこの鯨プログラムに喋らせます。そのための最初のステップは、ソフトウェアのインストールです。この行は apt-get プログラムを使い fourtune プログラムをインストールします。もしかしたら暗号めいて見えるかもしれませんが、心配しなくても大丈夫です。正確に入力さえしれば、正しく動いてくれます!

  1. イメージに必要なソフトウェアをインストールしたら、イメージの読み込み時に実行するソフトウェアを命令します。
3行目

この行は fortune プログラム(の結果)を、気の利いたことを喋る cowsay プログラムに送ります。

  1. 編集した Dockerfile プログラムを保存します。メモ帳のメニューで、ファイル(F) > 上書き保存(S) を選びます。

以上で Dockerfile 中にソフトウエア全ての要素と挙動を記述しました。これで新しいイメージを構築する準備が整いました。

ステップ3:Dockerfile を使ってイメージ構築

  1. Docker クイックスタート・ターミナルにカーソルを合わせます。
  1. Dockerfile が正確かどうかを確認するため、現在のディレクトリで catDockerfile を実行します。
$ cat Dockerfile
FROM docker/whalesay:latest
RUN apt-get -y update && apt-get install -y fortunes
CMD /usr/games/fortune -a | cowsay
  1. 次は新しいイメージを構築するため dockerbuild-tdocker-whale. コマンドをターミナル上で実行します(最後にピリオド . を忘れないでください)。
$ docker build -t docker-whale .
Sending build context to Docker daemon 158.8 MB
...省略...
Removing intermediate container a8e6faa88df3
Successfully built 7d9495d03763

このコマンドを実行後、結果が出るまで数秒ほどかかります。この新しいイメージを使う前に、Dockerfile 構築時の流れを学びましょう。

ステップ4:構築時の流れを学ぶ

dockerbuild-tdocker-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 librecode00 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

ステップ5:新しい docker-whale を実行

このステップではコンピュータ上にイメージがあるかどうか確認してから、新しいイメージを実行します。

  1. ターミナル・ウインドウ上でなければ、Docker クイックスタート・ターミナルにカーソルを合わせます。
  1. dockerimages を実行してリターンキーを押します。

このコマンドはローカルにあるイメージの一覧を表示します。覚えておくと良いでしょう。

$ 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
  1. 新しいイメージを実行します。dockerrundocker-whale を入力して、エンターキーを押します。
$ docker run docker-whale _________________________________________
/ "He was a modest, good-humored boy. It \\ was Oxford that made him insufferable." / ----------------------------------------- \\\## .## ## ## ==## ## ## ## === /""""""""""""""""___/ === ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~ \______ o __/ \ \  __/ \____\______/

ご覧の通り、少し賢くなった鯨プログラムを作りました。コマンドラインで何かを自分で指定すると、その表示もできます! そして、Docker は何もダウンロードしないことにも注目します。これはイメージをローカルで構築しており、ダウンロードする必要がないからです。

次は何をしますか

このページでは自分で Dockerfile を記述してイメージを構築する方法を学びました。そして、自分のイメージを使ってコンテナを実行しました。また、Windows 上の Linux システムを使い続けています。次のセクションではイメージを共有する第一歩として、 Docker Hub アカウントを作成 します。