现已发布!阅读有关一月份的新功能和修复。

在 WSL 2 中使用 Docker

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

去年六月,Docker 团队宣布他们将致力于使 Docker 能够与适用于 Linux 的 Windows 子系统 (WSL) 配合使用。所有这些都得益于 WSL 架构的最新更改,使其能够在轻量级虚拟机 (VM) 中运行,我们在早期关于 WSL 2 的博客文章中讨论过这一点。自宣布以来,Docker 团队发布了包含支持 WSL 2 的 Docker技术预览版

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

工作原理

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

Docker in WSL 2

图片来源:Docker Engineering

DockerD 直接在 WSL 中运行,因此无需 Hyper-V 虚拟机,并且所有 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 虚拟机内的 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 中使用了 Dev Containers 扩展来测试特定的环境,而无需直接在我的机器上进行设置。

我们希望获得您的反馈

请记住,您使用的是预发布软件,虽然 Windows 预览体验计划慢速环非常稳定,但您可能会遇到一些问题。如果您确实发现某些内容不如预期工作,请通过 Windows 中的“反馈”工具打开一个问题。任何直接的 Docker 问题或反馈都可以记录在 Docker for Windows 仓库中。

编码愉快!

Matt Hernandez,VS Code 项目经理 @fiveisprime

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