在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在远程WSL虚拟机上的Docker集成包中执行命令。
图片来源:Docker Engineering
DockerD 直接在 WSL 中运行,因此不需要 Hyper-V 虚拟机,所有 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虚拟机中启动一个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)的情况下构建/运行容器。
主题:夜光宁静
我个人注意到,使用此配置后,容器执行时间有了显著改善,而我典型的开发工作流程的每个部分都保持不变。我还在WSL中使用Dev Containers扩展来测试特定环境,而无需直接在我的机器上设置。
我们想要您的反馈
请记住,您正在使用预发布软件,虽然Windows Insiders Slow环非常稳定,但您可能会遇到一些问题。如果您发现某些功能未按预期工作,请通过Windows中的反馈工具提交问题。任何直接的Docker问题或反馈都可以记录在Docker for Windows仓库中。
编程快乐!
Matt Hernandez,VS Code 项目经理 @fiveisprime