【问题标题】:Is there a way to speed up docker build when using docker build in dind inside a gitlab-ci pipeline?在 gitlab-ci 管道中使用 docker build ind 时,有没有办法加快 docker build 的速度?
【发布时间】:2022-10-15 19:35:02
【问题描述】:
在 gitlab-ci 管道中,我使用 docker-in-docker dind 来构建和推送 docker 镜像。
每次作业开始时,构建过程都会从头开始,尽管所做的更改仅影响最后一层或最后几层。
众所周知,Docker 可以使用缓存层来加快构建过程。例如,当直接在 localhost 上运行 docker 时会发生这种情况。
使用dind构建docker时,gitlab-ci是否默认使用docker缓存?如果没有,有没有办法告诉 gitlab-ci 保留/使用缓存层?
【问题讨论】:
标签:
docker
gitlab-ci
docker-in-docker
gitlab-ci.yml
【解决方案1】:
您可以使用多阶段构建并将间接图像推送到图像存储库。在每次构建之前,您可以提取该图像并将其用作缓存。
我是这样做的,它对我的情况有所帮助:
build:
stage: build
interruptible: true
script:
- docker pull $REGISTRY_PATH/<target-image>:runtime-image || true
- docker pull $REGISTRY_PATH/<target-image>:$CI_COMMIT_SHORT_SHA || true
- docker build --target runtime-image --cache-from $REGISTRY_PATH/<target-image>:runtime-image -t $REGISTRY_PATH/<target-image>:runtime-image apps/my-apps
- docker build --cache-from $REGISTRY_PATH/<target-image>:runtime-image --cache-from $REGISTRY_PATH/<target-image>:$CI_COMMIT_SHORT_SHA -t <target-image>:$CI_COMMIT_SHORT_SHA apps/my-apps
- docker tag <target-image>:$CI_COMMIT_SHORT_SHA $REGISTRY_PATH/<target-image>:$CI_COMMIT_SHORT_SHA
- docker push $REGISTRY_PATH/<target-image>:$CI_COMMIT_SHORT_SHA
- docker push $REGISTRY_PATH/<target-image>:runtime-image
image: docker:20.10
services:
- docker:20.10-dind
runtime-image 是我不经常更改的构建阶段。