在WSL 2中使用Docker

2020年3月2日,由Matt Hernandez撰写,@fiveisprime

去年六月,Docker团队宣布他们将投资于让Docker在Windows Subsystem for Linux (WSL)上运行。这一切都得益于WSL架构最近的改变,使其能够在一个轻量级虚拟机(VM)中运行,我们在之前的一篇关于WSL 2的博客文章中讨论过这一点。自这一宣布以来,Docker团队已经发布了一个技术预览版的Docker,其中包括对WSL 2的支持。

本文解释了Docker Desktop技术预览版的工作原理以及如何在技术预览版中使用Docker扩展。

它是如何工作的

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

WSL 2中的Docker

图片来源:Docker Engineering

DockerD 直接在 WSL 中运行,因此不需要 Hyper-V 虚拟机,所有 Linux 容器都在 Windows 上的 Linux 用户空间中运行,以提高性能和兼容性。

开始设置

首先是一些先决条件:

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

Docker Desktop WSL 集成对话框

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

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

Docker设置对话框

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

docker运行mongo命令

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

WSL中的docker ps命令

使用 VS Code

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

请注意在下面的截图中,我连接并在WSL中工作,仍然在不改变我首选环境(Ubuntu中的zsh)的情况下构建/运行容器。

VS Code 在 WSL 中使用容器

主题:夜光宁静

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

我们想要您的反馈

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

编程快乐!

Matt Hernandez,VS Code 项目经理 @fiveisprime