‫では､ このファイルをどうすればいいのか｡
‫さて､ 退場しましょうか｡ このディレクトリに､ この1つのファイルだけがあることを確認します｡
‫大きさはやっとkです｡
‫テキスト以外何も入っていないのは明らかですが､ これはイメージを構築するための指示書です｡
‫このイメージをビルドするときに､ from コマンドで debian jessie イメージを Docker Hub からローカルのキャッシュに取り込みます｡
‫そして､
‫Dockerエンジンの中でこれらのスタンザを一行ずつ実行し､ 各レイヤーをキャッシュします｡
‫docker image buildと入力して､ タグ付けしてみましょう｡
‫これは､ 画像につける名前だと覚えておいてください｡
‫この画像はローカルでしか使わないので､ Docker Hub のアカウント名を使う必要はありません｡ 好きなように呼べばいいんです｡
‫カスタムnginxと呼ぶことにして､ ここにドットを付けます｡ これは基本的に､ このディレクトリにdockerfileをビルドすることを意味します｡
‫このようにステップを踏んでいくので､
‫各ステップはドッカーファイルの一行で､ このイメージの中で実行しながら構築していることがわかります｡
‫そして最後に小さなハッシュがありますが､ これは実はビルドキャッシュに保存しているハッシュで､
‫次回ビルドするときに､ その行がdockerfileで変更されていなければ､ 再実行しないようにするためのものです｡
‫これは､ Dockerがデプロイとソフトウェア構築を高速化する魔法のピースの1つで､ ビルドのステップをキャッシュするのに十分な知能を持っているのです｡
‫ですから､ 最初にイメージを構築した後､ カスタムソースコードを変更するだけで､ アプリケーションそのものを変更する必要はなく､
‫インストール作業はすでに完了していることがよくあります｡
‫だから､ 非常に短いビルドタイムが実現できるのです｡
‫さて､ これで組み立ては終了です｡ 1分ほどで終わりましたね｡
‫でも､ そのファイルに戻ったらどうなるんだろう？ 露出したポートを追加するつもりです｡
‫例えば､ 8080でいいんです｡
‫だからといって､ nginxが賢いので､ 私がこのポートを開けていることも､ nginxと何らかの通信をしていることもわかりません｡
‫コンテナがそのポートでパケットを受信することを許可しているだけなのです｡
‫念のため､ docker image ls をしてみましょう｡ 一番上に「最新」という自動タグが表示されますね？
‫なぜなら､ リポジトリ名しか呼んでいないからです｡
‫実は､ タグ付けの際にコロンのタグ名を付けていないんです｡
‫だから､ もう一度作り直そう｡
‫いやー､ 早かったですね｡
‫ほんの2〜3秒の出来事だった｡ そして､ 各ステップでキャッシュを使用中と表示されることに気づくでしょう｡ Step 2から､ using cache､
‫using cache
‫on 3､ using cache on 4と表示されます｡ 5では､ ステップ5で､ その線が違うことを認識するのです｡
‫そのため､ 実際にコンテナの中で実行されます｡ そして､ ステップ6で､ その行を再実行しなければならない｡
‫なぜなら､ ある行が変更されると､ それ以降のすべての行も再構築しなければならないからである｡
‫ここで､ Dockerfileの行の順番について考えてみましょう｡ なぜなら､ もし順番が狂ってしまったら､ たとえば､ コードをコピーしてしまったら......｡
‫例えば､ あなたがウェブサイトを作るとします｡ ファイルの一番最初に作成しているソフトウェアコードをコピーしている場合､
‫ソースファイルを変更してリビルドするたびに､ Dockerfile全体を再度ビルドする必要が出てくるのです｡
‫ですから､ 普段からDockerfileの一番上に変化が少ないものを置き､ 一番下に変化が多いものを置いておくことが､
‫正気と時間のために決定的に重要なことなのです｡