KDOC 571: イメージレジストリにキャッシュを保存してビルドを高速化する
この文書のステータス
- 作成
- 2026-06-18 貴島
- レビュー
- 2026-06-21 貴島
概要
エフェメラルなCIランナーでDockerイメージをビルドするとき、ビルドインスタンスはビルドごとに独立して作成され、自動ではキャッシュが残らない。そのため、キャッシュを外部に保存する必要がある。
1つの方法として、Dockerイメージとしてレジストリにキャッシュを保存する方法がある。
このときのポイントは、buildxの --cache-to=type=registry,ref=...,mode=max オプションによって中間レイヤーも保存することである。通常のDockerイメージ(mode=min)は最終ステージのレイヤーだけをキャッシュ保存しており、前段ステージが1行でも変わると中間ステージのキャッシュを利用できずすべてやり直しになってしまう。中間レイヤーを保存していると、変更が起きたビルドステージ以降だけの実行ですむ。
キャッシュはpull/pushですべて転送されるわけではないのでオーバーヘッドは少なくなる傾向がある。すでにレジストリに存在するレイヤーはスキップされる。
関連
抽象。
- 使い捨ての環境では蓄積が残らないので、外に保存して引き継ぐ
- 最終結果だけでなく途中結果も残すと、変わった箇所以降のやり直しで済む
関連。
- Docker Buildx | Docker ドキュメント
- 類似: KDOC 183: RUN –mount=type=cacheでビルド時にツール側のキャッシュを使える。レイヤーキャッシュは内容が変わった層から外れるので、外れたあとのやり直しを別の単位のキャッシュで減らす例