为什么在gitlab-ci中构建docker镜像前要先拉取它?

5

我正在学习GitLab-ci,有些事情让我感到困惑。以下是我在Google上找到的一个构建作业:

.build:
  before_script:
    - echo "$CI_REGISTRY_PASSWORD" | docker login --username $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
  script:
    - docker pull $CI_REGISTRY_IMAGE/$IMAGE_NAME:latest || true
    - docker build --ssh default --cache-from $CI_REGISTRY_IMAGE/$IMAGE_NAME:latest --build-arg BUILDKIT_INLINE_CACHE=1 --tag $CI_REGISTRY_IMAGE/$IMAGE_NAME:latest --tag $CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_COMMIT_SHORT_SHA .
    - docker push $CI_REGISTRY_IMAGE/$IMAGE_NAME:$CI_COMMIT_SHORT_SHA
    - docker push $CI_REGISTRY_IMAGE/$IMAGE_NAME:latest
  stage: build
  image: docker:stable
  services:
    - docker:dind
  needs: []

为什么在构建镜像之前要 pull 并将 pipe 设置为 true?我想这可能与缓存有关,但我不确定为什么要使用 pipe true。

--ssh default 和 BUILDKIT 的目的是什么?

1个回答

4
为了利用缓存层,您应该拉取图像,以避免不必要地重新构建层。这将导致更快的构建、为拉取新图像的人提供更快的更新以及在容器注册表中更有效的存储使用。
您可以在GitLab文档中阅读更多相关内容:使用 Docker 层缓存让 Docker-in-Docker 构建更快
关于您的其他问题:
关于--ssh default:请参阅Docker文档
关于BUILDKIT,简而言之,它可以实现更快速和更高效的构建。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接