‫わかりました｡ さらにいくつかのDockerfileの例を見てみましょう｡
‫私のGithubからダウンロードしたリポジトリで､ Dockerfileのサンプル番号2に入りましょう｡
‫今回は､ 実は2つのファイルがあるんです｡
‫Dockerfileを用意しました｡ そして､ インデックスが出来上がりました｡ htmlを使用しています｡
‫超シンプル｡ ハローワールド HTMLです｡
‫HTMLを理解することはあまり重要ではありません｡
‫これをコンテナ・イメージにコピーしながら構築していくだけです｡
‫Dockerfileを見ると､ FROMコマンドとしてNginxを使用していることがわかります｡
‫Nginxを自作しないのは､ 理想を言えば､ Docker Hubから公式のイメージを使って仕事ができれば､
‫このDockerfileを保守してうまく動作させるのがずっと楽になるからです｡
‫もっとシンプルなシナリオでは､ オフィシャルイメージが仕事であることがかなり多い｡ しかし､ 環境やシステムが複雑になってくると､
‫カスタム・ソフトウェアを追加したり､ 起動方法を変更したり､ スクリプトを追加して設定を微調整する必要が出てくるでしょう｡
‫しかし､ 新しいグリーンフィールドプロジェクトを始めるときや､ 古いアプリを変換するときは､ いつもDocker Hubの公式イメージから始めることにしています｡
‫そして､
‫何か障害が発生してそのイメージが使えなくなったら､ Docker Hubに戻って､ 何かカスタムで人気のあるもの､
‫信頼できるものがないか､ もう一度調べて､ それが私の問題を解決してくれるかどうかを確認するかもしれませんね｡
‫でも､ 自分で作るのは悪いことではありません｡
‫ただ､ 時間が経つと手間がかかり､ 維持費がかさみます｡
‫そこで､ 超シンプルにご紹介します｡ 3つのスタンザがあるんです｡
‫FROMは見たことありますよね｡ そして､ 今回はWORKDIRです｡
‫これで､ 本当に基本的にcd空間のディレクトリ変更を実行するだけです｡ そこで､ runコマンドを使って､ run cd to this directoryと入力し､
‫いろいろとやってみたくなるのではないでしょうか｡ しかし､ Dockerfileのベストプラクティスは､
‫ディレクトリを変更するときは常に別のWORKDIRスタンザを使用することです｡
‫そのため､ ファイルが少し複雑になり､ ビルド中にコンテナ内を行ったり来たりして何かをする必要がある場合は､
‫常にWORKDIRを使用するようにします｡
‫この場合､ 実際にやっていることは､ HTMLファイルをNginxのデフォルトのディレクトリに変更することです｡
‫Docker Hubのデフォルト設定では､ Nginxは単なるWebサーバとして動作しており､ コンテナディスクから静的ファイルを直接提供しているだけです｡
‫この最後のスタンザは､ 私たちが持っている､ コピーです｡ そしてこれは､ ローカルマシンやビルドサーバーからコンテナイメージにソースコードをコピーするために常に使用するスタンザです｡
‫今回は､ 簡単なインデックスを取るだけです｡ html を作成し､ Nginx のデフォルトディレクトリにあるファイルを上書きして､
‫Web サーバーのカスタムホームページを作成します｡
‫これをビルドする前に､ cmdのような必要なスタンザがないことに気がつくでしょう｡
‫では､ どうすればいいのでしょうか？
‫まあ､ すでにFROMイメージにcmdが指定されているのですが｡
‫そして､ FROMを使うと､ 「Froming」しているDockerfileからすべてを継承することになります｡
‫このように､ Dockerfileをチェーン化することで､ イメージが他のイメージに依存し､ 他のイメージに依存するようにすることができます｡
‫わかりました｡ その様子をご覧ください｡
‫これを構築する前に､ デフォルトの Nginx サーバーが何をするのか､ 簡単に思い出してみましょう｡
‫docker container run -p 8080 を素早く実行してみましょう｡ あまり長い時間は必要ないので､ --rm を実行して､ 終了時に削除するようにします｡
‫名前にはこだわらない｡ Nginxを走らせるだけです｡
‫ブラウザでlocalhostと入力すると､ デフォルトのNginxのインデックスページが表示されます｡
‫OKです｡
‫このことを覚えておいて､ このコンテナを終了して､ 余分なソースコード・ファイルを使ってNginxのバージョンをビルドすることにしましょう｡
‫OKです｡
‫これは本当にすぐ終わるはずです｡
‫気がつくと数秒しかたっていない｡ それは､ すでにイメージキャッシュにNginxが入っていたからです｡ しかも､ 実行していたのは､
‫ごく小さなファイルのコピーと､ 作業ディレクトリの変更だけだった｡
‫では､ 先ほどNginxに対して実行したのと全く同じコマンドを実行してみましょう｡ 今回は､ 先ほど作成した新しい画像を使用します｡
‫ブラウザを切り替えて､ 更新すると､ 素晴らしい｡
‫私たちのカスタムインデックスHTMLはそこで実行され､ 私たちのコンテナは動作しています｡
‫画像のlsを実行すると､ 一番上に最新の画像が表示されます｡
‫これを実際にDocker Hubに送信する場合は､ 先ほどと同じ方法で行います｡
‫タグを付け直せばいいんです｡ そこで､ docker image タグを行うことができます｡
‫helpコマンドを覚えていれば､ フォーマットを見ることができ､ 常にタグ付けしているものと､
‫その後呼び出したいタグが表示されます｡ そこで､ docker image tag nginx with html latestを使用します｡
‫そして､ ブレットフィッシャーと呼ばなければならなくなる...｡ みたいな
‫そして､ もう一度docker image lsを実行すると､ 上の2行は同じイメージIDで､ 異なるタグが付けられていることがわかります｡
‫これで､ そのリポジトリとタグを使ってDockerプッシュをすれば､ Docker Hubにアップできるようになりました｡