You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitHub Actions中缓存Docker依赖镜像与自定义镜像?

缓存Docker镜像加速GitHub Action工作流

针对你的场景,有两种高效方法可以缓存Docker基础镜像,避免每次工作流重复拉取:

方法一:手动导出/导入镜像并使用GitHub缓存

通过将基础镜像导出为tar包,利用actions/cache缓存这些tar包,下次运行时直接导入到Docker中:

# 缓存Docker镜像tar包
- name: Cache Docker images
  id: cache-docker
  uses: actions/cache@v3
  with:
    path: ./docker-image-cache
    # 用Dockerfile哈希做key,确保镜像更新时重新缓存
    key: docker-images-${{ hashFiles('Dockerfile') }}

# 从缓存导入镜像
- name: Load cached images
  if: steps.cache-docker.outputs.cache-hit == 'true'
  run: |
    docker load -i ./docker-image-cache/mcr-aspnet-7.0.tar
    docker load -i ./docker-image-cache/holism-api.tar

# 拉取镜像并保存到缓存目录
- name: Pull and save images
  if: steps.cache-docker.outputs.cache-hit != 'true'
  run: |
    mkdir -p ./docker-image-cache
    docker pull mcr.microsoft.com/dotnet/aspnet:7.0
    docker save -o ./docker-image-cache/mcr-aspnet-7.0.tar mcr.microsoft.com/dotnet/aspnet:7.0
    docker pull holism/api
    docker save -o ./docker-image-cache/holism-api.tar holism/api

# 执行构建
- name: Build production docker
  run: docker build -t custom/image --no-cache --progress=plain

注意:如果你的基础镜像tag固定(比如7.0或latest),可以把tag加入缓存key,避免Dockerfile未变更但镜像更新时缓存失效。

方法二:使用docker/build-push-action自动缓存

官方的docker/build-push-action集成了GitHub缓存功能,无需手动处理镜像拉取和导出,直接在构建时复用缓存:

- name: Build production docker
  uses: docker/build-push-action@v5
  with:
    context: .
    tags: custom/image
    no-cache: true # 若不需要缓存自身构建层则保留,否则移除
    cache-from: type=gha
    cache-to: type=gha,mode=max

这个方法会自动将构建过程中的所有镜像层(包括基础镜像)缓存到GitHub的缓存服务中,下次构建时直接复用,大幅减少拉取时间。

关键注意事项

  • GitHub缓存有10GB仓库存储上限,且未访问的缓存会在30天后自动删除,合理设置缓存key避免冗余缓存。
  • 如果使用--no-cache构建参数,仅会禁用自身构建层的缓存,基础镜像的缓存依然生效。

内容的提问来源于stack exchange,提问作者Ali EXE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 22:07:50