
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
BuildKit 是一个工具包,用于以高效、可表达且可重复的方式将源代码转换为构建产物。它提供了先进的构建能力,支持复杂的依赖管理、高效缓存和多格式输出,旨在替代传统构建工具,优化容器镜像及其他构建产物的构建流程。
docker build)从源码编译安装
以下命令将 buildkitd(守护进程)和 buildctl(客户端工具)安装到 /usr/local/bin:
bash# 编译并安装 $ make && sudo make install # 如需仅构建特定工作节点版本(如仅 containerd 或仅 OCI) $ make binaries-all # 生成 buildkitd.containerd_only 和 buildkitd.oci_only
基本启动命令
bashbuildkitd --debug --root /var/lib/buildkit
核心参数说明
--debug:启用调试日志--root:指定构建数据存储根目录(默认:/var/lib/buildkit)--oci-worker:启用/禁用 OCI (runc) 工作节点(默认:true)--containerd-worker:启用/禁用 containerd 工作节点(默认:false)工作节点后端选择
BuildKit 支持两种工作节点后端:
切换至 containerd 后端:
bashbuildkitd --oci-worker=false --containerd-worker=true
BuildKit 构建基于名为 LLB(Low-Level Build)的二进制中间格式,用于定义构建过程中进程的依赖图。LLB 类似于 "Dockerfile 的 LLVM IR",具有以下特性:
LLB 格式定义见 https://github.com/moby/buildkit/blob/master/solver/pb/ops.proto%E3%80%82%E7%9B%AE%E5%89%8D%E6%94%AF%E6%8C%81%E7%9A%84 LLB 高级语言包括 Dockerfile 及自定义语言(可通过 PR 添加)。
通过示例脚本生成并查看 LLB 构建图:
bash# 生成 LLB 定义并通过 jq 格式化输出 go run examples/buildkit0/buildkit.go | buildctl debug dump-llb | jq . # 执行构建(示例脚本支持 --with-containerd 标志添加 containerd 支持) go run examples/buildkit0/buildkit.go | buildctl build
示例脚本说明:
buildkit0:仅使用 exec 操作,为每个组件定义完整阶段buildkit1:分离 git 克隆步骤以提升并发度buildkit2:直接使用 git 源而非 git clone,优化性能和缓存buildkit3:支持本地源码路径(如 --runc=local)dockerfile2llb:将 Dockerfile 转换为 LLB(调试用)gobuild:演示嵌套调用生成 Go 包依赖的 LLB直接使用 buildctl 构建
通过 dockerfile.v0 前端解析 Dockerfile:
bash# 基本构建(上下文和 Dockerfile 均为当前目录) buildctl build --frontend=dockerfile.v0 --local context=. --local dockerfile=. # 指定构建目标和构建参数 buildctl build \ --frontend=dockerfile.v0 \ --local context=. \ --local dockerfile=. \ --frontend-opt target=foo \ # 指定构建目标阶段 --frontend-opt build-arg:foo=bar # 传递构建参数
参数说明:
--frontend=dockerfile.v0:使用 Dockerfile 前端--local <name>=<path>:将本地路径暴露给构建器(context 为构建上下文,dockerfile 为 Dockerfile 路径)使用 build-using-dockerfile 工具
为简化 Dockerfile 构建,可使用 build-using-dockerfile 包装工具(语法类似 docker build):
bash# 编译并安装工具 go build ./examples/build-using-dockerfile && sudo install build-using-dockerfile /usr/local/bin # 基本构建 build-using-dockerfile -t myimage . # 指定 Dockerfile 路径和标签 build-using-dockerfile -t mybuildkit -f ./hack/dockerfiles/test.Dockerfile . # 构建后自动加载到 Docker docker inspect myimage
BuildKit 需通过导出器(Exporter)获取构建结果,支持以下导出方式:
1. 导出到 containerd
需使用 containerd 工作节点:
bash# 导出镜像到 containerd buildctl build ... --exporter=image --exporter-opt name=docker.io/username/image # 查看 containerd 中的镜像 ctr --namespace=buildkit images ls
2. 推送到镜像仓库
bashbuildctl build ... \ --exporter=image \ --exporter-opt name=docker.io/username/image \ # 镜像名称(含仓库地址) --exporter-opt push=true # 启用推送
注:如需认证,
buildctl会自动读取 Docker 配置文件(~/.docker/config.json)。
3. 导出到本地目录
将构建产物直接复制到客户端本地目录(适用于非容器镜像构建):
bashbuildctl build ... --exporter=local --exporter-opt output=path/to/output-dir
4. 导出到 Docker
通过 tarball 导出并加载到 Docker:
bash# 导出为 Docker 兼容 tarball 并加载 buildctl build ... --exporter=docker --exporter-opt name=myimage | docker load
5. 导出为 OCI 镜像格式 tarball
bash# 导出到指定路径 buildctl build ... --exporter=oci --exporter-opt output=path/to/output.tar # 导出到标准输出 buildctl build ... --exporter=oci > output.tar
BuildKit 可通过容器运行 buildkitd 守护进程,并通过远程客户端访问。
bash# 启动 buildkitd 容器(特权模式,暴露 1234 端口) docker run -d --privileged -p 1234:1234 tonistiigi/buildkit --addr tcp://0.0.0.0:1234 # 配置客户端连接地址 export BUILDKIT_HOST=tcp://0.0.0.0:1234 # 验证客户端连接 buildctl build --help
注:
tonistiigi/buildkit镜像可通过本地构建生成,Dockerfile 路径:./hack/dockerfiles/test.Dockerfile。
bashbuildctl du -v # 查看缓存使用情况(-v 显示详细信息)
bashbuildctl debug workers -v # 查看工作节点状态(-v 显示详细信息)
BuildKit 支持通过 OpenTracing 追踪构建过程,以 Jaeger 为例:
bashdocker run -d -p 6831:6831/udp -p 16686:16686 jaegertracing/all-in-one:latest
bashexport JAEGER_TRACE=0.0.0.0:6831 # Jaeger 收集器地址
buildkitd 和 buildctl,构建任务将被追踪,可通过 [***] 查看追踪结果。BuildKit 测试使用的 runc 版本与 containerd 项目一致,详情参考 https://github.com/containerd/containerd/blob/v1.1.3/RUNC.md%E3%80%82
详情参考 https://github.com/moby/buildkit/blob/master/docs/rootless.md%E3%80%82
bashmake test # 容器化环境中运行所有单元和集成测试
测试选项
测试特定包:
bashmake test TESTPKGS=./client # 仅测试 client 包
运行特定测试(含工作节点组合):
bashmake test TESTPKGS=./client TESTFLAGS="--run /TestCallDiskUsage -v"
指定工作节点后端测试:
bash# 支持的后端:oci, oci-rootless, containerd, containerd-1.0 make test TESTPKGS=./client TESTFLAGS="--run //worker=containerd -v"
bash# 修改 vendor.conf 后更新依赖 make vendor
bashmake validate-all # 验证代码格式、依赖等
以下是 tonistiigi/buildkit 相关的常用 Docker 镜像,适用于 不同场景 等不同场景:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。




来自真实用户的反馈,见证轩辕镜像的优质服务