在 WSL 2 中使用 Docker
2020 年 3 月 2 日,Matt Hernandez 撰写,@fiveisprime
去年 6 月,Docker 团队宣布他们将投入精力让 Docker 在适用于 Linux 的 Windows 子系统 (WSL) 中运行。这一切都得益于 WSL 架构最近的更改,它现在可以在轻量级虚拟机 (VM) 中运行,我们曾在早期的关于 WSL 2 的博客文章中讨论过。自此宣布以来,Docker 团队发布了 Docker 的技术预览版,其中包含对在 WSL 2 中运行的支持。
本文解释了 Docker Desktop 技术预览版的工作原理以及如何将 Docker 扩展与技术预览版一起使用。
工作原理
这种新的 Docker 架构与 Visual Studio Code 的WSL 远程开发支持非常相似,即在主机上运行的 Docker CLI 在 Docker 集成包中执行命令,该集成包在远程 WSL VM 上运行。

图片来源:Docker Engineering
DockerD 直接在 WSL 中运行,因此无需 Hyper-V VM,并且所有 Linux 容器都在 Windows 上的 Linux 用户空间中运行,以提高性能和兼容性。
设置
首先是一些先决条件
- 安装适用于 WSL 2 的 Windows 10 Insider Preview build 18975 (Slow) 或更高版本。
- 从 Microsoft 商店安装 Ubuntu。
- 按照此指南启用 WSL 2。
- 安装适用于 VS Code 的 WSL 扩展。
- 安装 Docker WSL 2 技术预览版。
安装后,Docker 会识别您已安装 WSL 并提示启用 WSL 集成。您需要为本教程

此选项允许您直接从 Linux 发行版中通过 Docker CLI 访问 Docker Desktop。
如果您有多个 Linux 发行版,请确保您的 Docker 设置中仅为正确的发行版启用了 WSL 集成。

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

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

使用 VS Code
设置并运行后,您可以安装 VS Code Docker 扩展并访问您的容器。如果您已经运行 WSL 2 和 WSL 扩展,这将帮助您将 Docker 集成到 WSL 工作流中,而无需在需要容器时切换上下文。而且由于 Docker CLI 的上下文设置为在 WSL 中使用 DockerD,因此无论您是否使用 WSL 扩展打开 VS Code,该扩展都将与您的容器一起使用。
请注意下面的截图中,我已连接并在 WSL 中工作,并且仍在构建/运行容器,而无需更改我首选的环境(Ubuntu 中的 zsh)。

主题:Noctis Sereno
我个人注意到使用此配置后容器执行时间有了显着改善,并且我典型开发工作流的每个部分都保持不变。我还在 WSL 中使用 Dev Containers 扩展来测试特定环境,而无需直接在我的机器上进行设置。
我们需要您的反馈
请记住,您正在使用预发布软件,虽然 Windows Insiders Slow 环非常稳定,但您可能会遇到一些问题。如果您确实发现有些问题未按预期工作,请通过 Windows 中的反馈工具打开一个问题。任何直接的 Docker 问题或反馈都可以记录在 Docker for Windows 存储库中。
编码愉快!
Matt Hernandez,VS Code 项目经理 @fiveisprime