现已发布!阅读关于 11 月新增功能和修复的内容。

在WSL 2中使用Docker

2020年3月2日,作者:Matt Hernandez,@fiveisprime

去年六月,Docker团队宣布他们将投入资源使Docker与适用于Linux的Windows子系统(WSL)协同运行。这一切都得益于WSL架构的最新变化,使其能够在轻量级虚拟机(VM)中运行,我们在较早的关于WSL 2的博文中讨论过这一点。自宣布以来,Docker团队已经发布了Docker的技术预览版,其中包括对WSL 2运行的支持。

本文将解释Docker Desktop技术预览版的工作原理,以及如何将Docker扩展与技术预览版一起使用。

工作原理

这种新的Docker架构与Visual Studio Code的WSL远程开发支持非常相似,即在主机上运行的Docker CLI在远程WSL VM上运行的Docker集成包中执行命令。

Docker in WSL 2

图片来源:Docker Engineering

DockerD直接在WSL内部运行,因此不再需要Hyper-V VM,所有Linux容器都在Windows上的Linux用户空间内运行,从而提高了性能和兼容性。

设置

首先是先决条件

安装后,Docker会识别您已安装WSL并提示启用WSL集成。对于本教程,您需要启用WSL集成

Docker Desktop WSL integration dialog

此选项将允许您直接从Linux发行版内部通过Docker CLI访问Docker Desktop。

如果您有多个Linux发行版,请确保仅在Docker设置中为正确的发行版开启WSL集成

Docker settings dialog

配置完成后,所有命令都将在Linux上下文中执行——这包括从PowerShell运行的Docker命令,因此运行诸如docker run mongo…之类的命令将在WSL VM中启动一个Linux容器。

docker run mongo command

在WSL中运行docker ps命令,您将看到预期的容器。请注意容器ID是匹配的。

docker ps command in WSL

使用VS Code

完成设置并运行后,您可以安装VS Code Docker扩展并访问您的容器。如果您已经在使用WSL 2和WSL扩展,这将帮助您将Docker集成到WSL工作流中,而无需在需要容器时切换上下文。而且由于Docker CLI的上下文设置为使用WSL中的DockerD,因此无论您是否使用WSL扩展打开VS Code,该扩展都将与您的容器协同工作。

请注意在下面的截图中,我连接并正在WSL中工作,并且仍然在构建/运行容器,而无需更改我偏好的环境(Ubuntu中的zsh)。

VS Code working with containers in WSL

主题:Noctis Sereno

我个人注意到使用此配置后容器执行时间有了巨大的改进,并且我典型的开发工作流程的每个部分都保持不变。我还在WSL内部使用开发容器扩展来测试特定环境,而无需直接在我的机器上进行设置。

我们需要您的反馈

请记住,您正在使用预发布软件,虽然Windows Insiders Slow ring非常稳定,但您可能会遇到一些问题。如果您确实发现某些功能未按预期工作,请通过Windows中的反馈工具打开问题。任何直接的Docker问题或反馈都可以在Docker for Windows repo中记录。

编码愉快!

Matt Hernandez,VS Code项目经理 @fiveisprime

© . This site is unofficial and not affiliated with Microsoft.