启用泊坞窗层缓存

泊坞窗层高速缓存(DLC)可以减少对CircleCI泊坞窗图像生成时间。DLC可在性能和自定义使用计划(每作业运行200个学分)和上安装CircleCI服务器。此文件提供DLC的以下各节的概述:

概观

泊坞窗层高速缓存(DLC)是一个伟大的功能,如果使用建筑泊坞图片是您的CI / CD过程中的常规部分。DLC将节省您的工作中创建的图像层,而不是影响实际的容器用来运行作业。

DLC缓存在你CircleCI工作内置任何泊坞窗图像的各个层,然后再使用后续CircleCI运行不变图像层,而不是每次重建整个图像。总之,从少你Dockerfiles变化承诺提交,更快的图像建设的步骤将会运行。

泊坞窗层高速缓存可以使用两种执行者远程泊坞窗环境setup_remote_docker)。

限制

请注意的是高使用率排比(也就是30岁或以上的平行)在您的配置可能会导致问题与DLC,特别是拉动一个陈旧的缓存或没有缓存。例如:

  • 如果只有一个工作流运行,然而,有一个以上的工作流程将导致缓存未命中30并行单一作业会工作。
  • 任何工作排比超出30将经历高速缓存未命中,无论工作流程乳宁的数量。

如果您在使用缓存缺失或需要高并行的问题,考虑尝试实验码头工人的注册表图像缓存宝珠。

注意:DLC有没有上用作构建容器的图像泊坞效果。也就是说,用于集装箱你的作业是用指定的图片使用时,钥匙搬运工人执行者并出现在旋转上你的工作环境页一步。

DLC是唯一有用的创建与码头工人建造,码头工人撰写或类似搬运工命令)自己的码头工人图像时,它不会降低挂钟时间全部建立需要加速旋转的初始环境。

版本:2组的工作:构建:泊坞窗:#DLC什么也不做在这里,它的缓存取决于图像层的共性。- 图片:circleci /节点:9.8.0  - 拉伸 - 浏览器身份验证:用户名:mydockerhub用户口令:$ DOCKERHUB_PASSWORD#背景/项目UI ENV-VAR参考步骤: - 结帐 -  setup_remote_docker:docker_layer_caching:真#DLC将明确高速缓存层这里,尽量避免重建。- 运行:泊坞窗构建。

如何DLC作品

DLC通过创建一个外部卷并将其附加到该执行实例的缓存泊坞图像层和远程泊坞作业。卷附着的方式,使得泊坞节省附加的卷上的图像层。在未来的工作当工作完成后,体积是断开,重新使用。这意味着,在DLC之前的工作中下载的层将是使用相同的DLC卷接下来的工作提供。

一种DLC体积只能连接到一个或在远程实时码头工人的工作。如果一个DLC量存在,而在要求DLC两个作业启动,CircleCI将创建一个新的DLC卷并将其连接到第二份工作。从上项目,都将有两个与之相关的DLC卷。这适用于并行作业,以及:如果两个作业并行运行,他们将获得不同的DLC卷。

根据其工作容积在使用上,他们可能最终保存在他们不同的层次。那些不经常使用的卷可能在其上保存旧的层。

该DLC卷后工作不被使用3天删除。

CircleCI将创造一个最大的每个项目50 DLC卷,因此最多50个并发的或每个项目的远程码头工人的工作可以有机会获得DLC。这是考虑到作业的并行性,所以最大的1个职位空缺与50X并行将有机会获得DLC每个项目,或2个就业机会,25X并行,等等。

泊坞窗层缓存

缓存的范围

随着DLC启用,整体在/ var / lib中/泊坞窗被缓存到远程卷,其中还包括在以前的工作中创建的任何自定义网络。

远程泊坞窗环境

要在远程泊坞环境中使用DLC,加docker_layer_caching:真在下面setup_remote_docker在关键的config.yml文件:

-  setup_remote_docker:docker_layer_caching:真正#默认 - 假

建在之前的工作中的每一层都将在远程泊坞环境访问。然而,在某些情况下,你的工作可能在干净的环境中运行,即使配置指定docker_layer_caching:真

如果您运行依赖于同一环境同一项目多的并行作业,他们都将带有远程泊坞环境。泊坞窗层高速缓存保证作业将拥有专属的远程泊坞环境是其他工作无法访问。然而,一些作业可能已经缓存层,有些可能没有缓存层,而不是所有的工作都会有相同的缓存。

注意:此前DLC经启用可重复使用:真键。该可重复使用关键是赞成不赞成docker_layer_caching键。除此之外独家:真选项已被废弃,所有远程泊坞虚拟机现在都被视为排斥。这意味着使用DLC时,乔布斯都保证有一个专属的远程泊坞环境,其他工作无法访问。

机执行人

使用建筑多克尔图像时,泊坞窗层高速缓存还可以减少工作的运行时间执行者。使用DLC与执行人加入docker_layer_caching:真下面您键(就像上面我们):

机:docker_layer_caching:真正#默认 - 假

例子

让我们用下面的Dockerfile说明泊坞窗层高速缓存是如何工作的。这个例子Dockerfile是从适合我们药剂方便图像

Dockerfile

从仙丹:1.6.5#使易非交互式运行回声“APT ::获取::假设,是‘真’;”> /etc/apt/apt.conf.d/90circleci \ &&回波 'DPKG ::选项 “--force-confnew”;'>> /etc/apt/apt.conf.d/90circleci ENV DEBIAN_FRONTEND =非交互式#man目录中缺少一些基本的图像#https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=863199 RUNapt-get的更新\ &&的mkdir -p在/ usr / share / man中/男1 \ &&的apt-get安装-y \ git的水银xvfb的\语言环境须藤的openssh客户端CA证书焦油gzip压缩并行\净工具解压的netcat的bzip2压缩的GnuPG卷曲的wget#集时区为UTC RUN LN -sf的/ usr / share / zoneinfo中的/ etc / UTC的/ etc /本地时间#使用Unicode运行locale-gen C.UTF-8 ||真正的ENV LANG = C.UTF-8#码头工人安装RUN集-EX \ &&出口DOCKER_VERSION = $(卷曲--silent --fail --retry 3 \ https://download.docker.com/linux/static/stable/ x86_64的/ | \ grep的-o -e '搬运工 -  [0-9] *  -  CE \ .tgz的' |排序-r |头-n 1)\ && DOCKER_URL =“https://download.docker.com/ Linux的/静态/稳定/ x86_64的/ $ {} DOCKER_VERSION” \ &&回声码头工人网址:$ DOCKER_URL \ &&卷曲--silent --show错误--location --fail --retry 3  - 输出的/ tmp /泊坞窗.tgz的 “$ {} DOCKER_URL” \ && LS -lha /tmp/docker.tgz \ &&焦油-xz -C / tmp目录-f /tmp/docker.tgz \ && MV的/ tmp /泊坞窗/ *的/ usr / bin中\&&室射频/ TMP /搬运工/tmp/docker.tgz#安装搬运工-撰写RUN卷曲--silent --show误差--location --fail --retry 3 --output的/ usr /斌/搬运工-撰写\ https://circle-downloads.s3.amazonaws.com/circleci-images/cache/linux-amd64/docker-compose-latest \ &&使用chmod + X的/ usr /斌/搬运工-撰写\ &&搬运工-撰写版本#设置circleci用户RUN GROUPADD --gid 3434 circleci \ && useradd的--uid 3434 --gid circleci --shell /斌/庆典--create-home circleci \ && echo 'circleci ALL=NOPASSWD: ALL' >> /etc/sudoers.d/50-circleci \ && echo 'Defaults env_keep += "DEBIAN_FRONTEND"' >> /etc/sudoers.d/env_keep USER circleci CMD ["/bin/sh"]

Config.yml

在config.yml以下片断,让我们假设build_elixir工作定期构建使用上述Dockerfile的图像。通过添加docker_layer_caching:真我们下面执行的关键,我们确保CircleCI将保存每个泊坞窗图像层,因为这花好月圆图像构建。

2职位build_elixirdocker_layer_caching真正脚步-查看-名称建立药剂图像命令搬运工构建-t circleci /酏剂:例子。

在随后提交,如果我们的例子中Dockerfile没有改变,那么DLC将缓存中的拉各泊坞窗图像层建立药剂图像步骤,以及我们的形象在理论上建立几乎瞬间。

现在,让我们说,我们添加下面的步骤,我们Dockerfile,在之间#使用Unicode#安装搬运工脚步:

#安装JQ RUN JQ_URL = “https://circle-downloads.s3.amazonaws.com/circleci-images/cache/linux-amd64/jq-latest” \ &&卷曲--silent --show错误--location  --fail --retry 3 --output在/ usr / bin中/ JQ $ JQ_URL \ &&使用chmod + X的/ usr / bin中/ JQ \ && JQ --version

在下一个承诺,DLC将确保我们仍然可以缓存图像层在从我们的Dockerfile拉的前几个步骤仙丹:1.6.5作为我们的基地形象,#使易非交互式步骤,步骤开始运行apt-get更新中,#设置时区为UTC步骤和#使用Unicode步。

但是,由于我们的#install JQ步是新的,并且需要从头开始运行所有的后续步骤,因为Dockerfile修改都会使图像层高速缓存的其余部分。总体而言,虽然启用了DLC,我们的形象还是会建立更迅速,由于对Dockerfile开始的不变层/步骤。

如果我们要改变我们例子中的第一步Dockerfile,也许我们想从不同的药剂基础的图像,然后我们为这个图象整个高速缓存将失效拉,即使我们的Dockerfile的每另一部分保持不变。

视频:泊坞窗层缓存概述

在视频例如,作业运行所有的在Dockerfile的步骤与docker_layer_caching:真为了setup_remote_docker步。在随后的那份工作的运行,还没有在Dockerfile改变步骤,将被重用。因此,在第一次运行在两分钟内打造泊坞窗图像。如果没有在Dockerfile第二次运行前的变化,这些步骤瞬间发生,在0秒。

2职位建立搬运工人-图片circleci /节点:9.8.0  - 拉伸 - 浏览器AUTH用户名mydockerhub用户密码$ DOCKERHUB_PASSWORD#背景/项目UI ENV-VAR参考脚步-查看-setup_remote_dockerdocker_layer_caching真正-泊坞窗构建。

当没有在作业运行间的图像变化的层,DLC提取从高速缓存从以前建成的图像层和重用那些不是重建整个图像。

如果Dockerfile的部分变化(这会改变图像的一部分)与改性Dockerfile完全相同的工作的后续运行最终仍可能比重建整个图像更快。因为高速缓存用于未在Dockerfile改变前几个步骤将更快地完成。后面的变化的步骤必须重新运行,因为Dockerfile变化无效缓存。

所以,如果你在Dockerfile改变的东西,所有这些以后的步骤都是无效和层必须重建。当一些步骤保持不变(在您卸下了一个前步骤),这些步骤可重复使用。因此,它仍然比重建整个图像更快。