在 WSL 2 中使用开发容器
2020 年 7 月 1 日,Brigit Murtaugh,@BrigitMurtaugh
利用 Docker 容器和 Windows Subsystem for Linux 2 (WSL 2) 的强大功能,您可以通过在深度集成的 Linux 内核中的容器的沙盒熟悉环境中开发应用程序来保留您的 Windows 环境。
五月为我们带来了虚拟化领域的两个令人兴奋的公告:Windows 10 2020 年 5 月更新添加了 WSL 2 作为开箱即用的功能,并且 Docker Desktop Stable 2.3.0.2 发布了对 WSL 2 后端的支持。
在之前的博客文章中,我们探讨了如何在 WSL 2 中使用 Docker。第一个要求是安装 Windows Insiders,因为 WSL 2 支持还不是稳定的 Windows 版本的一部分,第二个要求是安装 Docker WSL 2 的技术预览版。现在,Windows WSL 2 和 Docker 支持都已在稳定的 GA 版本中!
在这篇文章中,我们将了解这两种工具是如何工作的,以及如何在 Visual Studio Code 中利用它们来高效地在 WSL 2 中使用开发容器。
虚拟化的新时代
WSL 2 和最新版本的 Docker Desktop 都改变了虚拟化的工作方式。
WSL 2
正如在之前的文章中所讨论的,WSL 2 通过在轻量级虚拟机 (VM) 中使用真正的 Linux 内核,在 Windows Subsystem for Linux 上采用了新的方法。它经过优化,可以无缝地深度集成到您的 Windows 环境中,从而使您拥有快速的启动时间、较小的资源占用空间,并且没有任何虚拟机配置或管理要求。
系统调用允许您执行诸如访问文件、请求内存和创建进程之类的功能。由于 WSL 2 包含完整的 Linux 内核,因此它具有完整的系统调用能力,这意味着您最喜欢的应用程序(如 Docker)将完全可靠地工作。
Docker
在 WSL 1 中,由于 Windows 和 Linux 之间的根本差异,Docker Engine 无法直接在 WSL 内部运行,Docker 团队使用 Hyper-V 虚拟机和 LinuxKit 开发了一种替代解决方案。但是,由于 WSL 2 现在具有完整的系统调用能力,因此 Docker 可以在 WSL 2 中完全运行,这促使 Docker 团队进行了更多投资。
新的 2020 年 5 月版 Docker Desktop 可以更快地构建容器并消耗更少的资源,因为它利用了 WSL 2 的动态内存分配。它可以少于 10 秒进行冷启动,而之前的版本几乎需要一分钟。此外,Hyper-V 不再是必需的,因此本文中详细介绍的步骤适用于 Windows 10 家庭版。
由于 Windows 中的 WSL 2 和 Docker Desktop 现在都是 GA,因此您可以使用 WSL 2 中开发容器时更加自信。
入门
先决条件
- 安装 Windows 10,版本 2004。
- 要查找您的设备正在运行的 Windows 版本,请按 Windows 徽标键 + R,在打开框中键入 winver,然后选择确定。
- 安装 Visual Studio Code。
- 按照 WSL 2 安装指南 启用 WSL 2。
- 从 Microsoft 商店 安装 Ubuntu(或您首选的 Linux 发行版)。
- 安装Docker Desktop Stable 2.3.0.2。
安装完成后,Docker 将识别出您已安装 WSL 并提示您启用 WSL 集成。从弹出窗口中选择启用 WSL 集成。
可选:安装新的 Windows Terminal 以获得最佳体验,包括在同一界面中打开新的 PowerShell 和 Ubuntu 终端的功能。
在 WSL 2 中打开 VS Code
让我们将 VS Code 连接到我们的 WSL 2 引擎。打开一个 Ubuntu 终端,导航到您选择的源代码文件夹,然后键入 code .
。这将启动一个 VS Code 实例,使您可以使用 WSL 作为您的全职开发环境。您还可以从命令面板连接到 WSL。我将打开一个简单的 HelloNode 应用程序
VS Code 打开后,它会识别出我们已安装 WSL,并建议我们安装 WSL 扩展。我将选择安装
安装扩展后,我们可以重新加载 VS Code 以连接到 WSL 2
重新加载后,我们可以通过检查窗口左下角的 WSL 指示器来确认我们已连接到 Ubuntu
安装 WSL 扩展会将远程资源管理器添加到 VS Code。当我们查看资源管理器内部时,我们可以看到有关我们的 Linux 发行版的信息
使用容器
除了各种其他场景(例如),我们还可以利用 开发容器扩展来查看和附加到容器:
这些配置允许您轻松地在多台计算机上重新创建相同的开发环境,将特定于项目的工具和扩展安装到 DevContainer 中,并在类似于部署环境的设置中进行开发,从而使本地计算机保持不变。我们还可以使用 Docker 扩展来查看和附加到容器。
虽然在使用 WSL 2 引擎时,您可以从 Windows 和 WSL 2 文件系统访问源代码,但我们建议使用 WSL 2 文件系统,因为 性能要好得多。由于使用 WSL 2 内部的文件系统时性能更好,让我们来演练一下如何使用它。
我们需要选择要在容器中打开的文件夹。首先,请确保您已安装 开发容器 扩展。然后,我们可以从已经使用 WSL 扩展打开的文件夹中调用 开发容器:在容器中重新打开 命令。
我在我的 WSL 2 文件系统上有一个现有的 HelloNode 文件夹,其中包含我的 Node 项目。我将选择:开发容器:在容器中重新打开
由于存储库中还没有开发容器配置,因此将出现容器定义列表。出现的容器配置定义列表是根据我的项目类型进行筛选的。我将选择 Node.js 14
一个新的 VS Code 实例将打开。VS Code 开始构建映像,然后启动我们的容器
我们的应用程序现在有一个 .devcontainer 文件夹,其中存储了容器配置信息。为了再次检查我们是否同时连接到 WSL 和容器内部,让我们打开集成终端并检查 uname
和 Node 版本
正如我们所见,我们的 uname
返回为 Linux,因此我们仍然连接到 WSL 2 引擎,并且 node -v
返回 v14.4.0,因此我们已成功配置了我们的 Node 14 容器。
让我们尝试使用 F5 运行我们的应用程序
成功!
反馈和延伸阅读
为了帮助使用 WSL 和容器设置 VS Code,我们在 VS Code 远程开发文档中提供了详细的文章。如果您对我们的团队有任何问题或反馈,请随时在 VS Code 远程开发 GitHub 存储库上打开问题,或在 Twitter 上发送推文 @code。
编码愉快!
Brigit Murtaugh,VS Code 项目经理 @BrigitMurtaugh