能否在 Windows 应用中使用 Linux 代码?现在可以了
如果你能在不修改代码的情况下,将 Linux 代码用于 Windows 应用程序中,会怎么样呢?现在,你可以做到了。
Windows 运行容器难题待解
在 Windows 上运行容器从来都不是一件容易的事。虽然有支持 Windows Subsystem for Linux (WSL) 和 Hyper-V 的 Docker Desktop 和 Podman 版本,但发现它们都过于复杂且不稳定。即便它们能正常工作,使用 Linux 虚拟机来托管容器的 Hyper-V 也是最佳选择。但这一切都会带来额外开销,多层虚拟基础设施会阻碍工作,而且每次重启电脑都需要重新构建。
问题的部分原因在于 WSL。它是个不错的工具,但 WSL2 的文件系统集成速度较慢,你只能通过 Visual Studio Code 的远程集成来处理代码,这意味着要在每个正在构建和测试的容器中安装 VS Code Server。如果你使用 Kubernetes,管理的复杂度会更高,让你无法专注于代码。
最后,只能在另一台运行 containerd 的 Linux 服务器上进行大部分容器测试和开发。虽然这样能行得通(且拥有工作站级设备的所有资源),但它不便于携带,而且不知为何,Ubuntu 的远程桌面访问对来说也无法使用。
微软 Build 大会带来转机
好在微软在 2026 年的 Build 大会上围绕 WSL 发布了多项公告,旨在让 Windows 重新成为开发者平台。第一项是改进后的 WSL3,还需要一段时间才能推出;第二项是 WSL 原生容器支持,已于 6 月底发布。目前,社区已经开始开发类似 Docker Desktop 的工具,以帮助监控和管理容器。
推出基于 WSL 的容器平台,与 Build 大会上其他以开发者为中心的 Windows 公告相契合。让 Windows 更像 Linux,是微软对开发者需求的回应,毕竟 Azure 上超 50% 的服务器运行的是 Linux 发行版。Linux 是云原生基础设施的基础,所以开发者无论身处何地,都需要能够基于它进行开发。
开启 WSL 容器之旅
WSL 容器提供了一个新的命令行界面(CLI),可与熟悉的 WSL 并行工作,其命令支持从创建到关闭的整个容器生命周期。要开始使用,你只需将 WSL 安装升级到当前的预发布版本(撰写本文时为 2.9.3)。只需打开管理员 PowerShell 终端,输入 `wsl --update --pre-release`,即可下载并安装最新的 WSL 版本。关闭并重新打开终端(以确保更新了上下文)后,输入 `wslc` 来检查 WSLC 是否已安装,它会列出可用的命令。如果你想将容器工作与 WSL 分开(并避免可能意外影响 WSL 安装的输入错误),新的 CLI 也可作为 WSL 容器的别名。
微软的底层创新
微软利用 WSL 容器在 Windows 中试验 Linux 的新集成点。一个关键变化是使用了新的文件系统,显著加快了容器内对 Windows 的访问速度。另一项改进是为 WSL 容器提供了新的网络模式,可直接通过 Windows 网络栈中继网络连接,确保其能访问与 Windows 相同的资源和安全设置。
在 Windows 应用程序中调用 Linux 容器
当你开始在 Windows 代码中使用 WSL 容器 API 时,事情就变得更有趣了。你可以在桌面应用程序中调用 Linux 容器,利用现有服务,在 CI/CD 管道中构建和部署容器。新的文件系统和网络栈有助于减少跨越两个平台边界时产生的摩擦。
WSL 容器 API 以 NuGet 包的形式提供,支持 C、C# 和 C++。它允许你的代码启动和停止容器,并直接与之交互,发送命令行调用并读取响应。有趣的是,你可以从代码中启动一个容器化服务,并在本地网络端口上公开其 REST 或 gRPC API。微软提供了示例代码,展示了在这个早期阶段的可行性。
微软正在进行一场革命。它将云原生、服务驱动的模式引入 Windows,并利用它弥合数十年的差异化发展。你无需重写在 Linux 上运行的服务,只需将服务容器化,然后通过 WSL 容器 API 启动它。完成后,API 会自动清理,关闭容器并回收其使用的内存。
需要记住的是,这只是一个快速发展平台的首次公开预览。这里有很多机会,比如基于为 WSL1 开发的系统调用转换层,创建一个原生的 Windows 到 Linux 应用程序集成栈,消除使用基于 Web 的服务调用的开销。未来的发展值得期待,而这个首次发布确实非常有趣。
在 Windows 上管理 Linux 容器
如果你想在 Windows 开发硬件上获得类似 Docker Desktop 的容器构建和测试体验,可能不用等太久。WSL 容器的底层 API 已经被用于开发管理和监控容器的工具。其中一个工具是 WSL Container Desktop,正在 GitHub 上进行开发。虽然目前还没有发布版本,但通过克隆源代码仓库并使用.NET CLI 进行构建,就可以轻松编译并运行。你需要安装 Windows App SDK,有些功能还需要访问 Azure CLI。
WSL Container Desktop 采用 C# 编写,拥有 WinUI 前端。目前仅在 x64 上进行了验证,但在 Arm64 电脑上也能编译并运行它,用于测试和运行容器。运行后,它为 WSL 托管的容器提供了一个设计精良的前端,显示正在运行的容器及其使用的资源。你可以将 WSL Container Desktop 连接到 Docker 和 Azure 等容器注册表,以便快速拉取基础容器,然后使用 WSL 容器环境添加自己的代码和自定义设置。
主要交互界面是 WSL Container Desktop 仪表盘,它显示正在运行的容器及其当前资源使用情况。界面元素以卡片形式展示,借鉴了 Windows 自身的用户界面,尤其是其设置应用。从仪表盘,你可以深入了解可用的容器,具备快速启动、停止和重新加载选项,还有扩展功能,包括在浏览器中打开相应端口。用一个包含完整 KDE 网络桌面的容器进行了测试,让能在浏览器中运行一个 Linux 发行版容器。
其他选项包括详细视图,可显示当前日志并提供检查容器状态的工具。在调试和测试容器应用程序时,这类工具很有用,因为它能提供 WSL 容器 CLI 所没有的见解。还有一个选项可帮助你在下载完镜像且不再需要时进行清理,通过分析显示最大的镜像和一段时间未使用的镜像。
除了处理 WSL 容器的工具外,WSL Container Desktop 还提供了一个基本的设置工具,可帮助你配置其外观和与 Windows 的集成方式。
在 Windows 中运行 Kubernetes 进行云原生开发
WSL Container Desktop 一个更实用的功能是能够在 WSL 中快速搭建一个 K3s Kubernetes 实例,用于托管 WSL 容器,为你提供一个本地环境,随时随地构建和测试云原生应用程序。K3s 工具提供了与 Kubernetes 项目自身的 Headlamp UI 类似的体验,让你可以轻松在开发环境和生产 Kubernetes 集群之间切换。
可以说,WSL 容器是那种你原本以为不需要,但现在却离不开的 Windows 功能之一。它简化了在 Windows 中构建容器开发工具链的过程,同时让你能够考虑新一代的混合应用程序,充分利用 Windows 和 Linux 数十年的开发成果。结果是几年前难以想象的:将 Linux 容器嵌入 Windows 应用程序中,并将其视为另一个本地服务。随着 WSL 容器平台的发展,你有望看到更多将 Linux 和 Windows 结合的方式,利用容器打造一个兼具两者优势的混合平台。
分类
开发工具、软件开发、Kubernetes 与容器、云原生、云计算