首页/开发/CI/CD 与发布速查/GitLab CI 内构建镜像(DinD)
工具链要点63 条

GitLab CI 内构建镜像(DinD)

在流水线里构建容器镜像:docker:dind 服务方式需要特权与 TLS 配置;也可选择 rootless 或免守护进程的构建工具。

CI/CD 与发布速查开发更新于 2026-10-12
常见方式docker:dind 服务 + DOCKER_TLS_CERTDIR
要求通常需要特权 Runner 或相应安全配置
替代rootless 构建、BuildKit、kaniko 等免特权方案
缓存dind 环境不保留本地镜像,用 registry 或缓存加速

DinD 模板

DinD 模板
build-image:
  image: docker:27
  services:
    - docker:27-dind
  variables:
    DOCKER_TLS_CERTDIR: "/certs"
  script:
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
    - docker build -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA" .
    - docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA"
特权构建的隔离边界更弱:只在可信网络与专用 Runner 上启用,并限制可见范围。

易错点

  • 每次构建都重新拉取基础镜像:没有缓存策略时构建时长显著增加
  • 特权 Runner 对所有分支可用:fork 或不可信代码可获得高权限环境

数据来源与参考

  • GitLab Docs《Use Docker to build Docker images》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌