自分でイメージを構築¶
whalesay
イメージは更に改良できます。もしかすると、何も喋らせたくないかもしれません。あるいは、もっと喋らせることもできます。
docker run docker/whalesay cowsay boo-boo
このセクションでは whalesay
イメージを改良します。(オプションを指定しなくても)「自分で何かシャベル」新しいバージョンのイメージを作成します。実行に必要なのは、ほんの少しの単語です。
ステップ1:Docker クイックスタート・ターミナルを開く¶
ターミナルを開いていなければ、新しいものを開きます:
- デスクトップ上で Docker Quickstart Terminal アイコンを探します。
- アイコンをクリックし、 Docker クイックスタート・ターミナルを起動します。
デスクトップ上にターミナルが開くまで暫く待ちます。
ステップ2:Dockerfile を書く¶
このステップでは Windows メモ帳アプリケーションを使い、短い Dockerfile を書きます。Dockerfile にはイメージを構成するソフトウェア要素を記述します。Dockerfile は単に素材を記述するだけではありません。どのような環境を使うかや、コンテナの中で実行するコマンドも記述できます。今回の Dockerfile は非常に短いものです。
- Docker クイックスタート・ターミナル上にカーソルを合わせます。
- デスクトップに移動します。
$ cd Desktop
- コマンドラインで、デスクトップ上に
testdocker
という名前のフォルダを作成します。
$ mkdir testdocker
testdocker
フォルダに移動します。$ cd testdocker
touch Dockerfile
と入力してエンターキーを押すと、現在のディレクトリに Dockerfile を作成します。
ファイル名の D
が大文字なので注意します。Linux のファイル名は大文字と小文字を区別します。
$ touch Dockerfile
コマンドを実行しても何も表示されませんが、実際には現在のディレクトリ内に Dockerfile が作成されています。 ls Dockerfile
を実行してみましょう。
$ ls Dockerfile
Dockerfile
- 次は
notepad Dockerfile&
を実行し、Windows のメモ帳を開きます(最後に&
アンド記号を忘れないでください)。
システムはメモ帳プログラムを実行し、空の Dockerfile を開きます。
- 開いたファイルの中に
FROM docker/whalesay:latest
と入力します。
次のような表示になります。
FROM
キーワードは Docker に対してイメージの元となるイメージを伝えます。これから作成する新しいイメージは、既存の whalesay
イメージを使います。
- 次はイメージに
fortunes
プログラムを追加します。
fortunes
プログラムは賢そうなことを表示するプログラムです。これを今回のこの鯨プログラムに喋らせます。そのため、最初のステップはインストールです。この行は apt-get
プログラムを使い fourtune
プログラムをインストールします。もしかしたら暗号めいて見えるかもしれませんが、心配しなくても大丈夫です。正確に入力さえしれば、正しく動いてくれます!
- イメージに必要なソフトウェアをインストールしたら、イメージの読み込み時に実行するソフトウェアを命令します。
この行は fortune
プログラム(の結果)を、気の利いたことを喋る cowsay
プログラムに送ります。
- 編集した Dockerfile プログラムを保存します。メモ帳のメニューで、ファイル(F) > 上書き保存(S) を選びます。
以上で Dockerfile 中にソフトウエア全ての要素と挙動を記述しました。これで新しいイメージを構築する準備が整いました。
ステップ3:Dockerfile を使ってイメージ構築¶
- Docker クイックスタート・ターミナルにカーソルを合わせます。
- Dockerfile が正確かどうかを確認するため、現在のディレクトリで
cat Dockerfile
を実行します。
$ cat Dockerfile
FROM docker/whalesay:latest
RUN apt-get -y update && apt-get install -y fortunes
CMD /usr/games/fortune -a | cowsay
- 次は新しいイメージを構築するため
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 の構築時の流れを学びましょう。
ステップ4:構築時の流れを学ぶ¶
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
ステップ5:新しい docker-whale を実行¶
このステップではコンピュータ上にイメージがあるかどうか確認してから、新しいイメージを実行します。
- ターミナル・ウインドウ上でなければ、Docker クイックスタート・ターミナルにカーソルを合わせます。
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 を記述してイメージを構築する方法を学びました。そして、自分のイメージを使ってコンテナを実行しました。また、まだ Windows 上の Linux システムを使っています。次のセクションではイメージを共有する第一歩として、 Docker Hub アカウントを作成 します。
参考
- Biuld your own image
- https://docs.docker.com/windows/step_four/