‫わかりました｡ 以上が､ 最初のDockerfileを作成するという課題に対する答えです｡ このコースの最初にダウンロードしたリポジトリのルートにいれば､
‫dockerfile assignment 1に入ることができるはずです｡
‫この中に､
‫私が本当に気になるファイルがひとつだけあります｡
‫おそらく､ これは誰かがくれたソースで､ Nodeを使っているアプリ開発者だと思います｡ jsは､ あまり詳しくないので､ Dockerfileを編集することにします｡
‫OKです｡
‫開発者の指示に従えば､ まずFROMの画像を取りに行かなければならないことは分かっています｡
‫そして､ ノード公式を使う必要があることも分かっています｡ 調べてきますね｡
‫そうですね｡ ノードの公式がありますね｡
‫アルパインでバージョン6を動かしたいのですが｡ 6アルパインがあるんですね｡
‫わかりました｡ で､ 6-アルピン｡
‫オッケーです｡ その次は... 3000番ポートを公開する必要があります｡
‫3000をここで公開するのは､ このアプリがその上で動作するように設計されているからです｡
‫しかし､ 後でdocker runで実行すると､ ポート80がポート3000に行くという-pの使い方を覚えておく必要があるんだ｡
‫わかりました｡
‫こちらはパッケージマネージャーを使用してこのアプリをインストールする必要があります､
‫tini｡ そのためにrunコマンドを使います｡
‫それから､ ディレクトリを作る｡
‫わかりました｡
‫別々のランコマンドにしちゃおうかな...｡ apk addを実行し､
‫mkdirを実行します｡
‫OKです｡ それから､ 1つのファイルにコピーする必要があるのですが､ そのように見えます｡
‫そこで､ 作業ディレクトリを先ほど作成したディレクトリに変更した方がいいかもしれませんね｡
‫だからWORKDIRのユーザーソースアプリ｡ 後で時間の節約になりますから｡
‫パッケージjsonパッケージjsonのCOPYができるんです｡
‫わかりました｡ それから､ インストールコマンドを実行する必要があります｡ 走れそうです｡ こちらは､
‫別のコマンドを実行してクリーンアップしてくださいというものです｡
‫わかりました｡
‫さて､ 通常クリーンアップコマンドを実行する場合､ 実際のインストールと同じ行､ または同じ実行行で実行させたいものです｡
‫そうすることで､ すべてを同時に削除し､ 画像レイヤーを1枚にすることができます｡
‫画像スペースに最適です｡
‫ということで､ ここに追記します｡
‫そして､ ダブル＆サイン､ またはアンパサンドと呼ばれる記号がここで行うことは､ 実は条件分岐なのです｡
‫Linuxのコマンドラインに対して､ 「おい､ 1つ目をやって成功したら､ 2つ目のコマンドをやってみろ」と言うのです｡
‫また､
‫セミコロンを入れている人を時々見かけますが､ それもいいでしょう｡
‫違いは､ セミコロンが最初のコマンドが成功したかどうかには依存しないことです｡
‫関係なく2回目が実行されるだけです｡
‫だから､ ダブル・アンパサンドが好きなんです｡
‫わかりました｡
‫さらにいくつかのファイルをコピーしているようです｡ 全部コピーインするなら､ . それは簡単な方法です｡
‫真ん中にスペースがあることを確認してください｡
‫これは基本的に､ 「ホスト上の私の現在のディレクトリから､
‫イメージの現在の作業ディレクトリにすべてをコピーしてください」ということです｡ ' OKです｡
‫最後の1枚になりました｡
‫そして､ これはちょっと厄介そうです｡
‫そこで実行する必要があるコマンドの部分が4種類あるんです｡
‫だから､ このフォーマットでは､ tini､ そしてコンマを実行する必要があるんだ｡
‫つまり､ これはJSON形式なんですね｡
‫この特定のコマンドスタンザ｡ --, node bin www.
‫もしそれが気になったら､ いつでもブラウザで
‫docker run や docker build cmd を実行することができます｡
‫そして､ Dockerfileのリファレンスに賭ける｡ そして､
‫このページで､ cmd. そして､ その正確な形が語られている｡ ここを読むと､ 実はシェルフォームというものがあることに気づかれると思います｡
‫そして､
‫エントリーポイントについても言及されていることがあります｡
‫これについては､ コースの後半で､ より高度なDockerfileのセクションで説明する予定です｡
‫でも､ 今はこれでいいんです｡
‫作ってみよう｡ dockerのビルド｡ 今は呼び方なんてどうでもいいんです｡
‫私はビルドをテストしようとしているのですが､ 通常､ 私のビルドは最初の1回ではうまくいきません｡ ということで､ testnodeということにしておきます｡
‫このディレクトリを構築する
‫OKです｡
‫正しく構築されているように見えます｡
‫実行できるかどうか見てみましょう｡
‫テストした後､ 本当に持っていてもしょうがないので､
‫--rmをすることにします｡
‫名前をつける必要はないだろう｡
‫ポートを開口するために入れる必要がある｡ 80で走らせたいのに､ 3000で聴かされる｡ OKです｡
‫実はこれ､ アルパインの中のtiniから送られてくる普通のメッセージなので､
‫あまり気にしないことにしています｡
‫さっそく見てみましょう｡
‫甘い｡ そこでログを見ることになる｡
‫OKです｡
‫そうみたいですね｡
‫ありがとうございます､ ピカード艦長
‫拍手喝采に感謝します｡
‫応援をよろしくお願いします｡
‫ありがとうございます｡
‫わかりました｡
‫コントロールCを外に出す｡ 今では､ 私のイメージリストの一番上にあるはずです｡
‫Docker Hubに載せる前にリネームする必要があるんです｡
‫で､ docker tagですが､ フォーマットは旧と新があると思います｡ そうですね｡
‫そこで､ docker tag testnode｡
‫ブレットフィッシャー・テスト・ノードと呼ぶことにします｡
‫そして､ 最新のものだけにしておきます｡
‫で､ docker pushで､ これ｡ 心配なのは名前だけです｡ ということで､ docker push
‫bretfisher testing node｡
‫わかりました｡ Dockerに移動して見てみましょう｡
‫ほら､ ノードのテストだ｡
‫OKです｡
‫画面をクリアしてdocker image ls.
‫そして､ そこにあるのは 削除します､ docker image rm bretfisher
‫testingです｡
‫わかりました｡ では､ 実際に実行してみます｡ 先ほどと同じように､ docker container run
‫--rm -p 80 3000です｡
‫それなら､ 実はブレットフィッシャー・テスト・ノードというのがあるんです｡
‫これでダウンロードし､ 実行することができるはずです｡
‫わかりました｡
‫ブラウザでlocalhostに戻ると､ そこにあります｡ 念のため､ 更新を押してもいいのですが｡
‫はい｡ かっこいい｡