web-dev-qa-db-ja.com

マルチステージのDockerビルドをキャッシュすることは可能ですか?

私は最近、マルチステージのDockerビルドに切り替えましたが、中間ビルドにキャッシングがないようです。これがドッカーの制限なのか、単に利用できないのか、何か間違っているのかはわかりません。

私は最終ビルドをプルダウンし、新しいビルドの開始時に--cache-fromを実行していますが、常に完全ビルドが実行されます。

17
Matthew Goslett

これはdocker自体の制限のようであり、この問題の下で説明されています https://github.com/moby/moby/issues/34715

回避策は次のとおりです。

  1. --targetを使用して中間ステージを構築する
  2. 中間イメージをレジストリにプッシュする
  3. --targetを使用して最終イメージを作成し、複数の--cache-fromパスを使用して、すべての中間イメージと最終イメージをリストします。
  4. 最終的なイメージをレジストリにプッシュする
  5. 以降のビルドでは、最初に中間イメージと最終イメージをレジストリから取得します
21
Matthew Goslett