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

GitLab CI中使用DinD构建Docker镜像如何启用缓存加速?

GitLab CI DinD 构建Docker镜像的缓存配置

默认缓存状态

GitLab CI 使用 DinD(Docker-in-Docker)构建镜像时,默认不会保留Docker构建缓存。因为每次CI任务都会启动全新的DinD容器,任务结束后容器会被销毁,所有临时生成的镜像层缓存也会随之丢失,所以哪怕只修改了最后几层镜像层,也得从头执行完整构建流程。

配置缓存的几种实用方案

1. 从远程镜像仓库拉取缓存层(推荐)

利用Docker的--cache-from参数,直接从已推送到镜像仓库的镜像拉取缓存层,这是最可靠且通用的方案,无需依赖CI本地缓存。示例CI配置:

build-image:
  image: docker:latest
  services:
    - docker:dind
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    # 首次构建时拉不到latest镜像不中断任务
    - docker pull $CI_REGISTRY_IMAGE:latest || true
    # 构建时指定远程镜像作为缓存源
    - docker build --cache-from $CI_REGISTRY_IMAGE:latest -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA -t $CI_REGISTRY_IMAGE:latest .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
    - docker push $CI_REGISTRY_IMAGE:latest

2. 挂载GitLab CI全局缓存目录

把DinD内部的Docker缓存目录挂载到GitLab CI的全局缓存中,让缓存跨任务保留。示例配置:

build-image:
  image: docker:latest
  services:
    - docker:dind
  variables:
    DOCKER_DRIVER: overlay2
    DOCKER_CACHE_DIR: /var/lib/docker
  cache:
    key: $CI_COMMIT_REF_SLUG
    paths:
      - $DOCKER_CACHE_DIR
    # 可选:设置缓存过期天数,避免占用过多空间
    policy: pull-push
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA -t $CI_REGISTRY_IMAGE:latest .
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
    - docker push $CI_REGISTRY_IMAGE:latest

注意:这种方法缓存体积可能较大,建议配合GitLab的缓存清理策略使用。

3. 专属Runner本地缓存(仅私有Runner可用)

如果使用专属GitLab Runner,可以配置Runner将DinD的缓存目录挂载到宿主机本地,让缓存保留在Runner宿主机上。修改Runner的config.toml配置文件:

[[runners]]
  name = "DinD Cache Runner"
  url = "https://your-gitlab-instance.com/"
  token = "your-runner-token"
  executor = "docker"
  [runners.docker]
    image = "docker:latest"
    privileged = true
    # 挂载宿主机的Docker缓存目录到DinD容器内
    volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/var/lib/docker:/var/lib/docker", "/cache"]
  [runners.cache]
    Type = "local"
    Path = "/cache"

局限性:缓存仅能在该专属Runner上复用,不适合共享Runner环境。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:20:45