揭秘 BuildKit 模块化架构,打造高性能应用程序解决方案

要使用BuildKit来构建Docker镜像,你可以按照以下步骤操作 如果尚未安装,确保你的系统已经安装了buildkit。如果显示或,则已启用。将设置为1以启用BuildKit。这可以通过添加到.bashrc打开~/.bashrc后,修改文件,确保buildkit使用命令时,记得带上--buildkit选项,比如构建名为使用 BuildKit,你可以将 Dockerfile 分为多个阶段(如 builder 和 production)。 阅读详情

640?wx_fmt=jpeg

出品丨Docker公司(ID:docker-cn)

编译丨小东

每周一、三、五晚6点10分  与您不见不散


说在前面


两周前是我们在短短四年内举办的第八个 DockerCon 大会了。我们的贡献者、开发人员、IT用户、企业和生态系统合作伙伴社区已经增长到达数以百万计的规模了,这是基我们的创始人 Solomon Hykes 以民主化为前提实现软件容器的成果。今天如最开始一样,Docker 创建了简单的工具和通用的打包方法,将容器中的所有应用程序依赖关系都捆绑在一起。Docker 引擎使应用程序能够在任何基础设施上一致地运行,从而解决了开发人员和运维团队的依赖性难题,并消除了“它在我的笔记本上的工作!”的问题。

&


在过去的两年里,Docker 引擎的代码库已经被重构为几个可重用的组件,其中最重要的是“容器”(核心容器运行时)和 BuildKit 工具集(用于构建镜像部分的 Docker 引擎)。在 DockerCon 的贡献和合作中,Michael Crosby 和 Tonis Tiigli 对这两个项目进行了更新,详细的幻灯片请点击文尾处“阅读原文”进行查看。


640?wx_fmt=png


容器,在 Docker 引擎中的核心容器运行时已经被数以百万计的用户使用,并由成千上万的组织将其运行在生产环境中。18个月前,Docker 从 Docker 引擎中将容器分离出来,并将其捐赠给云原生计算基金会(CNCF)作为一个顶级项目,同时它与 Kubernetes 、 gRPC 和 Prometheus 结合紧密。Docker 与全球最大的五家云提供商 —— 阿里巴巴、AWS、谷歌、IBM和微软进行合作,目标是在所有云计算平台上进行开发,并提供解决方案。


Docker 捐赠的一个目的是通过提供核心容器运行时来促进容器生态系统的进一步创新,该容器运行时可供其他容器系统供应商和编排项目(如Kubernetes、DC / OS等)使用。容器的一个重要设计原则是具有对 Kubernetes 进行一流的支持却又不完全依赖于它,因为将核心容器运行时固定到 Kubernetes 仅将它的使用案例限制在 Kubernetes 上,而不考虑容器的其它用例,例如开发人员桌面、CI / CD、单节点部署、 Edge 和物联网。

640?wx_fmt=png


今年4月公布的 containerd 1.1 实现了 Kubernetes Container Runtime Interface(CRI),因此它可以直接被 Kubernetes 和 Docker 引擎使用。它实现了命名空间,这样来自不同容器系统(例如 Docker 引擎和 DC/OS)的客户端可以在逻辑上进行分离的同时,在一个系统上利用单一的容器实例。此版本允许您插入任何 OCI 兼容的运行时,如 Kata 容器、 gVisor 等,并包含了许多性能改进,如更好的 pod 启动延迟和显示 cpu/内存使用情况的CRI插件。为了获得额外的性能优势,它用更高效的快照程序取代了图形驱动程序,而 BuildKit 利用了更快的构建。在 CRI 工作的 Kubernetes 社区成员在5月下旬就宣布 Kubernetes 的 containerd 1.1 的普遍可用性。


Michael 的演讲概述了 containerd 1.1 智能客户端的功能:从客户端进行 I / O 重定向、容器命名空间利用单个运行时实例与来自多个客户端(Kubernetes、Docker Engine、其他系统)的逻辑隔离以及当使用容器 Go 客户端函数库时,容器在 Golang 中的类型,(让人想起 Brendan Burn 的 Metaparticle 项目)。

 

640?wx_fmt=png


Tonis 的演讲讲述了 BuildKit 带来的所有性能改进,以及由于其模块化架构而开放的功能。它使开源开发者能够直接使用 BuildKit 来创建新的构建系统,从而创建新的前端(超越 Dockerfiles)和后端(超越 Docker 镜像)。


BuildKit 将作为实验性功能集成到 Docker 18.06 版本中。这个新的实验性功能将带来 Dockerfile 的可扩展性:开发人员可以使用新的 #syntax 指令来创建 Dockerfile 的解析扩展:#syntax = registry / user / repo:tag。


他们提供的容器镜像将知道如何解释 Dockerfile 中的新语法。Tonis 展示了一个扩展的例子,它可以理解成“RUN -mount”,并允许您在构建时加载一个卷,比如一个 Maven 仓库缓存,可为您的构建带来高达33倍的性能提升。这是 Docker 构建中最受欢迎的功能请求之一。

640?wx_fmt=png


容器和 BuildKit 都在容器运行时和构建时间上来推动容器的可能性。事实上,他们已经集成到 Docker 引擎中了,这使得主流开发人员可以在组件项目中实现这些创新,而无需改变他们的工作流程。无论他们是从笔记本电脑中的 Docker Desktop 、用于生产的 Kubernetes 集群、使用容器对传统应用程序进行现代化的大型机、还是用于物联网场景的 Raspberry Pi来使用这些设备。无论他们使用哪种系统,开发人员和运维团队都可以从 Docker 引擎所提供的应用程序工作流程的可移植性中受益,从而可以在任何地方使用相同的可信代码库进行构建和运行容器。


总而言之,如果您想要确保拥有一个核心容器运行时,它可以在所有的编排器(Kubernetes、Swarm、AWS ECS 等)、Linux发行版、Windows和大型机中工作,并且在任何云上、在x86、ARM和 gpu 上运行,那么唯一的解决方案是容器。如果您想用优化的镜像构建解决方案来实现更大的价值,那么在 Docker 引擎中集成 BuildKit 是最好的解决方案。

640?wx_fmt=png


点击下列标题,阅读更多干货



如果本文对你有帮助,欢迎分享到朋友圈!获取更多Docker实用技巧,扫描下图二维码!

   640?wx_fmt=png


640?wx_fmt=gif点击下方“阅读全文”,了解详情

Docker 核心组件:BuildKit BuildKit 是 Docker 提供的新一代镜像构建引擎,用于替代传统的 Docker build 机制。它具备更高的构建性能、更强的可扩展性与更灵活的特性,支持并发执行、缓存复用、自定义前端等。BuildKit 是现代化 Docker 构建的基石,提供了远超传统机制的灵活性和性能。在大型项目构建、自动化流水线中扮演了关键角色。深入理解并使用 BuildKit,有助于提高构建效率、安全性和可维护性,是 Docker 高阶用户的重要技能。 阅读详情

相关推荐

Docker笔记-08 Docker BuildKit

Docker Buildx 是一个docker CLI插件,其扩展了docker命令,支持Moby BuildKit提供的功能。

3699

BuildKit

BuildKit是一个现代化的构建系统,主要用于构建和打包容器镜像。它是Docker官方的构建引擎,支持构建多阶段构建、缓存管理、并行化构建、多平台构建等功能。BuildKit还支持多种构建语法和格式,包括Dockerfile、BuildKit Build Specification、OCI Image Format等。BuildKit的特点包括:高效的构建缓存:BuildKit使用内容地址寻址(Content-Addressable)技术,可以更好地利用缓存,避免重复构建。

喝醉酒的小白 2238

构建容器镜像利器:BuildKit

Docker通过读取Dockerfile中的指令自动构建镜像,Dockerfile是一个文本文件,其中依次包含构建给定镜像所需的所有命令。上面的解释摘自Docker的官方文档并总结了Dockerfile的用途。Dockerfile的使用非常重要,因为它是我们的蓝图,是我们添加到Docker镜像中的层的记录。本文,我们将学习如何利用BuildKit功能,这是Docker v18.09上引入的一组增强功能。集成BuildKit将为我们提供更好的性能,存储管理和安全性。

qq_24442273的博客 1683

Docker 镜像 (Harbor/BuildKit/buildx)

Docker 镜像 (Harbor/BuildKit/buildx)

云满笔记 2992

Docker Buildkit(新增 --mount、--security、--network 等特性)

RUN --mount 允许您创建 mount,该 mount 作为构建期间可以访问的一部分。该特性可用于从构建的其他部分绑定文件,而无需复制、访问构建 secrets 或 ssh-agent 套接字,或者创建缓存位置从而加速构建。可以更加快速,有效,安全地构建docker 镜像,自 docker v18.06 版本起已经集成了该组件。BuildKit是Docker官方社区推出的下一代镜像构建神器。其中增加了一个很实用的新语法。,顾名思义用来文件挂载使用。

小单的博客专栏 3562

提速 300%!Docker 镜像构建黑科技:BuildKit 缓存优化实战指南

Docker BuildKit 是 Docker 的下一代构建引擎,它提供了更高效、更灵活的容器镜像构建能力。BuildKit 于 2018 年引入,从 Docker 18.09 版本开始集成到 Docker 引擎中,并在 Docker 23.0 版本后成为默认的构建系统。以一个 Java 项目为例,我们将使用 Docker BuildKit 的缓存功能来优化 Maven 依赖的下载和构建过程。使用原来的命令,每次构建都会重新下载 Maven 依赖,导致构建速度慢且浪费网络流量。

easylife206的专栏 1450

docker buildkit

BuildKit 通过并行化构建过程、缓存层、共享构建上下文以及更多的构建阶段来提高构建速度和效率。1. 前端和后端分离:BuildKit 将构建过程分为前端和后端,前端负责处理 Dockerfile 和构建上下文,后端则负责实际的构建工作。3. 共享构建上下文:在多个构建步骤中,BuildKit 可以共享相同的构建上下文,避免重复下载或复制文件。7. 详细的构建日志:BuildKit 提供了更详细的构建日志,帮助开发者更好地了解构建过程。6. 可扩展性:BuildKit 允许开发者通过插件来扩展其功能。

leijmdas的专栏 647

镜像构建工具buildkit基本使用

buildkit镜像构建工具使用说明

huhaiand的专栏 2632

linux: 深入解析 Docker BuildKit, 提升软件第三方依赖缓存的利器

BuildKit 是在 Docker 18.09 版本中引入的构建引擎,旨在替代传统的 Docker 构建引擎。并行构建:BuildKit 能够并行处理多个构建步骤,从而提高构建速度。更好的缓存管理:提供了更精细的缓存控制,可以显著减少重复构建的时间。内联构建秘钥:可以在 Dockerfile 中安全地传递和使用构建时的秘钥。更好的诊断工具:提供了详细的构建日志和调试信息,便于排查构建问题。Docker BuildKit 是提升 Docker 构建效率的强大工具。

十年运维开发经验的王义杰在此分享自己的知识和经验 1422

常见UserAgent 查看常见的微信、支付宝、抖音、浏览器等常见UserAgent

Win64;Android 13;Android 13;Android 13;Android 13;Android 10;Android 13;Win64;Win64;Android 13;Android 13;Android 13;Android 10;Android 13;Win64;

qq_26450889的博客 2437

安装buildkit,并使用buildkit构建containerd镜像

服务端为buildkitd,负责和runc或containerd后端连接干活,目前只支持这两个后端客户端为buildctl,负责解析镜像构建文件Dockerfile,并向服务端发出构建指令,所以客户端可以和服务端不在一台机器上,也不需要root权限之类服务端默认使用runc后端,但是建议使用containerd后端,这样构建出的镜像就会存在containerd的buildkit名字空间下。

菜鸡的博客 3984

【工具】JAVA请求头Headers工具随机 生成UA 解析headers为map

【工具】JAVA请求头Headers工具随机 生成UA 解析headers为map。

我是Superman丶的博客 940

BuildKit容器部署:Docker容器中运行buildkitd

BuildKit是Docker生态系统中的下一代构建工具,提供了并发、缓存高效且与Dockerfile无关的构建能力。在生产环境中,将buildkitd(BuildKit守护进程)部署在Docker容器中可以带来更好的隔离性、可移植性和管理便利性。 本文将详细介绍如何在Docker容器中部署和运行buildkitd,涵盖特权模式和无特权(rootless)模式两种部署方案,并提供完整的配置示例和...

gitblog_00819的博客 881

构建容器镜像利器:BuildKit安装

BuildKit 是由 Moby 项目推出的一个新型构建引擎,旨在提升容器镜像构建的速度、效率和安全性。它最初作为 Docker 引擎的可选组件引入,但现在已经成为现代容器化应用构建的首选工具之一。

xiangfeideyuwei的博客 2258

启用docker buildkit

环境变量 export DOCKER_BUILDKIT=1 export COMPOSE_DOCKER_CLI_BUILD=1 注入到.bashrc文件 echo -e "export DOCKER_BUILDKIT=1" >> ~/.bashrc echo -e "export COMPOSE_DOCKER_CLI_BUILD=1" >> ~/.bashrc source ~/.bashrc 修改/etc/docker/daemon.json "features"

Note 2343

如何用 Docker BuildKit 实现极速轻量构建?这7步至关重要

掌握Next-gen Docker Build的镜像大小优化技巧,实现极速轻量构建。本文详解Docker BuildKit的7个关键步骤,涵盖多阶段构建、缓存优化与层压缩等核心方法,适用于微服务与CI/CD场景,显著提升构建效率与镜像性能,值得收藏

StepNexus的博客 875

Docker BuildKit

构建 Docker 镜像可能会很慢,而且 Docker 的构建系统还缺少一些关键的安全特性,特别是在不泄露机密信息的情况下使用构建机密的能力。在经典的 Docker 中,构建的每个步骤都会生成一个新的镜像,可以通过构建输出中报告的 ID 访问。环境变量,以确保使用 BuildKit(在 Linux 上从 23.0 版本开始,以及在足够新的 Windows/macOS Docker Desktop 安装中,这是不必要的)。这里我特指的是仅在构建镜像时需要的机密信息,而不是运行中的应用程序使用的机密信息。

liluo0815481的博客 302
上一篇: Docker新功能曝光,一键自动生成 Dockerfile 和 Compose 文件
下一篇: 谷歌开发的 Kubeflow 工具集亮相 DockerCon ,机械学习从此开始!
Docker公司
博客等级 码龄9年 306粉丝 166原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值