在 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 在 Docker 集成包中执行命令,而 Docker 集成包在远程 WSL VM 上运行。
图片来源:Docker Engineering
DockerD 直接在 WSL 中运行,因此无需 Hyper-V VM,所有 Linux 容器都在 Windows 上的 Linux 用户空间中运行,从而提高了性能和兼容性。
开始设置
首先是一些先决条件
- 安装 Windows 10 Insider Preview build 18975(慢速)或更高版本以支持 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
我个人注意到,使用此配置后,容器执行时间有了显著提高,并且我典型开发工作流程的每个部分都保持不变。我还将 Dev Containers 扩展在 WSL 中用于测试特定环境,而无需直接在我的机器上进行设置。
我们需要您的反馈
请记住,您正在使用预发布软件,虽然 Windows Insiders Slow 环非常稳定,但您可能会遇到一些问题。如果您发现任何未按预期工作的情况,请通过 Windows 中的反馈工具打开一个问题。任何直接的 Docker 问题或反馈都可以在 Docker for Windows 存储库中记录。
编码愉快!
Matt Hernandez,VS Code 项目经理 @fiveisprime