首页
/ Moby 开发环境准备指南:Linux/macOS 下配置 Git、Make 与 Docker 的必要软件

Moby 开发环境准备指南:Linux/macOS 下配置 Git、Make 与 Docker 的必要软件

2026-09-04 11:34:18作者:宣利权Counsellor

本文基于 Moby 官方贡献者文档 software-required.md,讲解在 Linux 或 macOS 机器上开始 Moby 引擎(Docker Engine 的开源核心)开发前需要安装的必要软件:GitHub 账号、gitmakedocker。读完本文,你将理解 Moby“开发环境容器化”这一独特设计——为何本地无需安装 Go 工具链——并能结合仓库中的 MakefileDockerfile 源码,掌握 make shell 开发容器的构建原理与后续开发流程的衔接方式。

总览:贡献 Moby 前的软件清单

按照 software-required.md 的说明,在开始贡献之前,你需要准备以下四项:

  • 一个 GitHub 账号(免费账号即可,所有 Moby 项目仓库都是公开的)
  • git
  • make
  • docker

文档中特别指出: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/v2go 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.nameuser.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 目标依赖 buildbuild 会通过 $(DOCKER) buildx build--target=dev 构建标签为 docker-devDOCKER_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-cachedocker-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_VERSIONDOCKERCLI_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

如果命令没有返回匹配结果,你有两个选择:

  1. 在执行后续 docker 命令时都加上 sudo 前缀;
  2. 或将你的用户加入 docker 组:
$ sudo usermod -aG docker ubuntu

修改生效前必须退出并重新登录。

下一步:与 Moby 开发流程的衔接

本文档是 Moby 贡献者指南(docs/contributing/README.md)中的第二环,后续路径为:

  1. 配置 IDE(可选):set-up-ide.md 讲解如何让 IDE 正确识别 Moby 项目;
  2. 配置 Gitset-up-git.md 涵盖 Fork/Clone 仓库、配置 DCO 签名(Signed-off-by)、添加 upstream remote、创建并推送特性分支的完整操作;
  3. 开发容器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 等目标并透传数十个环境变量(BUILDFLAGSKEEPBUNDLETESTFLAGSTEST_FILTER 等,见其中 DOCKER_ENVS 列表),hack/make.sh 则负责容器内实际的二进制构建(读取根目录 VERSION 文件、注入 DOCKER_GITCOMMIT、按 git 工作区状态决定版本是否标记为 -unsupported)。

理解了这些,你就可以按“宿主机只需 git + make + docker”的最小依赖集,在 Linux 或 macOS 上平滑进入 Moby 的核心引擎开发。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
527
590
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
904
1.82 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
docsdocs
暂无描述
Markdown
889
5.78 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.52 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.33 K
1.45 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
981
502
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384