在 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 内部版本 18975(慢速)或更高版本以使用 WSL 2。
- 从 Microsoft 商店安装 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 中使用 Dev Containers 扩展来测试特定环境,而无需直接在我的机器上进行设置。
我们希望收到您的反馈
请记住,您正在使用预发布软件,虽然 Windows Insiders Slow ring 非常稳定,但您可能会遇到一些问题。如果您发现任何无法按预期工作的问题,请通过 Windows 中的反馈工具提交问题。任何直接的 Docker 问题或反馈都可以在 Docker for Windows 存储库中记录。
编码愉快!
Matt Hernandez,VS Code 项目经理 @fiveisprime