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