在 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 会在 Docker 集成包中执行命令,该集成包在远程 WSL VM 上运行。
图片来源:Docker Engineering
DockerD 直接在 WSL 中运行,因此无需 Hyper-V VM,并且所有 Linux 容器都在 Windows 上的 Linux 用户空间内运行,以提高性能和兼容性。
设置
首先是一些先决条件
- 安装 Windows 10 Insider Preview build 18975(Slow 环)或更高版本,以支持 WSL 2。
- 从 Microsoft Store 安装 Ubuntu。
- 按照此指南启用 WSL 2。
- 为 VS Code 安装 WSL 扩展。
- 安装Docker WSL 2 技术预览版。
安装完成后,Docker 会识别出您已安装 WSL,并提示启用 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 中使用开发容器扩展来测试特定环境,而无需直接在我的机器上进行设置。
我们期待您的反馈
请记住,您正在使用预发布软件,虽然 Windows Insider Slow 环非常稳定,但您可能会遇到一些问题。如果您确实发现某些功能未按预期工作,请通过 Windows 中的反馈工具提交问题。任何直接与 Docker 相关的问题或反馈都可以记录在Docker for Windows 仓库中。
编程愉快!
Matt Hernandez,VS Code 项目经理 @fiveisprime