微软最新推出的 WSL 2 在架构方面发生了重大的变化:它提供了一个在轻量级 VM 中运行的真正 Linux 内核。
使用真正的 Linux 内核意味着可以在 Windows 上运行 ELF64 Linux 二进制文件。对 Docker 来说绝对是利好消息,因为这意味着 Linux 版本的 Docker 可以直接在 WSL 2 中运行。
不过 Docker 的目标并不止于此,对于这个变化以及这项技术,Docker 公司已将其应用到自家的产品上,并在近日宣布目前正在开发针对 WSL 2 的新版 Docker Desktop,计划于 7 月发布公开预览版。它将使 Docker 的开发体验体验更友好、以及解锁更多新功能。
Docker 表示微软在 WSL 2 中采取的架构方案和他们对 LinuxKit 和 Hyper-V 的使用方法非常类似,更重要的是,使用真正 Linux 内核的 WSL 2 与 Windows 集成更紧密。
据 Docker 公司的介绍,微软很早就为他们提供了 WSL 2 的早期版本,以便他们评估这项技术,并了解如何和 Docker Desktop for Windows 结合,使它成为在 Windows 上使用 Docker 的最佳方案。
经过测试后,Docker 守护程序在 WSL 2 中运行良好,性能表现也不俗,冷启动时间仅需要大约 2 秒。
Docker 也表示将使用 WSL 2 的集成包来替代 Hyper-V VM,该软件包将提供与当前 Docker Desktop VM 相同的功能:一键设置 Kubernetes、自动更新、透明的 HTTP 代理配置、从 Windows 访问守护程序以及透明绑定 Windows 文件等等。
此集成包将包含运行 Docker 和 Kubernetes 所需的服务器端组件,以及用于和 WSL 中的这些组件交互的 CLI 工具。最终,Docker Desktop 将会引入一项新功能:Linux 工作区(Linux workspaces)。
现在我们使用 Docker Desktop 时,运行守护程序的 VM 完全不透明:虽然我们可以从 Windows 与 Docker 和 Kubernetes API 进行交互,但除了 Docker 容器或 Kubernetes Pod 之外,无法在 VM 中运行任何内容。
但通过整合 WSL 2,可以体验与 Windows 的无缝集成,这对于开发针对 Linux 环境的项目的开发者或者针对 Linux 定制的构建过程具有巨大的影响 —— 意味着开发者无需再维护用于 Linux 和 Windows 两套不同的构建脚本了。
例如,Docker 的开发者现在可以在 Windows 上运行 Linux Docker 守护程序,使用与 Linux 开发者相同的工具和脚本集:
至于性能方面的问题,为了让 WSL 2 有更好的使用体验,微软在性能和资源分配方面付出了巨大的努力:将 VM 设置为使用动态分配内存的方式,并且可以在所有可用的主机 CPU 上进行任务调度,另外,在主机提供的范围内,消耗所需的最低内存。
Docker Desktop 将利用 WSL 2 的这些特性来大幅改进其资源消耗量,它将根据需要使用尽可能少的 CPU 和内存,并且构建容器等 CPU/内存密集型任务将比现在快得多。
得益于和微软的合作,Docker Desktop for WSL 2 将于 7 月发布技术预览版,支持与当前版本的 Docker Desktop 同时运行。