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

Dav*_*ave 6 docker gitlab-ci

我正在学习 GitLab-ci,有一些事情让我困惑。这是我在谷歌搜索时发现的一个构建工作:

.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: []
Run Code Online (Sandbox Code Playgroud)

为什么在建筑物图像被拉动并管道化为真实之前?我想这与缓存有关,但我不确定为什么要使用管道来实现。

另外,--ssh default 和 BUILDKIT 的目的是什么?

syt*_*ech 5

您应该拉取图像以利用缓存的图层,这样就不会不必要地再次构建图层。这会带来更快的构建速度、更快的更新(人们拉取新镜像时)以及更有效地利用容器注册表中的存储。

您可以在 GitLab 文档中阅读更多相关内容:使用 Docker 层缓存使 Docker-in-Docker 构建更快


对于您的其他问题:

关于--ssh default:请参阅有关此的 docker 文档

简而言之,关于 BUILDKIT,可以实现更快、更高效的构建。