コンテンツへスキップ
Latchkey
ドキュメントメニュー

Docker レイヤーキャッシュ

Latchkey Docker Cache Build は docker buildx をレジストリバックのレイヤーキャッシュでラップします。そのため、繰り返しのイメージビルドでは、エフェメラルなランナーをまたいで変更されていないすべてのレイヤーを再利用します。

すべての Latchkey ランナーは、新しく分離されたインスタンスです。これはセキュリティには良い一方、ランナーとともに消えてしまう Docker のローカルレイヤーキャッシュには不都合です。Latchkey Docker Cache Build は、Latchkey が組織向けに管理するプライベートコンテナレジストリに保存されたレイヤーキャッシュでこれを解決します。以前のビルドと一致するレイヤーが再利用され、更新されたキャッシュは次回の実行のために書き戻されます。

ワークフローに追加する#

.github/workflows/build.yml
jobs:
  build:
    runs-on: latchkey-medium
    steps:
      - uses: actions/checkout@v4
      - uses: latchkey-dev/docker-cache-action@v1
        with:
          context: .
          tags: myapp:latest
          push: true

これで統合は完了です。任意の Docker ビルドに渡すのと同じ入力を指定するだけで、Latchkey がレジストリ、認証情報、キャッシュの接続を処理します。デフォルトでは、この action は cache-mode: max を使用し、マルチステージビルドの中間レイヤーを含むすべてのレイヤーをキャッシュします。push: false の単一プラットフォームビルドでは、ビルドされたイメージをランナーのローカル Docker デーモンにロードします。

入力と出力#

入力デフォルト動作
tags必須ビルドされたイメージのタグ
context.ビルドコンテキストのパス
dockerfileDockerfileDockerfile へのパス
pushfalseビルドされたイメージをプッシュする
build-argsなしビルド引数。シークレットを含む可能性があるため、値はログでマスクされます
targetなしマルチステージビルドのターゲットステージ
platformsなしビルドのターゲットプラットフォーム
cache-modemaxキャッシュのスコープ: min または max (max はマルチステージの中間レイヤーを含むすべてのレイヤーをキャッシュします)
cache-tagcacheレイヤーキャッシュに使われるレジストリタグ
extra-cache-from / extra-cache-toなしビルドに渡される追加のキャッシュソースおよびキャッシュ先
出力意味
cache-configuredビルドでレジストリレイヤーキャッシュが有効だった場合は true、それ以外は false
image-digestビルドされたイメージのダイジェスト

どのランナーでも安全#

  • Latchkey 以外のランナー (たとえば GitHub ホストランナー) では、action はキャッシュレジストリが利用できないことを検出し、キャッシュフラグなしで通常どおりビルドします。1 つのワークフローファイルがランナーの種類をまたいでポータブルなまま保たれます。
  • リポジトリの最初のビルドではキャッシュは空です。その最初の実行でキャッシュ付きビルドが失敗した場合、action は自動的にキャッシュなしで再試行します。最初の実行がキャッシュのせいで壊れることはありません。
  • build-arg の値はログでマスクされるため、ビルド引数として渡されたシークレットがジョブ出力に漏れることはありません。
  • キャッシュは組織ごとに分離されます。