资讯动态

Moby 如何用 buildx bake 构建和交叉编译 dockerd 二进制

发布时间:2026/9/9 18:52:38 来源:尧图企业网站定制
Moby 如何用 buildx bake 构建和交叉编译 dockerd 二进制【免费下载链接】mobyThe Moby Project - a collaborative project for the container ecosystem to assemble container-based systems项目地址: https://gitcode.com/GitHub_Trending/mo/moby如果你有一份 Moby 源码想把它编译成dockerd以及docker-proxy可执行文件或者需要为linux/arm64等其他架构交叉编译出二进制仓库根目录已经内置了完整的构建入口根目录的 Dockerfile 配合 Docker Buildx 和 BuildKit 完成编译docker-bake.hcl则把所有构建场景组织成一组 bake target让你用docker buildx bake一条命令完成构建。本文基于 docs/contributing/ctn-build.md、docker-bake.hcl、Makefile 和 Dockerfile 的实际内容给出从构建本机二进制到多平台交叉编译的完整操作路径。准备条件docs/contributing/software-required.md 要求本地具备git、make和docker。注意 Go 不需要单独安装——Moby 的开发环境由容器提供。所有docker buildx bake命令都需要在 Moby 仓库根目录即Dockerfile和docker-bake.hcl所在目录下执行。如果你还要在容器里开发、调试可以按 docs/contributing/set-up-dev-env.md 先用make shell构建开发环境镜像并进入容器首次构建该镜像可能需要 515 分钟。本文的构建命令只依赖 Docker Buildx不依赖先进入开发容器。构建当前平台的 dockerd最短主路径是构建当前主机平台的二进制# 构建当前主机平台的二进制 # 默认输出到 ./bundles/binary-daemon docker buildx bake # 或者显式指定 target docker buildx bake binary不带 target 时bake 执行的是 docker-bake.hcl 中defaultgroup 里的binarytarget。binarytarget 输出dockerd和docker-proxy两个二进制默认落在./bundles/binary-daemon。Makefile 中同样提供了等价入口它内部就是调用docker buildx bake binarymake binary # 静态链接的 linux 二进制 make dynbinary # 动态链接版本输出目录由 bake 变量DESTDIR控制。在 docker-bake.hcl 中DESTDIR默认为空此时输出到./bundles/binary|dynbinary-daemon设置DESTDIR后直接输出到指定目录# 输出到 ./bin 而不是 ./bundles/binary-daemon DESTDIR./bin docker buildx bake默认构建产物是静态链接的二进制docker-bake.hcl中DOCKER_STATIC变量默认为1Dockerfile 的 build 阶段在DOCKER_STATIC1时会构建binary目标并用xx-verify --static校验dockerd与docker-proxy。如果需要动态链接版本# 构建动态链接二进制默认输出到 ./bundles/dynbinary-daemon DOCKER_STATIC0 docker buildx bake # 或者 docker buildx bake dynbinarydocker-bake.hcl还透传了一组可用于定制构建的变量DOCKER_DEBUG、DOCKER_LDFLAGS、DOCKER_BUILDTAGS、DOCKER_GITCOMMIT、VERSION、PLATFORM、PRODUCT等。其中DOCKER_GITCOMMIT默认为 null而 Makefile 会执行git rev-parse HEAD并自动导出它所以走make入口时 git commit 会被带入构建。VERSION默认为空hack/make.sh 在版本为空时回退为dev。交叉编译到多平台要一次构建所有受支持的平台使用binary-crosstarget它继承binary并附加 docker-bake.hcl 中_platformstarget 定义的平台列表# 构建所有受支持平台的二进制 docker buildx bake binary-cross受支持平台列表为linux/amd64 linux/arm/v5 linux/arm/v6 linux/arm/v7 linux/arm64 linux/ppc64le linux/s390x windows/amd64如果只需要某一个平台用--set覆盖*.platform# 只为 linux/arm64 构建 docker buildx bake --set *.platformlinux/arm64Makefile 中对应的等价命令是make cross # 内部执行: docker buildx bake binary-cross make win # 内部执行: docker buildx bake --set *.platformwindows/amd64 binary构建包含配套工具的完整二进制集可选binary只产出dockerd和docker-proxy。如果需要连同containerd、runc等配套工具一起构建docker-bake.hcl 中注释为 same as binary but with extra tools as well (containerd, runc, ...)使用alltargetDockerfile 中all阶段会把 tini、runc、containerd、rootlesskit、containerutility 以及 build 阶段的产物一起拷出# 构建完整二进制含 containerd、runc 等当前平台 docker buildx bake all # 所有受支持平台 docker buildx bake all-cross这一步属于可选分支只想要dockerd本身时用前面的binary/binary-cross即可。验证构建结果仓库把构建产物的冒烟检查做成了独立 targetbinary-smoketestDockerfile 的smoketest阶段。它对产物执行file dockerd、dockerd --version、file docker-proxy、docker-proxy --version确认二进制类型和可执行性docker buildx bake binary-smoketestbinary-smoketest的平台列表为linux/amd64、linux/arm/v6、linux/arm/v7、linux/arm64、linux/ppc64le、linux/s390x其 output 为typecacheonly即只做构建验证、不落地文件。docs/contributing/set-up-dev-env.md 中给出了容器内hack/make.sh binary的输出文档示例路径与平台以你实际环境为准--- Making bundle: binary (in bundles/binary) Building bundles/binary-daemon/dockerd (linux/amd64)... Created binary: bundles/binary-daemon/dockerd Building bundles/binary-daemon/docker-pox... Created binary:bundles/binary-daemon/docker-proxy对照这个示例构建成功的标志是能在输出目录默认./bundles/binary-daemon看到dockerd和 Linux 平台下的docker-proxy文件。构建完成后也可以在目标机器上直接运行dockerd --version确认版本信息。打包为镜像分发可选如果需要把完整二进制打包进一个不可运行的镜像便于通过 registry 分发docs/contributing/ctn-build.md 中提到这对配合 undock 使用或经 registry 共享有用使用bin-imagetarget# 构建包含完整二进制的镜像 docker buildx bake bin-image # 使用自定义 tag把 foo/moby-bin 替换为你自己的 registry/仓库名 docker buildx bake bin-image --set *.tagsfoo/moby-bin:latest # 所有平台的多架构镜像 docker buildx bake bin-image-cross --set *.tagsfoo/moby-bin:latest --push注意文档明确说明多平台镜像必须直接 push 到 registrybin-image-cross的 output 是typeimage不能先保存为本地镜像再推送。限制与边界受支持平台以上面_platforms列表为准Windows 仅有windows/amd64交叉构建到未列出的架构不被 docker-bake.hcl 支持。docker buildx bake all的 complete 二进制包含 containerd、runc 等工具与binary的产物内容不同不要混用两者的输出目录做后续判断。构建依赖 Docker Buildx 和 BuildKit根目录 Dockerfile 第一行声明# syntaxdocker/dockerfile:1即需要 BuildKit 语法支持首次构建需要拉取并编译大量依赖耗时会明显长于日常构建。完成构建后如果你要在容器内用新编出的dockerd启动守护进程做开发调试docs/contributing/set-up-dev-env.md 给出了后续路径make install把二进制拷入容器的/usr/local/bin/再用dockerd -D 以 debug 模式启动。【免费下载链接】mobyThe Moby Project - a collaborative project for the container ecosystem to assemble container-based systems项目地址: https://gitcode.com/GitHub_Trending/mo/moby创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价