我使用GitLab的管道来描述部署过程。作为其中的一部分,我建立了码头形象。为此,我使用Docker构建这些映像(即下载Docker-in-Docker映像并在其内部完成所有Docker-东西)。
我还设置使用特性。其中之一是--cache-from选项(它减少了构建时间)。这似乎不适用于Docker-in-Docker (至少对我来说)。
下面是管道的配置:
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‘一点也不重要。而且,它的结果--“建造”阶段需要更多的时间。
拜托,你的建议,想法?
发布于 2020-03-27 00:07:46
在外部注册表中使用buildkit缓存层需要额外的一两步,这取决于您想要如何缓存您的层。简单的选择是包含一个支持内联缓存的构建arg:
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选项创建一个基于容器的构建器,这可以通过以下方法完成:
docker buildx create --use --driver docker-container --name local ${DOCKER_HOST:-unix:///var/run/docker.sock}那么,您应该能够运行以下内容:
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
发布于 2020-04-21 18:03:52
虽然这不是我的问题的直接答案,但这是一个目标,我的目标是。
我测试了几个映像构建工具,并在“Makisu”上停止了构建Docker映像的工作。对我来说真的很好。
详细信息在这里:https://github.com/uber/makisu
这里(从“使用Makisu”开始):https://findwork.dev/blog/6-ways-speed-your-ci/
https://devops.stackexchange.com/questions/11175
复制相似问题