在 WSL 2 中使用 Docker
2020 年 3 月 2 日,作者:Matt Hernandez,@fiveisprime
去年六月,Docker 团队宣布他们将投入资源使 Docker 能够在 Windows Linux 子系统 (WSL) 上运行。这一切都得益于 WSL 最近的架构更改,使其能够在轻量级虚拟机 (VM) 中运行,我们在之前的关于 WSL 2 的博文中讨论过。自此公告发布以来,Docker 团队发布了 Docker 的技术预览版,其中包含对在 WSL 2 上运行的支持。
本文介绍了 Docker Desktop 技术预览版的工作原理,以及如何将 Docker 扩展与技术预览版一起使用。
工作原理
这种新的 Docker 架构的工作方式很像 Visual Studio Code 的WSL 远程开发支持,即在主机上运行的 Docker CLI 在远程 WSL VM 上运行的 Docker 集成包中执行命令。
图片来源:Docker Engineering
DockerD 直接在 WSL 中运行,因此不需要 Hyper-V VM,所有 Linux 容器都在 Windows 上的 Linux 用户空间中运行,以提高性能和兼容性。
设置
首先是一些先决条件
- 安装 Windows 10 Insider Preview 版本 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
我个人注意到,使用此配置后,容器执行时间得到了大幅改进,并且我的典型开发工作流程的每个部分都保持不变。我还在 WSL 中使用 Dev Containers 扩展来测试特定环境,而无需直接在我的机器上进行设置。
我们需要您的反馈
请记住,您正在使用预发布软件,虽然 Windows Insiders Slow 环非常稳定,但您可能会遇到一些问题。如果您确实发现某些内容无法按预期工作,请通过 Windows 中的反馈工具打开问题。任何直接的 Docker 问题或反馈都可以在 Docker for Windows 仓库中记录。
编码愉快!
Matt Hernandez,VS Code 项目经理 @fiveisprime