现已推出!阅读 10 月份的新功能和修复。

在 WSL 2 中使用 Docker

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

去年 6 月,Docker 团队 宣布 他们将投资使 Docker 在 Windows 子系统 (WSL) 中运行。所有这些都是通过最近对 WSL 架构进行的更改才成为可能,这些更改是在轻量级虚拟机 (VM) 中运行,我们在之前的 关于 WSL 2 的博文中 谈到了这一点。自此公告发布以来,Docker 团队发布了 Docker 技术预览,其中包括对在 WSL 2 中运行的支持。

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

工作原理

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

Docker in WSL 2

图片版权:Docker 工程

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

设置

首先是一些先决条件

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

Docker Desktop WSL integration dialog

此选项将允许您通过 Docker CLI 直接从 Linux 发行版访问 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 预览体验计划慢速通道非常稳定,但您可能会遇到一些问题。如果您确实发现某些功能无法按预期工作,请通过 Windows 中的反馈工具打开一个问题。任何直接的 Docker 问题或反馈都可以在 Docker for Windows 存储库中记录。

祝您编码愉快!

Matt Hernandez,VS Code 程序经理 @fiveisprime