Docker Desktop 的性能和稳定性,很大程度上取决于底层虚拟化层。Docker 现在推出 Docker VMM,将原本依赖的第三方虚拟化组件替换为由 Docker 自己控制和优化的虚拟机监控器,目标是让虚拟机行为更贴近容器工作负载。Docker VMM 已随 Docker Desktop 4.86 在 Mac 和 Windows 上开启公开 Beta。
为什么要重写虚拟化层
Docker Desktop 并不是直接在宿主操作系统上运行 Linux 容器。对于需要 Linux 内核的容器,Docker Desktop 通常要管理一个轻量级虚拟机。这个虚拟机负责提供内核、文件系统、网络和容器运行时所需的基础环境,因此虚拟化层会直接影响几个日常体验:
- 执行
docker build时的构建速度。 - 容器启动、停止和重建的响应时间。
- 宿主机目录挂载到容器后的读写性能。
- Docker Desktop 占用的 CPU、内存和磁盘资源。
- 开发者修改代码后,热重载和测试反馈的速度。
Docker VMM 的核心变化不只是“换了一个虚拟机实现”,而是把虚拟化层纳入 Docker 自己的产品控制范围。这样,Docker 可以围绕容器 workloads 调整虚拟机行为,并把 Docker Desktop 的开发体验与底层实现放在同一条优化路径上。
这并不意味着所有项目都会立刻获得同样幅度的性能提升。实际效果仍然会受到镜像层数量、构建缓存、挂载目录规模、磁盘类型、CPU 架构以及项目本身的 I/O 模式影响。公开 Beta 阶段也应当按照测试环境逐步验证,而不是直接把它当成生产环境的唯一基础设施。
从使用者角度看,变化在哪里
对大多数开发者而言,Docker VMM 不需要改变 Dockerfile 或日常命令。现有的镜像、Compose 文件和容器操作方式仍然是主要工作界面。变化发生在 Docker Desktop 管理虚拟机和容器运行环境的内部。
可以把它理解为一条更短的反馈链:
代码修改
↓
文件同步与挂载
↓
容器内构建、测试或热重载
↓
开发者看到结果
虚拟化层越贴合容器的运行方式,这条链路中由虚拟机带来的额外开销就越容易被控制。尤其是频繁构建、运行测试和访问宿主机源码的项目,虚拟化层的行为会比一次性运行长任务更容易被感知。
不过,Docker VMM 并不能替代应用层面的优化。一个没有有效缓存、每次都下载依赖的 Dockerfile,切换虚拟化层后仍然可能很慢;一个把数十万个小文件放在高频跨边界挂载目录中的项目,也可能继续受到 I/O 开销影响。
可以这样验证本地效果
Docker VMM 随 Docker Desktop 4.86 在 Mac 和 Windows 上进入公开 Beta。具体开关位置和可用状态应以本机 Docker Desktop 版本为准。启用或切换后,可以使用相同的镜像和相同的工作负载做前后对比。
下面的命令不依赖特定项目,适合做一个简单的基线测试。它会构建一个很小的 Alpine 镜像,然后运行容器检查 Docker 环境是否可用:
set -eu
workdir="$(mktemp -d)"
trap 'rm -rf "$workdir"' EXIT
cat > "$workdir/Dockerfile" <<'EOF'
FROM alpine:3.20
RUN printf 'build completed\\n'
CMD ["sh", "-c", "uname -a && printf 'container ready\\n'"]
EOF
cd "$workdir"
time docker build --no-cache -t docker-vmm-baseline .
time docker run --rm docker-vmm-baseline
这段测试只能观察一个很小的构建和启动基线。更有价值的做法是使用团队真实项目,记录切换前后的以下指标:
/usr/bin/time -p docker compose build
/usr/bin/time -p docker compose run --rm app ./run-tests.sh
/usr/bin/time -p docker compose up -d
请把 app 和 ./run-tests.sh 替换为项目中的服务名和测试命令。为了让结果可比较,建议固定镜像版本、关闭或明确记录构建缓存状态,并连续执行多次取中位数。不要只比较第一次冷启动,因为镜像拉取和缓存预热可能掩盖虚拟化层差异。
Beta 阶段的采用策略
Docker VMM 的公开 Beta 更适合用于开发机验证和反馈收集。团队可以按下面的顺序推进:
- 在一台非关键开发机上升级到 Docker Desktop 4.86 或更高版本,并确认 Docker VMM 的 Beta 能力是否对该平台可用。
- 选择一个有代表性的项目,覆盖源码挂载、镜像构建、Compose 启动和自动化测试。
- 记录构建耗时、测试耗时、容器启动时间、宿主机资源使用和开发者主观体验。
- 对比切换前后的日志与失败率,特别留意文件挂载、网络和架构相关问题。
- 在团队范围扩大之前,保留回退路径,并避免把 Beta 行为写成所有开发环境都必须依赖的硬性前提。
采用 Docker VMM 的价值,在于 Docker 能直接围绕容器场景持续优化虚拟化层。但在 Beta 阶段,工程判断仍应建立在本地工作负载数据上。先建立基线,再切换并验证,通常比凭感觉判断“更快”更可靠。