【问题标题】: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 是我不经常更改的构建阶段。

    【讨论】:

      猜你喜欢
      • 2017-07-06
      • 2019-08-05
      • 2021-12-23
      • 1970-01-01
      • 2020-05-11
      • 2019-05-09
      • 2019-10-06
      • 2021-11-30
      • 1970-01-01
      相关资源
      最近更新 更多