搜索你想找的开源项目

输入名称、用途或关键词,也可粘贴 GitHub 仓库链接

分享到微信

当前解读页的微信分享二维码

用微信扫一扫打开,点击右上角「···」分享给朋友或朋友圈。

手机上可截屏后,在微信扫一扫中从相册识别二维码。

moby/buildkit

运维与部署

把源代码或 Dockerfile 高效、可并发地构建成容器镜像及其他产物的构建工具包。

10,370
1,563
Go
Apache-2.0
创建于 9 年前

项目介绍

BuildKit 是现代 Docker 构建背后的构建引擎,也被许多容器构建系统采用。它把 Dockerfile 或其他 frontend 的构建定义编译成中间格式 LLB,再调度执行。架构上分为运行在 Linux 上的守护进程 buildkitd 和客户端 buildctl,客户端还支持 macOS 和 Windows。

它主要解决两个问题:并发解析构建依赖,以及高效复用构建缓存。LLB 是厂商中立的 Protobuf 格式,因此构建不一定要用 Dockerfile 表达;HLB、Earthfile、Nix 等语言都有对应的 frontend。构建结果可以输出为镜像并推送到仓库、写入本地目录、导出 Docker 或 OCI tarball,或存入 containerd 的镜像存储。

快速使用

守护进程需要 Linux 主机,并安装 runc 或 crun,使用 containerd worker 时还需要 containerd。先以 root 用户启动:

sudo buildkitd

守护进程默认监听 Unix socket。要以非 root 用户运行,参见无 root 运行指南。然后在当前目录构建 Dockerfile:

buildctl build \
  --frontend=dockerfile.v0 \
  --local context=. \
  --local dockerfile=.

默认情况下构建结果和中间缓存只保留在 BuildKit 内部,必须指定 output 才能取回结果。推送到镜像仓库:

buildctl build ... --output type=image,name=docker.io/username/image,push=true

若要复制到本地目录,改用 --output type=local,dest=path/to/output-dir。Linux、macOS 和 Windows 的预编译二进制文件见发布页面;macOS 还可以通过非官方 Homebrew formula 安装,但该 formula 不含守护进程,需要借助 Lima 等 Linux 虚拟机运行 buildkitd。

输出与缓存

输出需要显式选择。除了推送镜像和写本地目录,还可以导出 Docker 或 OCI tarball,或把镜像存入 containerd 镜像存储。使用 --metadata-file 可以输出镜像 digest 等构建元数据。

缓存也可以导出和导入。inline 导出器把缓存元数据嵌入推送的镜像;registry 导出器把镜像和缓存分开存储,并支持 max 模式。此外还有本地目录、GitHub Actions、S3 和 Azure Blob Storage 缓存导出器,后三者标注为实验性。多平台构建和集群内共享缓存有单独的文档说明。

使用约束

守护进程支持 Linux 和 Windows,客户端跨平台。容器化运行守护进程通常需要特权模式;rootless 镜像和 daemonless 模式可以避免部分特权要求,但各有自身条件。通过 TCP 暴露 gRPC API 时,如果不启用双向 TLS 会有明确风险,因为执行 RUN 的容器也能调用该 API。垃圾回收需要在守护进程配置文件中设置,本地缓存默认位于 /var/lib/buildkit。项目采用 Apache-2.0 许可证,贡献方式见贡献指南。

HotRepo 点评

BuildKit 在 2026-11-04 的 Go 日榜上以第 12 名出现,当天新增 2 星;对一个已有超过 1 万星的仓库来说,这个变化很小,符合成熟基础设施项目的状态:它的价值来自被 Docker、Buildx、Gitpod、Earthly 等采用,而不是星数增速。Hacker News 上的两条提交都是较窄的实践记录,其中一条评论指出构建卷支持早在 2019 年就已存在,说明讨论更多集中在加快流水线,而不是项目本身的热度。对需要规模化构建容器镜像的团队,值得关注的是缓存控制和输出灵活性,而不是近期榜单表现。

本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。

Hacker News 讨论

Show HN: Docker Build Volumes
▲ 3 · 1 条评论 · 2020年9月3日
Show HN: Kubernetes Manifests for BuildKit
▲ 3 · 1 条评论 · 2019年10月18日