ドッカー画像があり、それを平らにしたり縮めたりして、サイズを小さくするとします。これは、ランタイムアーチファクトのために有益です。そのため、ストレージやプッシュ/プルに必要なリソースを最小限に抑えることができます。ドッキング・イメージを押しつぶしたり平坦化したりしても、レジストリ・キャッシングに悪影響を及ぼしませんか?
しかし、画像を保存するためにコンテナレジストリの部分で起こる平坦化(単一の押しつぶされたレイヤーを生成する)とレイヤー再利用の間にトレードオフがあるのだろうかと思います。
ここでは例を示します。通常の古いDockerイメージである複数のレイヤーを持つイメージがあり、サイズは500 MBであるとします。圧縮または平滑化を使用して、250 MBのサイズの単一のレイヤーに圧縮します。
ここで画像を変更してバージョン2を作成する必要があるとしましょう。バージョン2はコンテナの後期レイヤーでの微妙な変更です。CMD
命令の直前に設定ファイルの名前を変更することがありますか何か。
拡張されたレイヤーをレジストリにプッシュした場合、この新しいイメージをプッシュすると、異なる最終レイヤーのみがレジストリのキャッシュに格納される必要があります。サイズ(最初のイメージと新しいバージョン2イメージを一緒にする)は、変更された最後のレイヤーに応じて、550 MBなどとなります。
一方、それを平坦化した場合、新しいバージョン2イメージは、元のコンテナと共通の履歴を持たない全く新しい単層イメージに過ぎません。 ローカル Dockerインスタンスには、平坦化に関連するレイヤの履歴が表示されますが、のレジストリにはそのレイヤ履歴はありません)。
この場合、レジストリに約500 MBを保存する必要があります。画像の最初と2番目のバージョンではそれぞれ250 MBです。
これを3回目にするとすぐに、フラット化された画像の合計のスペースは、実際にはの拡張レイヤーイメージの増分変更のスペースよりも大きくなります。
私はこの仕組みについて何か不足していますか?コンテナを最終的な使用先に出荷する前に、フラット化を実行したいだけですが、ではなく、は通常、レジストリに格納する際にフラット化を行いたいと考えています。
ベースイメージが非常に大きく、平坦化がそれほど大きなサイズ縮小をもたらす場合がありますが、一般的なケースを理解しようとしていますが、レイヤのこの特定の側面について説明するドキュメントは見つかりません平らにする。