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

如何为容器内运行的作业缓存容器镜像

GitHub Actions 缓存容器镜像加速作业运行

方法一:用actions/cache缓存Docker镜像层

GitHub Actions默认会尝试缓存Docker镜像,但手动配置actions/cache可以更稳定地复用镜像层。通过缓存Docker的存储目录,让后续作业直接复用已下载的镜像:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: 缓存Docker镜像层
        uses: actions/cache@v3
        with:
          path: /var/lib/docker
          key: docker-texlive-${{ hashFiles('**/Dockerfile') }}
          restore-keys: docker-texlive-
      - name: 在容器内执行作业
        uses: docker://texlive/texlive:latest
        with:
          entrypoint: /bin/bash
          args: -c "你的具体作业命令"
  • path指定Docker存储镜像层的目录(Ubuntu Runner默认是/var/lib/docker)
  • key结合镜像相关文件的哈希值,确保镜像更新时生成新缓存
  • restore-keys用于匹配前缀缓存,当精确key不存在时复用旧缓存

方法二:托管自定义镜像到GitHub Packages

如果官方镜像体积大,可先拉取官方镜像做自定义调整,推送到GitHub Packages后,作业直接拉取该镜像——GitHub Actions拉取同平台的Packages镜像速度更快:

jobs:
  build:
    runs-on: ubuntu-latest
    container:
      image: ghcr.io/你的GitHub用户名/texlive-custom:latest
      credentials:
        username: ${{ github.actor }}
        password: ${{ secrets.GITHUB_TOKEN }}

需要提前完成:

  1. 本地基于texlive/texlive:latest构建自定义镜像
  2. 推送镜像到自己的GitHub Packages仓库

方法三:用Docker Buildx缓存构建层(自定义镜像场景)

如果需要自行构建镜像,用Docker Buildx将构建层缓存到GitHub Actions缓存中,避免重复构建:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: 初始化Docker Buildx
        uses: docker/setup-buildx-action@v2
      - name: 缓存Buildx构建层
        uses: actions/cache@v3
        with:
          path: /tmp/.buildx-cache
          key: buildx-texlive-${{ github.sha }}
          restore-keys: buildx-texlive-
      - name: 构建并加载镜像
        uses: docker/build-push-action@v4
        with:
          context: .
          push: false
          load: true
          tags: texlive-custom:latest
          cache-from: type=local,src=/tmp/.buildx-cache
          cache-to: type=local,dest=/tmp/.buildx-cache,mode=max
      - name: 在容器内执行作业
        run: docker run texlive-custom:latest 你的作业命令

注意事项

  • 不同系统的Runner,Docker存储目录不同:Windows Runner是C:\ProgramData\Docker,Mac Runner是/Users/runner/.docker
  • 缓存key要根据镜像内容调整,比如镜像依赖文件更新时,哈希值变化会触发新缓存生成
  • 使用GitHub Packages时,确保GITHUB_TOKEN拥有读取Packages仓库的权限

内容的提问来源于stack exchange,提问作者Sujal Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:32:40