Dockerfile の先頭に ARG を置くとレイヤーの再利用が妨げられますか? 質問する

Dockerfile の先頭に ARG を置くとレイヤーの再利用が妨げられますか? 質問する

Dockerfile の先頭で宣言された ARG が変更されたが、その値が Dockerfile の末尾近くの RUN コマンドにのみ使用されている場合、Docker はイメージ全体を最初から再構築しますか、それとも関連する RUN コマンドの直前の中間イメージを再利用できますか?

レイヤー化をより有効に活用するには、ARG 宣言を Dockerfile の先頭に配置する必要がありますか、それとも ARG 宣言を使用するセクションの直前に配置する必要がありますか?

私の質問の一部は、ARG ディレクティブが中間層を生成するかどうかということだと思います。

ベストアンサー1

ARG一般的には、ファイルの先頭ではなく、使用される直前に配置する方が適切です。

より正確に言うと、宣言後にすべての行のキャッシュが無効になるわけではありません。値と をARG使用する行のみが無効になります。詳細は docker のドキュメントに記載されています。ARGRUN

ビルドキャッシュへの影響

ARGENV変数は、変数のようにビルドされたイメージに保持されません。ただし、ARG変数はビルド キャッシュに同様の影響を与えます。Dockerfile で、以前のビルドと値が異なる ARG 変数を定義した場合、定義時ではなく最初の使用時に「キャッシュ ミス」が発生します。特に、RUN命令に続くすべての命令は、変数を暗黙的に (環境変数として)ARG使用するためARG、キャッシュ ミスが発生する可能性があります。Dockerfile にARG一致するステートメントがない限り、すべての定義済み変数はキャッシュから除外されます。ARG

レイヤー キャッシュを最適化された状態に保つには、引数を必要としない のARG下にを移動する必要があります。RUN

詳細情報:

おすすめ記事