当前位置:首页 > 科技  > 软件

如何将Docker的构建时间减少40%

来源: 责编: 时间:2023-11-06 17:19:00 369观看
导读作者丨Niels Claeys编译丨诺亚出品 | 51CTO技术栈(微信号:blog51cto)与许多公司类似,我们为产品中使用的所有组件构建docker映像。随着时间的推移,其中一些映像变得越来越大,我们的CI构建花费的时间也越来越长。我的目标是C

作者丨Niels ClaeysC7R28资讯网——每日最新资讯28at.com

编译丨诺亚C7R28资讯网——每日最新资讯28at.com

出品 | 51CTO技术栈(微信号:blog51cto)C7R28资讯网——每日最新资讯28at.com

C7R28资讯网——每日最新资讯28at.com

与许多公司类似,我们为产品中使用的所有组件构建docker映像。随着时间的推移,其中一些映像变得越来越大,我们的CI构建花费的时间也越来越长。我的目标是CI构建不超过5分钟——差不多是喝杯咖啡休息的理想时间。如果构建花费的时间超过这个时间,就会降低开发人员的工作效率。C7R28资讯网——每日最新资讯28at.com

C7R28资讯网——每日最新资讯28at.com

造成生产力损失的原因是:C7R28资讯网——每日最新资讯28at.com

1、开发人员需要等待构建完成,从而浪费时间。C7R28资讯网——每日最新资讯28at.com

2、开发人员开始做一些新的东西,并在晚些时候再回来做。切换必然耗时,这通常也会导致效率低下。C7R28资讯网——每日最新资讯28at.com

C7R28资讯网——每日最新资讯28at.com

图片图片C7R28资讯网——每日最新资讯28at.com

C7R28资讯网——每日最新资讯28at.com

在这篇文章中,我想说明我们应用的2个小变化,两者极大地改善了我们的构建时间。当然,在关注这些改进之前,请确保你已经遵循编写dockerfile的最佳实践,比如尽量减少层数;使用多级构建;使用最小的基础图像等等。C7R28资讯网——每日最新资讯28at.com

1、Buildkit vs Buildx  

C7R28资讯网——每日最新资讯28at.com

让我们从解释Buildkit和Buildx开始,因为这两个术语经常互换使用,但它们并不相同。C7R28资讯网——每日最新资讯28at.com

C7R28资讯网——每日最新资讯28at.com

Builkit

Buildkit是经过改进的后端,用来取代旧的Docker构建器。它在2018年打包在Docker中,并成为docker engine 23.0的默认构建器。   C7R28资讯网——每日最新资讯28at.com

C7R28资讯网——每日最新资讯28at.com

它提供了许多有趣的功能:C7R28资讯网——每日最新资讯28at.com

  • 改进的缓存功能
  • 并行构建不同的层
  • 延迟拉取基础镜像(≥Buildkit 0.9)

在使用Buildkit时,你很快就会注意到docker构建命令的输出看起来更清晰、更结构化。C7R28资讯网——每日最新资讯28at.com

C7R28资讯网——每日最新资讯28at.com

在docker版本低于23.0的情况下使用Buildkit的典型方法是设置Buildkit参数。如下所示:C7R28资讯网——每日最新资讯28at.com

C7R28资讯网——每日最新资讯28at.com

DOCKER_BUILDKIT=1 docker build --platform linux/amd64 . -t someImage:someVersionDOCKER_BUILDKIT=1 docker push someImage:someVersion

C7R28资讯网——每日最新资讯28at.com

Buildx

Buildx是Docker的一个插件,它使你能够在Docker中使用Buildkit的全部潜力。之所以创建它,是因为Buildkit支持许多新的配置选项,这些选项不能全部以向后兼容的方式集成到docker构建命令中。C7R28资讯网——每日最新资讯28at.com

C7R28资讯网——每日最新资讯28at.com

除了构建镜像之外,Buildx还支持管理多个构建器。在CI中,这对于定义具有不同配置的作用域环境非常有用,因为它们不会修改共享Docker守护进程。C7R28资讯网——每日最新资讯28at.com

C7R28资讯网——每日最新资讯28at.com

你可以像下面这样开始使用Buildx:C7R28资讯网——每日最新资讯28at.com

C7R28资讯网——每日最新资讯28at.com

docker buildx create --bootstrap --name builderdocker buildx use builder

2、受益于远程缓存

C7R28资讯网——每日最新资讯28at.com

加快构建速度的第一种方法是在远程注册表中缓存镜像。这样,即使在不同的机器上执行构建,也可以从构建缓存中获益,这是CI中的典型情况。作为一种解决方法,许多人在构建新映像版本之前提取了映像的最新版本。这样做的好处是,你可以缓存未更改的图层,而代价是最初提取完整的图像。拉取完整的图像可能需要一段时间,但也不能保证图层可以被重用。为了说明这一点,我们使用了以下命令:C7R28资讯网——每日最新资讯28at.com

C7R28资讯网——每日最新资讯28at.com

图片图片C7R28资讯网——每日最新资讯28at.com

C7R28资讯网——每日最新资讯28at.com

使用Buildx,你可以将缓存信息存储在远程位置(例如容器注册表、blob存储等)。构建器检查给定层是否已经存在,如果是这种情况,它将重用它而不是再次创建它。这甚至可以在不拉动本地图层的情况下完成。为了从这个机制中受益,我们将之前的命令修改为:   C7R28资讯网——每日最新资讯28at.com

C7R28资讯网——每日最新资讯28at.com

图片图片C7R28资讯网——每日最新资讯28at.com

C7R28资讯网——每日最新资讯28at.com

模式“max”意味着我们将存储每一层的构建信息,甚至是生成图像中未使用的层(例如,当使用多阶段构建时)。默认模式下使用“min”,它只存储最终映像中存在的层的构建信息。C7R28资讯网——每日最新资讯28at.com

C7R28资讯网——每日最新资讯28at.com

缓存的一个特殊情况是“内联”存储缓存数据,这意味着它将与图像一起缓存。当使用Buildkit而不使用Buildx时,也支持此选项。它是最容易开始的,但在使用多阶段构建时就比较棘手了,而且它没有在工件输出和缓存之间提供明确的分离。内联存储缓存数据的命令如下:C7R28资讯网——每日最新资讯28at.com

C7R28资讯网——每日最新资讯28at.com

图片图片C7R28资讯网——每日最新资讯28at.com

3、添加文件到Docker镜像的新方法

C7R28资讯网——每日最新资讯28at.com

Docker引入了新的dockerfile编写语法,即:C7R28资讯网——每日最新资讯28at.com

#syntax= docker /dockerfile:1.4。它支持COPY和ADD命令的额外链接选项。C7R28资讯网——每日最新资讯28at.com

C7R28资讯网——每日最新资讯28at.com

以前,当你使用COPY或ADD命令时,构建器会创建一个新快照,它将新文件与现有文件系统合并。其结果是,在执行此操作之前,父层都需要存在,否则目标目录可能还不存在。最后,你的映像(构建命令的结果)将由每个层的tarball组成,其中包含各个快照之间的差异。C7R28资讯网——每日最新资讯28at.com

C7R28资讯网——每日最新资讯28at.com

图片图片C7R28资讯网——每日最新资讯28at.com

C7R28资讯网——每日最新资讯28at.com

当使用link选项时,新文件将被放入它们自己的快照中,而不依赖于以前的层。链接的文件存储在它们自己的tarball中,不同的tarball被链接在一起,不依赖于现有的文件系统,如下图所示。C7R28资讯网——每日最新资讯28at.com

C7R28资讯网——每日最新资讯28at.com

图片C7R28资讯网——每日最新资讯28at.com

https://www.docker.com/blog/image-rebase-and-improved-remote-cache-support-in-new-buildkit/C7R28资讯网——每日最新资讯28at.com

C7R28资讯网——每日最新资讯28at.com

图片图片C7R28资讯网——每日最新资讯28at.com

C7R28资讯网——每日最新资讯28at.com

主要优点是文件不再依赖于以前的层。只要文件没有改变,即使父层改变了,层也可以被重用。C7R28资讯网——每日最新资讯28at.com

C7R28资讯网——每日最新资讯28at.com

此外,这还可以提高构建的速度,因为现在可以并行执行多层复制数据。C7R28资讯网——每日最新资讯28at.com

4、结论

C7R28资讯网——每日最新资讯28at.com

本文描述了我们在优化CI管道后获得的一些新见解。我讨论了2个小的变化,导致我们的整体docker构建时间减少了40%:其一,远程存储构建缓存信息;其二,在添加、复制文件到docker镜像时使用link选项。C7R28资讯网——每日最新资讯28at.com

C7R28资讯网——每日最新资讯28at.com

参考链接:https://medium.com/datamindedbe/how-we-reduced-our-docker-build-times-by-40-afea7b7f5fe7C7R28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-17253-0.html如何将Docker的构建时间减少40%

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Go 语言高级网络编程

下一篇: 为什么不推荐使用Python原生日志库?

标签:
  • 热门焦点
  • 小米官宣:2023年上半年出货量中国第一!

    今日早间,小米电视官方微博带来消息,称2023年小米电视上半年出货量达到了中国第一,同时还表示小米电视的巨屏风暴即将开始。“公布一个好消息2023年#小米电视上半年出货量中国
  • vivo TWS Air开箱体验:真轻 臻好听

    在vivo S15系列新机的发布会上,vivo的最新款真无线蓝牙耳机vivo TWS Air也一同发布,本次就这款耳机新品给大家带来一个简单的分享。外包装盒上,vivo TWS Air保持了vivo自家产
  • iPhone卖不动了!苹果股价创年内最大日跌幅:市值一夜蒸发万亿元

    8月5日消息,今天凌晨美股三大指数高开低走集体收跌,道指跌0.41%;纳指跌0.36%;标普500指数跌0.52%。热门科技股也都变化极大,其中苹果报181.99美元,跌4.8%,创
  • Rust中的高吞吐量流处理

    作者 | Noz编译 | 王瑞平本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序
  • 零售大模型“干中学”,攀爬数字化珠峰

    文/侯煜编辑/cc来源/华尔街科技眼对于绝大多数登山爱好者而言,攀爬珠穆朗玛峰可谓终极目标。攀登珠峰的商业路线有两条,一是尼泊尔境内的南坡路线,一是中国境内的北坡路线。相
  • 一条抖音4亿人围观 ! 这家MCN比无忧传媒还野

    作者:Hiu 来源:互联网品牌官01 擦边少女空降热搜,幕后推手曝光被网友誉为“纯欲天花板”的女网红井川里予,近期因为一组哥特风照片登上热搜,引发了一场互联网世界关于
  • 疑似小米14外观设计图曝光:后置相机模组变化不大

    下半年的大幕已经开启,而谁将成为下半年手机圈的主角就成为了大家关注的焦点,其中被传有望拿下新一代骁龙8 Gen3旗舰芯片的小米14系列更是备受大家瞩
  • 电博会与软博会实现"线下+云端"的双线融合

    在本次“电博会”与“软博会”双展会利好条件的加持下,既可以发挥展会拉动人流、信息流、资金流实现快速交互流动的作用,继而推动区域经济良性发展;又可以聚
  • 亲历马斯克血洗Twitter,硅谷的苦日子在后头

    文/刘哲铭  编辑/李薇  马斯克再次挥下裁员大刀。  美国时间11月14日,Twitter约4400名外包员工遭解雇,此次被解雇的员工的主要工作为内容审核等。此前,T
Top