0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「RUN --mount=type=cache, target=/root/.npm」を持つDockerfileをGithub Actionsで実行するとき

Last updated at Posted at 2025-02-10

RUN --mount=type=cache, target=/root/.npmってなにしてるの?

  • Docker BuildKit--mount=type=cacheオプションを使用し、/root/.npmディレクトリを永続的なキャッシュストレージとして指定しています
  • これにより、ビルド間でnpmのダウンロード済みパッケージが再利用可能になり、package.jsonに変更がない限り再ダウンロード不要になります

そもそもDocker BuildKitって?

  • Docker v23.0以降でデフォルトとなった機能
  • 以下の特徴を持っている
    • Dockerfile内の命令を依存関係に基づいて並列実行できる
    • ビルドキャッシュが最適化され、変更がない部分は再実行せずに済む ... and more

じゃあ、そのキャッシュはどこに保存されるの?

  • 直接ホストの/root/.npmには存在せず、BuildKitが管理する内部キャッシュ領域に保持される
  • 具体的には、Dockerのデータディレクトリ内(多くの場合、var/lib/docker/buildkit配下)

Github Actionsのワークフローで実行しても、終了時にキャッシュが削除されちゃうんじゃ?

  • Github Actionsは各ワークフロー実行時に用意される一時的な環境であり、ワークフロー終了時または、ジョブ終了時にその環境が破棄される
  • 外部キャッシュとしてエクスポートする仕組みを導入しない限り、そのキャッシュも次回のワークフロー実行時には利用できない

じゃあ、Github Actionsでどうやってキャッシュをエクスポートするの?

Dcoker公式のactionsを使おう!(docker/build-push-action@v6

使用例
-name: 'イメージのビルド&プッシュ'
 uses: docker/build-push-action@v6
 with:
   push: true
   tags: ここにタグを入力
   cache-from: type=gha
   cache-to: type=gha, mode=max

解説

docker/build-push-action@v6

  • BuildKitを活用した高度なDockerイメージのビルド・プッシュ機能が使える

push

  • 機能: ビルド完了後のレジストリへのプッシュ制御
  • 選択肢:
    • true: 常にプッシュ実行
    • false: ビルドのみ実行
    • 条件式: ${{ github.event_name != 'pull_request' }}(PR時はプッシュしない)

cache-from/cache-to (オプション)

  • 機能: ビルドキャッシュの管理
タイプ 説明
gha GitHub Actionsキャッシュ
registry レジストリをキャッシュストア
inline イメージにキャッシュ埋め込み
local ローカルファイルキャッシュ

cache-from:type=gha

以前エクスポートしたキャッシュが読み込まれ、変更ないレイヤーは再ビルドされずに済む

cache-to:type=gha, mode-max

ビルドした各レイヤーのキャッシュがGithub ActionsのキャッシュAPIを経由してリモートに保存される

  • mode
    • min (デフォルト): 最終レイヤーのみキャッシュ
    • max: 中間レイヤーを含む全キャッシュ保存
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?