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

如何在GitLab CI中利用缓存优化Docker镜像构建(GitLab Runner场景)

在GitLab Runner中复用Docker镜像缓存的解决方案

我完全懂你的困扰——本地构建时能顺利用上旧镜像的缓存层提速,但GitLab Runner每次都要从头跑完Dockerfile的所有步骤,既耗时又浪费资源。下面给你几个实用的方案,帮你在CI/CD流程里把Docker缓存用起来:

方法一:用docker build --cache-from指定缓存镜像

这是最直接的方案,你可以明确告诉Docker要从已有的旧镜像中复用缓存层:

  • 先在job里拉取之前的镜像(如果已经推送到镜像仓库的话),加|| true避免第一次构建时镜像不存在导致job失败:
    docker pull registry.example.com/my_image:latest || true
    
  • 然后执行构建命令,通过--cache-from指定要复用的缓存源:
    docker build --cache-from registry.example.com/my_image:latest -t registry.example.com/my_image:latest .
    
  • 最后记得把新构建好的镜像推回仓库,方便下一次job继续复用:
    docker push registry.example.com/my_image:latest
    

方法二:给GitLab Runner配置Docker本地缓存(Docker Executor场景)

如果你的GitLab Runner用的是Docker executor,可以通过挂载本地卷来保存Docker的构建缓存,让Runner每次运行job时都能复用之前的缓存层:

  1. 修改Runner的config.toml配置文件,在[[runners]]下的[runners.docker]块中添加:
    volumes = ["/cache", "/var/lib/docker"]
    
    这里/var/lib/docker挂载的是Docker的本地存储目录,包含了所有镜像层缓存。注意这种方式更适合专属Runner,共享Runner用它可能会出现缓存污染的问题。
  2. 重启GitLab Runner服务让配置生效:
    gitlab-runner restart
    

方法三:用GitLab CI的缓存机制保存Docker镜像层

你也可以把Docker的缓存层打包成压缩文件,借助GitLab的缓存功能存储,每次job开始时解压复用:

  • 在.gitlab-ci.yml里添加缓存和构建脚本:
    cache:
      key: docker-cache
      paths:
        - docker-cache.tar.gz
    
    stages:
      - build
    
    build_image:
      stage: build
      script:
        # 解压缓存(如果存在的话)
        - if [ -f docker-cache.tar.gz ]; then docker load -i docker-cache.tar.gz; fi
        # 构建镜像
        - docker build -t my_image .
        # 保存当前镜像作为下次缓存
        - docker save my_image -o docker-cache.tar.gz
        # 推送镜像到仓库(可选)
        - docker push my_image
    
    这种方式不用修改Runner配置,但缓存文件可能会比较大,要注意GitLab缓存空间的占用情况。

额外注意点

  • 如果你的Runner用的是Docker-in-Docker(DinD)模式,记得启用Docker的高效缓存驱动,比如在DinD服务中设置DOCKER_DRIVER=overlay2,同时配合--cache-from使用效果更好。
  • 优化你的Dockerfile结构:把变化频率低的步骤(比如安装系统依赖、语言包)放在前面,变化频繁的步骤(比如复制项目代码)放在后面,这样能大幅提升缓存命中率。

内容的提问来源于stack exchange,提问作者Anyi Chen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 10:22:39