本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com

BuildKit 是一个工具包,用于以高效、可表达且可重复的方式将源代码转换为构建产物。它提供了先进的构建能力,支持复杂的依赖管理、高效缓存和多格式输出,旨在替代传统构建工具,优化容器镜像及其他构建产物的构建流程。
docker build)以下命令将 buildkitd(守护进程)和 buildctl(客户端工具)安装到 /usr/local/bin:
# 编译并安装 $ make && sudo make install # 如需仅构建特定工作节点版本(如仅 containerd 或仅 OCI) $ make binaries-all # 生成 buildkitd.containerd_only 和 buildkitd.oci_only
buildkitd --debug --root /var/lib/buildkit
--debug:启用调试日志--root:指定构建数据存储根目录(默认:/var/lib/buildkit)--oci-worker:启用/禁用 OCI (runc) 工作节点(默认:true)--containerd-worker:启用/禁用 containerd 工作节点(默认:false)BuildKit 支持两种工作节点后端:
切换至 containerd 后端:
buildkitd --oci-worker=false --containerd-worker=true
BuildKit 构建基于名为 LLB(Low-Level Build)的二进制中间格式,用于定义构建过程中进程的依赖图。LLB 类似于 "Dockerfile 的 LLVM IR",具有以下特性:
LLB 格式定义见 solver/pb/ops.proto。目前支持的 LLB 高级语言包括 Dockerfile 及自定义语言(可通过 PR 添加)。
通过示例脚本生成并查看 LLB 构建图:
# 生成 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通过 dockerfile.v0 前端解析 Dockerfile:
# 基本构建(上下文和 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 路径)为简化 Dockerfile 构建,可使用 build-using-dockerfile 包装工具(语法类似 docker build):
# 编译并安装工具 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)获取构建结果,支持以下导出方式:
需使用 containerd 工作节点:
# 导出镜像到 containerd buildctl build ... --exporter=image --exporter-opt name=docker.io/username/image # 查看 containerd 中的镜像 ctr --namespace=buildkit images ls
buildctl build ... \ --exporter=image \ --exporter-opt name=docker.io/username/image \ # 镜像名称(含仓库地址) --exporter-opt push=true # 启用推送
注:如需认证,
buildctl会自动读取 Docker 配置文件(~/.docker/config.json)。
将构建产物直接复制到客户端本地目录(适用于非容器镜像构建):
buildctl build ... --exporter=local --exporter-opt output=path/to/output-dir
通过 tarball 导出并加载到 Docker:
# 导出为 Docker 兼容 tarball 并加载 buildctl build ... --exporter=docker --exporter-opt name=myimage | docker load
# 导出到指定路径 buildctl build ... --exporter=oci --exporter-opt output=path/to/output.tar # 导出到标准输出 buildctl build ... --exporter=oci > output.tar
BuildKit 可通过容器运行 buildkitd 守护进程,并通过远程客户端访问。
# 启动 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。
buildctl du -v # 查看缓存使用情况(-v 显示详细信息)
buildctl debug workers -v # 查看工作节点状态(-v 显示详细信息)
BuildKit 支持通过 OpenTracing 追踪构建过程,以 Jaeger 为例:
docker run -d -p 6831:6831/udp -p 16686:16686 jaegertracing/all-in-one:latest
export JAEGER_TRACE=0.0.0.0:6831 # Jaeger 收集器地址
buildkitd 和 buildctl,构建任务将被追踪,可通过 [***] 查看追踪结果。BuildKit 测试使用的 runc 版本与 containerd 项目一致,详情参考 containerd 的 RUNC.md。
详情参考 docs/rootless.md。
make test # 容器化环境中运行所有单元和集成测试
测试特定包:
make test TESTPKGS=./client # 仅测试 client 包
运行特定测试(含工作节点组合):
make test TESTPKGS=./client TESTFLAGS="--run /TestCallDiskUsage -v"
指定工作节点后端测试:
# 支持的后端:oci, oci-rootless, containerd, containerd-1.0 make test TESTPKGS=./client TESTFLAGS="--run //worker=containerd -v"
# 修改 vendor.conf 后更新依赖 make vendor
make validate-all # 验证代码格式、依赖等


免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429