‫まず最初に､ Charlesが自分のDockerファイルを投稿してくれました｡
‫そしてもちろん､ 現実には､ 実世界のファイルになると､ すべてが厄介なことになるのです｡
‫そうですね｡
‫私たちは皆､ 私のようなコースで学び､ ブログの記事やドキュメントから学び､ そして実社会に出ると､
‫いつもそれ以上に難しく感じるのです｡
‫ですから､ 私はいつも講座にもっと複雑な要素を加えようとしています｡
‫それは､ あなたの環境､ セットアップ､ そしてあなたの特定のアプリケーションに非常に関係しています｡
‫それで､ 昨日の夜､ 「明日の番組でこの話をしないか」と思ったんです｡
‫だから､ もしあなたが本当にこれが好きなら､ 親指を立ててみてください｡
‫チャットやコメントで､ もっとこういうのが欲しいと言ってくれれば､ これを定期的にやって､ もっと多くのDockerファイルやcomposeファイルをレビューして､
‫そこにある良い宝石をいくつか引き出そうと思っています｡
‫わかりました｡
‫まず最初に登場するのはCharlesで､ 彼は自分のアカウントから来たようで､ P HP Apacheの画像を持っています｡
‫その名前からして､ そういうことなんだろうと思うことにしています｡
‫そしてそれは日付を持っていて､ そこの名前にバージョンと日付を持っていることを知っています｡
‫そのため､ 画像から独自のカスタムを始めると､ バージョンアップや日付変更､ コミットメントのアイデアを使用するようになるのはよくあることです｡
‫そしてそれは､ 全く同じ画像を正しく使っていることを保証する方法です｡
‫ここでも､ 実際の制作現場では､ 最新版だけを使うのではなく､ 遊びやテストのために常に最新版を使用することができます｡
‫でも､ 本物になると､ 必ずその本物を使いたくなるものなんです｡
‫それは､ Azure HPのイメージだとシャルルは言っています｡
‫OKかっこいい｡
‫そして､ 彼はここで､ 私が今まで見たことのないような面白い設定をしています｡
‫つまり､ この実行ラインでは､ アップデートを取得するためにアプリを実行し､ それが成功しない場合は､
‫bashでORを与えています｡
‫で､ それを繰り返しているわけですね｡
‫これは､ ネットワークや他の場所でアップデートの問題が発生する可能性があるか､
‫過去にランダムに失敗し､ 2回目を実行すればうまくいくようなクセがあるか､
‫どちらかだと思います｡
‫そこでやっていることなんでしょうね｡
‫そして､ もしそれがそのためのものであるなら､ その問題に対する効果的な解決策となるのです｡
‫そうでなければ､ このようなセットアップを見ることは通常ありません｡
‫わかりました｡
‫次にエクスポートですが､ これはほんの小さなメタデータの変更にすぎません｡
‫そのため､ あまり時間はかからないと思います｡
‫そして､ 彼はAzureのサポートをむちゃくちゃにして､ それがバグを修正するように話した｡
‫では､
‫このフォントを変えてみましょう｡
‫見栄えが良くなる｡
‫そうですね｡
‫わかりました｡
‫そこで､ 面白いことがあります｡
‫ダウンロードを行い､ パッケージをインストールするのは普通のことです｡
‫そして､ ここでAPPのゲットインストールも大量にやっていますね｡
‫ですから､ このワークフローがどのように機能するのかを理解するためのテストでない限り､
‫特にサイズに関しては､ 最適化の機会がたくさんあります｡
‫そして､ あなたはまた､ 私たちが少し困ってしまうような状況を持っています｡
‫ここで､ アップデートを取得するためのアプリケーションを実行する別の行があることに注目してください｡
‫だから､ この下にある､ すべてのインストールを行うためのラインはありません｡
‫このように､ すべてのステップを分解してみたわけですね｡
‫今､ 公式の画像を見てみると､ 決してこんなことはしていないことに気がつくはずです｡
‫いつも巨大な1本の線にまとめてしまうのですが､ それにはいくつか理由があるんです｡
‫ここでの最大の理由は､ キャッシュバストアップです｡
‫つまり､ イメージを構築するときには､ その背後に現金があるのです｡
‫JenkinsやCCDランナーのようなものを使っていて､ キャッシュを無効にして､
‫キャッシュなしで毎回ゼロからビルドするような場合は､ それほど問題にはならないかもしれませんが､ ローカルでビルドしたり､
‫何らかのシステムで複数回ビルドする場合は確実に問題になるでしょう｡
‫そして､ ランラインがこうなるのです｡
‫あるとしましょう｡
‫OKです｡
‫そして､ それは決して変わることはありません｡
‫そうですね｡
‫だから､ 最初にこのイメージを構築するときは､ すべてがうまくいく｡
‫3日後にビルドするとしよう｡
‫この行は変更されていないので､
‫キャッシュされません｡
‫そして､ その行を変更すると､ その行のすべてが再実行され､ それ以降のすべての行も再実行されます｡
‫ここで何が起こるかというと､ ここにある実行ファイルをそのままにしておいて､
‫実行ファイルに別のパッケージを追加したり､ バージョンを変更したり､
‫ハードコードしたりすると､ どうなるでしょうか｡
‫しかし､ セキュリティチームが厳しければ､ 信頼できるバージョンを持つことを期待するでしょうし､ ここでもそうしたいと思うでしょう｡
‫しかし､ ここで話を元に戻そう｡
‫ですから､ これらのインストールを行う場合､ ツールを変更してここに追加するのです｡
‫それを考えて､ get updateしなければならなかったのは､ これらすべてのパッケージに関するメタデータのキャッシュをダウンロードし､
‫後でこれらのパッケージをインストールするつもりで､ もしここの2行目が変更によって破綻したら､
‫再実行するつもりです｡
‫しかし､ それはあなたのアプリの古いキャッシュに基づいて実行され､ 更新を取得することになります｡
‫そのため､ 古いバージョンのパッケージがインストールされてしまい､
‫問題が発生する可能性があります｡
‫そしてそれは､ 必ずしもここでこのパッケージをダウンロードすることとは関係がない｡
‫こちらはカスタムパッケージです｡
‫それについては､ ちょっとだけお話します｡
‫しかし､ このラインに関しては､ このラインはこのラインと同じラインを走らなければならないので､
‫サイズに影響を与えることはありません｡
‫今､ これはすべて真実ではないかもしれません｡
‫もう一台Okayがあれば､ 多段化はしない｡
‫サイズの問題から逃れる方法の1つは､ マルチステイトでやっても､ ステイトで何をやっているわけでもなく､ それはそれでOKということです｡
‫多段階にする必要はありません｡
‫では､ ここで何が起こるかというと､
‫この右側にあるものを全部取って､ この線まで全部上げることをお勧めします｡
‫この輸出用の線を上に持ってきて､ この上に置くと､ 設定されるようになります｡
‫そして､ それは決して変える必要がない｡
‫そして､ あなたは､ あなたがものを正しく得るために出ているすべての途中でそれを心配する必要はありません｡
‫インストールに時間がかかる依存関係は､ できるだけ上位に置いて､
‫頻繁に再実行する必要がないようにしたいからです｡
‫しかし､ 私がお勧めするのは､
‫ここにあるものを全部取って､ ここに置いて､ 次にこれをすることです｡
‫その際､ いくつかのポイントがあります｡
‫ひとつは､ これです｡
‫この線はレイヤーになり､ レイヤーには常にdbファイルが含まれるようになります｡
‫そのため､ 後でクリーンアップする際に､ これらの前のレイヤーをクリーンアップすることはありません｡
‫この問題の1つは､ レイヤーにダウンロードされたファイルが､ 次の行､ つまり次のDockerコマンドに進むと､
‫新しいレイヤーになることです｡
‫ラインやドッカーコマンドを止めたら､ 別にアップされると考えてください｡
‫それは変えられない......過去に戻っても変えられない｡
‫つまり､ 次の行やコマンド､ Dockerファイルは､ それにいろいろと追加していくだけなのです｡
‫これで､ ファイルを削除すると､ そのレイヤー内のファイルが削除されるだけです｡
‫このメタデータは､ 「そのファイルはもう存在しないはずだ」「存在するように見えるが､ ファイルはまだ存在する」「読み取り専用のレイヤーは､
‫その上のレイヤーがすべて読み取り専用になっているため､ レイヤーが期待通りのものであることを保証する方法である」というものです｡
‫だから､ どのレイヤーも過去に戻ることはできない｡
‫そこで必要なのが､ Dockerのデフォルトイメージをいくつかチェックすることです｡
‫実際に私のものを見てみましょう｡
‫そうそう......よくわからないんです｡
‫OKです｡
‫DockerファイルにはAP Kayがありますが､ 1行にまとまっていることにお気づきでしょうか｡
‫そこで､
‫このDebianのDockerファイルを見てください｡
‫さあ､ いよいよです｡
‫つまり､ この状況では､ あるものをダウンロードし､ そのものを処理し､ そしてそのものをすべて1つの行で取り除いていることに気づかれるでしょう｡
‫そうすることで､ これらのファイルは決して残らないのです｡
‫そのレイヤーを一旦封印し､ 読み取り専用とする｡
‫そして､ これが画像を小さくするためのかなりのキーポイントになります｡
‫これを効率よく作って組み合わせれば､ 何百メガもの画像サイズを節約できるに違いない｡
‫そして､ もうひとつは､ 広告を出す必要はないかもしれませんが､ インターネットからファイルを自動的にダウンロードする広告を出すことができます｡
‫コピーと広告の違いについて興味がある方は､ 私たちの標準では､ コピーは今いるレポからファイルをコピーするためだけのものだと考えていただければと思います｡
‫しかし､ インターネットから何かをダウンロードするとき､ あるいは何かをコピーするときに､
‫解凍したり､ UN tarしたりするときだけ､ adを使いたくなるものなのです｡
‫しかし､ adを使うことの利点は､ w w getをする必要がなく､ 基本的に医者の内部でwe'll
‫go get that file and download itを使うことができることです｡
‫そのパッケージはまだ存在します｡
‫あなたの場合､ 広告がとてもクールですが､ パッケージをダウンロードして､ それをインストールすれば､
‫もうそのパッケージは必要なくなるわけです｡
‫この3行を1行にまとめれば､ 最後にドットDを削除することができますね｡
‫B. ファイルを作成し､ 最終的なイベントでの追加のスペースを節約することができます｡
‫それを一度に全部やってしまうわけです｡
‫わかりました｡
‫それは助かりますね｡
‫つまり､ 他のファイルをコピーしているように見えますが､ これは追加ではなくコピーを使っているのです｡
‫メーカーやコピー､ 証明書もやっているんですね｡
‫まさにその通りです｡
‫なぜなら､ これらの行の一つひとつが､ コンテナを停止したり､
‫新しいコンテナを作成したり､ イメージの残りをマウントしてコマンドを実行し､
‫それを新しいコンテナイメージに保存してから､ 新しいコンテナを起動しなければならないからです｡
‫そうですね｡
‫だから､ 3つのコマンドを素早く実行するだけでなく､ もっとたくさんの仕事をしなければならない｡
‫だから､ それらをひとつにまとめただけかもしれません｡
‫安全地帯の節約も何もありませんが､ 3つのコマンドが1つの長いシェルコマンドになるだけのことなんです｡
‫ゲートがある
‫ちなみに私は､ 効率を考えて､ 同じものを作ってしまうかもしれません｡
‫つまり､ ここでは2つの異なるコピーラインをコピーしていますが､ これを1つのラインにすることができるのです｡
‫実際にコピーと言って､ CRTへのパス､ そしてそのパスがそのキーにたどり着いたのでしょう｡
‫Kay Kay you whyとその2つのファイルを持って､ SSLディレクトリのパスを入れてください｡
‫ですから､ 同じディレクトリにコピーするのであれば､ 複数のファイルを一度にコピーすることができますので､
‫少し楽になります｡
‫複雑でない限り､ 線は少ないほうがいいのです｡
‫そうですね｡
‫Apacheの標準的な設定もありますしね｡
‫どの程度かわからない｡
‫そうですね｡
‫これらは､ 実はこれらは良いことなのです｡
‫Cubanでもswarmでも､
‫オーケストレーターを使う場合､ 標準の設定ファイルを上書きする必要がありますが､
‫Config Mapというコミュニティを使って､
‫実行時に設定ファイルをマウントすることができるので､ 設定をハードコーディングする必要はありません｡
‫理想的なのは､ イメージにSSLをハードコーディングしないことです｡ カスタムSSLを使用する場合は､
‫オーケストレーターまたはDockerにそれを保存して､ 実行時にそれらをマウントすることです｡
‫この2つを1行にまとめることもできますし､
‫このうちのいくつかを1行にまとめることもできます｡
‫このディレクトリにあるすべてのX個の小さなファイルをコピーして､
‫そこに4つすべてをコピーすることもできます｡
‫わかりました｡
‫そして､ 作業ディレクトリに変更を実行する別のコピーがあって､ エントリーポイントができあがります｡
‫今､ 典型的なのは､ CRM Dを持っていないことです｡
‫ということは､ このルートイメージからCRM Dを使っているのだと思いますが､ それは全く問題ありません｡
‫別に悪いことじゃないんだけどね｡
‫しかし､ その際に課題となるのは､ 私の画像を使用する人たちが､ もし私のチームがあったとしても､ どうやってDに会いに行けばいいのか分からないということです｡
‫というのも､ 彼らはこれを受け取ってレポのようなものを見て､ もしDockerにそれほど精通していなければ､
‫「ああ､ このDockerファイルを探さなきゃいけないんだ」と気づかないでしょうから｡
‫その中から､ あるいは履歴を使って､ 歴史と時間をさかのぼって､ そのCMTを見つけるのです｡
‫このDockerファイルを見ている人のために､ コメントとして書き込むこともできますが､
‫CMTのエントリポイントは､ このDockerイメージが何をするのかにとって非常に重要なので､
‫以前のイメージと繰り返しになるかもしれませんが､ それらを追加することが多いですね｡
‫繰り返しますが､ これらはすべてメタデータに過ぎないので､ 他のファイルの変更や実行コマンドに比べて､ ビルドに実時間や肥大化をもたらすことはありません｡
‫しかし､ それ以外は､ あなたが多くの時間を費やした素晴らしい品質の本番用Dockerファイルのように見えます｡
‫しかし､ 全体的には､ これらの多くを組み合わせて､ イメージ内の多くのスペースと多くの肥大化を節約するものを得ることができますし､
‫新しいものをインストールしようとすると､ 古いアプリがキャッシュされるというアップデート問題を回避できます｡
‫このインストールコマンドの中で､ それぞれのバージョンを指定することができるんです｡
‫実際のアプリで使用するApacheは､ アプリを管理するためのユーティリティであり､ 実稼働アプリで使用するようなものではありません｡
‫そうですね｡
‫しかし､ このライブアパッチダウン私は間違いなくこのバグとHPに噛まれたので､
‫モンゴDをバージョンアップします｡ B. ドライバとHPが私のイメージの中でバージョンを変えてしまい､
‫それがバグとなって本番のアプリを壊してしまいました｡
‫私個人としては､ 全部をピン留めして､ 月に1回とか､ セキュリティチームが要求する頻度で更新するようにしています｡
‫でも､ これは立派なDockerファイルです｡
‫本当にありがとうございました｡
‫もちろん､ 常に改善の余地はありますし､ そのためにあなたが現れてくれたのは嬉しいことです｡