Moby 开发环境准备指南:Linux/macOS 下配置 Git、Make 与 Docker 的必要软件
本文基于 Moby 官方贡献者文档 software-required.md,讲解在 Linux 或 macOS 机器上开始 Moby 引擎(Docker Engine 的开源核心)开发前需要安装的必要软件:GitHub 账号、git、make 和 docker。读完本文,你将理解 Moby“开发环境容器化”这一独特设计——为何本地无需安装 Go 工具链——并能结合仓库中的 Makefile 与 Dockerfile 源码,掌握 make shell 开发容器的构建原理与后续开发流程的衔接方式。
总览:贡献 Moby 前的软件清单
按照 software-required.md 的说明,在开始贡献之前,你需要准备以下四项:
- 一个 GitHub 账号(免费账号即可,所有 Moby 项目仓库都是公开的)
gitmakedocker
文档中特别指出:go(Moby 的编写语言)不在清单里。这是因为 Moby 的开发环境本身会以容器形式提供 Go 工具链——你在宿主机上只需要 docker,就能获得完整的编译环境。这个设计的实现依据可以在仓库中找到:
- 根目录 Dockerfile 定义了开发镜像,其中声明了
ARG GO_VERSION=1.26.8,并基于golang:${GO_VERSION}-${BASE_DEBIAN_DISTRO}基础镜像构建,Go 环境被固化在开发镜像里; - 根目录 go.mod 声明了模块
github.com/moby/moby/v2及go 1.26.3的语言版本要求,进一步印证了 Go 工具链由开发环境统一供给,而非依赖贡献者本地安装; - hack/make.sh 脚本头部注释明确说明:“该脚本设计为在源码根目录
Dockerfile指定的容器内运行,正确调用方式是从 Docker 仓库检出目录中执行make”,即构建入口始终是 Makefile 驱动的开发容器。
此外,文档建议贡献者同时熟悉 GitHub 图形界面与命令行 git 两种操作方式。如果你使用 Windows,则应参考另一份文档 software-req-win.md。
Task 1:准备一个 GitHub 账号
贡献 Moby 需要一个 GitHub 账号,免费账号即可。所有 Moby 项目仓库都是公开的、对所有人生效可见的。
这一步与后续流程的衔接在于:set-up-git.md 中的第一个任务就是使用这个账号 Fork moby/moby 仓库并克隆到本地。Moby 采用“Fork + Pull Request”的协作模式,所有仓库均为公开仓库,因此账号权限上没有特殊门槛。
Task 2:安装 git
在本地系统安装 git,并可用以下命令验证是否已正确安装:
$ git --version
原文档注明其写作时使用的是 git 版本 2.2.2,你的系统上的版本会因操作系统不同而有所差异——文档本身不强制特定版本,只需 git 可用即可。
从仓库结构看,git 的作用贯穿整个贡献流程:
- set-up-git.md 要求配置
user.name与user.email,并为提交添加 DCO 签名(git commit -s生成Signed-off-by: ...行); - 根目录 Makefile 中的
DOCKER_GITCOMMIT := $(shell git rev-parse HEAD)说明每次构建都会从git读取当前 HEAD 提交号并注入二进制版本信息; - hack/make.sh 还会检查
git status --porcelain,如果工作区存在未提交改动,版本号会被加上-unsupported后缀。
Task 3:安装 make
安装 make,并可用以下命令验证:
$ make -v
原文档写作时使用 GNU Make 3.81,实际版本同样因操作系统而异。
make 在 Moby 开发中不是可有可无的工具,而是整个开发流程的统一入口。查看根目录 Makefile 可以看到,几乎所有开发动作都由 make 目标驱动:
| 目标 | 作用 |
|---|---|
make shell |
构建开发镜像(docker-dev)并启动一个交互式 shell 进入其中 |
make dev |
构建后运行 hack/dev.sh,以 dev 模式启动 |
make binary / make dynbinary |
通过 buildx bake 构建静态/动态链接的 Linux 二进制 |
make test |
运行单元、集成与 docker-py 测试 |
make validate |
运行 DCO、gofmt、golint、go vet 等全套校验 |
make win |
交叉编译 Windows 二进制 |
make shell 的关键逻辑值得展开:Makefile 中 shell 目标依赖 build,build 会通过 $(DOCKER) buildx build 以 --target=dev 构建标签为 docker-dev(DOCKER_IMAGE := docker-dev)的镜像;随后 shell 目标执行 $(DOCKER_RUN_DOCKER) bash,即 docker run --rm --privileged ... docker-dev bash 进入容器。Makefile 还定义了 DOCKER_MOUNT 逻辑:默认把当前目录挂载到容器内的 /usr/src/moby/,并额外挂载 bundles 卷、.git 目录以及 docker-dev-cache、docker-mod-cache 两个缓存卷——这解释了为什么宿主机上的代码修改能实时反映在容器内的构建中。
Task 4:安装或升级 Docker
如果尚未安装 Docker,请按对应操作系统的官方安装说明完成安装;如果已有安装,请检查版本并尽量使用最新的 Docker 版本。文档建议 Moby 开发者运行最新稳定版的 Docker 软件。
检查 Linux 上是否已安装 docker:
docker --version
Docker version 17.10.0-ce, build f4ffd25
在 macOS 或 Windows 上,应当安装的是 Docker for Mac 或 Docker for Windows(文档写作时的对应产品形态):
$ docker --version
Docker version 17.10.0-ce, build f4ffd25
注意宿主机 Docker 版本与容器内被测版本的关系:在 set-up-dev-env.md 的“Moby inception”流程中,你会在宿主机用最新 docker 运行开发容器,而在容器内部则运行由你自己编译的 dockerd 开发版本。容器内的 docker CLI 客户端与 dockerd 服务端版本可能不一致,这是因为 Docker CLI 组件已从 Moby 项目拆分出去单独维护;Makefile 通过 DOCKERCLI_VERSION、DOCKERCLI_REPOSITORY 等 build-arg(见 Makefile 中的 DOCKER_BUILD_ARGS)固定集成测试所用 CLI 的版本,也支持通过 DOCKER_CLI_PATH 环境变量注入自编译的 Linux 版 CLI 二进制供 integration-cli 测试使用。
Linux 用户提示:将用户加入 docker 组
原文档假定你已将当前用户加入系统的 docker 组。可用 getent 检查该组成员:
$ getent group docker
docker:x:999:ubuntu
如果命令没有返回匹配结果,你有两个选择:
- 在执行后续
docker命令时都加上sudo前缀; - 或将你的用户加入
docker组:
$ sudo usermod -aG docker ubuntu
修改生效前必须退出并重新登录。
下一步:与 Moby 开发流程的衔接
本文档是 Moby 贡献者指南(docs/contributing/README.md)中的第二环,后续路径为:
- 配置 IDE(可选):set-up-ide.md 讲解如何让 IDE 正确识别 Moby 项目;
- 配置 Git:set-up-git.md 涵盖 Fork/Clone 仓库、配置 DCO 签名(
Signed-off-by)、添加upstreamremote、创建并推送特性分支的完整操作; - 开发容器:set-up-dev-env.md 演示如何执行
make shell进入开发容器、用hack/make.sh binary编译dockerd二进制、以-D(调试模式)后台启动守护进程,并跑通hello-world验证。
从源码结构看,这条流程的技术支撑就是仓库根部的三个文件:Dockerfile 定义开发环境依赖(系统库、Go 1.26.8 工具链与 Go 依赖),Makefile 编排 build/shell/test 等目标并透传数十个环境变量(BUILDFLAGS、KEEPBUNDLE、TESTFLAGS、TEST_FILTER 等,见其中 DOCKER_ENVS 列表),hack/make.sh 则负责容器内实际的二进制构建(读取根目录 VERSION 文件、注入 DOCKER_GITCOMMIT、按 git 工作区状态决定版本是否标记为 -unsupported)。
理解了这些,你就可以按“宿主机只需 git + make + docker”的最小依赖集,在 Linux 或 macOS 上平滑进入 Moby 的核心引擎开发。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0622
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00