首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用DinD和BuildKit构建码头形象

用DinD和BuildKit构建码头形象
EN

DevOps用户
提问于 2020-03-26 17:47:37
回答 2查看 3.6K关注 0票数 4

我使用GitLab的管道来描述部署过程。作为其中的一部分,我建立了码头形象。为此,我使用Docker构建这些映像(即下载Docker-in-Docker映像并在其内部完成所有Docker-东西)。

我还设置使用特性。其中之一是--cache-from选项(它减少了构建时间)。这似乎不适用于Docker-in-Docker (至少对我来说)。

下面是管道的配置:

代码语言:javascript
复制
stages:
  - build
  - purge
  - deploy

variables:
  DOCKER_HOST: tcp://localhost:2375
  DOCKER_TLS_CERTDIR: ""
  DOCKER_BUILDKIT: 1
  LATEST: ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}:${CI_COMMIT_REF_SLUG}
  IMAGE_COMMIT_TAG: ${CI_REGISTRY_IMAGE}/${CI_PROJECT_NAME}:${CI_COMMIT_SHORT_SHA}

services:
  - docker:dind

build:
    stage: build
    image: docker:stable
    script:
        - docker login -u gitlab-ci-token -p ${CI_BUILD_TOKEN} ${CI_REGISTRY}
        - docker build --cache-from ${LATEST} -t ${LATEST} -t ${IMAGE_COMMIT_TAG} .
        - docker push ${IMAGE_COMMIT_TAG}
        - docker push ${LATEST}

日志输出显示BuildKit正在运行,但是使用'CACHE‘一点也不重要。而且,它的结果--“建造”阶段需要更多的时间。

拜托,你的建议,想法?

EN

回答 2

DevOps用户

发布于 2020-03-27 00:07:46

在外部注册表中使用buildkit缓存层需要额外的一两步,这取决于您想要如何缓存您的层。简单的选择是包含一个支持内联缓存的构建arg:

代码语言:javascript
复制
docker build --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from ${LATEST} -t ${LATEST} -t ${IMAGE_COMMIT_TAG} .

请注意,内联缓存只缓存图像中推送的目标阶段的层,因此多阶段构建中的其他状态需要单独构建和缓存,或者在没有缓存的情况下重建,这两者都不是理想的。

您还可以将缓存缓存到本地文件,或者将缓存推送到不同的注册表映像,而不是将其与您推送的图像内联。不幸的是,标准的docker build CLI不能访问所有的buildkit标志来启用它。相反,您可以直接安装buildkit或使用buildx,这是一个用于管理buildkit的CLI插件。您可以单独安装buildx,但在当前版本中,可以使用export DOCKER_CLI_EXPERIMENTAL=enabled启用的实验性CLI选项。我相信您需要为所有的buildkit选项创建一个基于容器的构建器,这可以通过以下方法完成:

代码语言:javascript
复制
docker buildx create --use --driver docker-container --name local ${DOCKER_HOST:-unix:///var/run/docker.sock}

那么,您应该能够运行以下内容:

代码语言:javascript
复制
docker buildx build --cache-from ${IMG_CACHE} --cache-to ${IMG_CACHE} -t ${LATEST} -t ${IMAGE_COMMIT_TAG} .

有关buildkit缓存的更多文档,请访问:https://github.com/moby/buildkit#export-cache

有关buildx的更多详细信息,请访问:https://github.com/docker/buildx

票数 4
EN

DevOps用户

发布于 2020-04-21 18:03:52

虽然这不是我的问题的直接答案,但这是一个目标,我的目标是。

我测试了几个映像构建工具,并在“Makisu”上停止了构建Docker映像的工作。对我来说真的很好。

详细信息在这里:https://github.com/uber/makisu

这里(从“使用Makisu”开始):https://findwork.dev/blog/6-ways-speed-your-ci/

票数 0
EN
页面原文内容由DevOps提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://devops.stackexchange.com/questions/11175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档