2018年 Docker 使い方 まとめ その2
2018.12.16
この記事は最終更新日から1年以上が経過しています。

どもです。
前回の「2018年 Docker 使い方 まとめ その1」の続きになります。
Docker公式サイト
Docker イメージ
それでは、今回は「Docker イメージ」についてから。
そもそも、Docker イメージとはなんぞや?
ってところですが、Docker イメージは OSや実行環境など、コンテナ実行に必要なファイルをまとめられた、ファイルシステムとなります。
DockerコンテナはDockerイメージを元に作成されます。
例えば、nginxはこちらのDockerHubレポジトリにあり、PHPはこちら、Wordpressはこちらと、沢山のイメージが用意されています。
これらはAUFSなどの特殊なファイルシステムとなっており、読み込み専用となっております。
また、自分で作成することも可能となっております。
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
Dockerイメージを元にコンテナを起動すると、新たにコンテナレイヤーが生成され、
このレイヤーは「読み書き可能」なレイヤーとなります。
このコンテナをイメージとして保存することも可能となっております。
注意点は、過去のレイヤーでファイルを追加してコンテナレイヤーで削除し新規でイメージを作成したとしても、
過去のレイヤーは履歴が残ったままになるので、削除されることはありません。
なので、あるレイヤーで追加されたファイルは残り続けるのでイメージを作成する際は、注意が必要です。
Docker イメージ継承

UbuntuのベースイメージにRubyの実行環境をインストールしたイメージを作成する例となります。
更に Ruby on Railsのイメージを作成した場合。

このように、イメージを継承していくことで、アプリケーションレイヤーを追加していくことも可能です。
また、全く同じDockerイメージを継承する場合、新しく生成されるのではなく、
元 からあるイメージを参照する形となっているので、容量も抑えられる作りとなっております。
Docker 公式チュートリアルイメージ「whalesay」
Docker社が用意しているチュートリアルイメージ「whalesay」を利用してみます。
クジラのアスキーアートに好きなメッセージを喋らせることが可能なイメージとなっております。
$ docker run docker/whalesay cowsay HelloWorld!
docker/whalesayの後の、「cowsay HelloWorld! 」が、コンテナ内で呼び出されるコマンドとなります。
cowsayの後に任意のメッセージを記述します。
docker/whalesayイメージが存在しない場合は、DockerhubよりPullされ実行されます。
Dockerイメージの管理
Dockerイメージの各コマンド一覧となります。
ダウンロード済みのイメージ一覧を表示
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest 4ab4c602aa5e 4 months ago 1.84kB mysql 5.7.22 6bb891430fb6 5 months ago 372MB nginx 1.13.5-alpine ea7bef82810a 14 months ago 15.5MB mysql 5.7.19 3e3878acd190 15 months ago 412MB php 7.1.9-fpm-alpine 5ec2c0136450 15 months ago 68.3MB
イメージにタグ付けするコマンド
$ docker tag docker/whalesay my_whalesay
タグ付けサブコマンド: イメージ名:新しいイメージ名
任意のイメージ名(エイリアス名)を設定することが可能。
$ docker tag docker/whalesay my_whalesay:1.0.0
docker/whalesay latest 6b362a9f73eb 3 years ago 247MB my_whalesay 1.0.0 6b362a9f73eb 3 years ago 247MB my_whalesay latest 6b362a9f73eb 3 years ago 247MB
詳細情報確認
$ docker inspect my_whalesay
ローカルのイメージを削除するコマンド
$ docker rmi docker/whalesay
強制的に削除実行
$ docker rmi -f docker/whalesay
イメージを取得
$ docker pull docker/whalesay
イメージビルド
Dockefileから生成(ビルド)する方法です。
任意のエディタで「Dockefile」を作成します。
$ vim Dockerfile
FROM: 元になるイメージの指定
RUN:イメージビルドの際に実行するコマンド
CMD :コンテナ生成後に実行するコマンド
Dockerfile
From docker/whalesay:latest RUN apt-get -y update && apt-get install -y fortunes CMD /usr/games/fortune | cowsay
上記は、fortunesパッケージをインストール(ランダム名言生成パッケージ)し、
docker/whalesayイメージを利用して、クジラに喋らせるDockerfileとなります。
ビルドコマンド
上記のDockerfileの記述が終わったら、早速イメージ生成のbuildコマンドを実行します。
$ docker build -t docker-whale .
イメージをビルドするサブコマンド、 「-t」はタグ名の指定となります。
「docker-whale」はビルド後のイメージ名となります。
最後の「.」は、ビルドコンテキストの指定となります。
ビルドコンテキストの指定がカレントディレクトなので、カレントのDockerfileを参照する形となります。
ビルドコンテキストにあるファイルを一度dockerデーモンに送信されるので、
不要なファイルが多々あったり、重いファイルが存在すると実行(送信)が遅くなるので注意が必要です。
イメージビルドの実行
$ docker build -t docker-whale .
上記のビルドコマンドを実行すると、ビルドが開始されます。
Sending build context to Docker daemon 2.048kB Step 1/3 : From docker/whalesay:latest ...
Dockerデーモンに送信される容量や、step数などがコンソールに表示され確認することができます。
Dockerビルドが無事終了すると、イメージが生成されますので 「docker images」コマンドで確認します。
$ docker images
$ docker-whale latest 1f66ccaba0ef 8 minutes ago 278MB
無事生成されているのが、確認できました。
それでは、実行してみます。
$ docker run docker-whale

くじらさんが名言を喋ってくれたら成功です。
ビルドキャッシュ
DockerFileで、apt-getなど指定していると、ビルドされないとパッケージの最新を取得できないことになります。
実際に、再度Dockerビルドコマンドを実行すると
Step 2/3 : RUN apt-get -y update && apt-get install -y fortunes ---> Using cache ---> c9aff62f2bf4 Step 3/3 : CMD /usr/games/fortune | cowsay ---> Using cache ---> da232ab708a4
「Using cache」と、キャッシュが利用されているのが確認できます。
キャッシュを利用せず、docker buildを行うオプションは「—no-cache」となります。
以下のコマンドを実行すると、再度 docker pull を行い、DockerFile内のコマンドを実行する形となります。
ノンキャッシュ
$ docker build —no-cache -t docker-whale .
と、言った 感じでクジラに名言を喋らせることができましたので、続きは次回にでも。
またまたぁ。