Windows 上的 Docker Desktop WSL 2 后端
适用于 Linux 的 Windows 子系统(WSL)2 是 Microsoft 构建的完整 Linux 内核,它允许 Linux 发行版无需管理虚拟机即可运行。通过在 WSL 2 上运行 Docker Desktop,用户可以利用 Linux 工作区,避免同时维护 Linux 和 Windows 构建脚本。此外,WSL 2 还改进了文件系统共享和启动时间。
Docker Desktop 使用 WSL 2 中的动态内存分配功能来改进资源消耗。这意味着 Docker Desktop 只使用其所需的 CPU 和内存资源,同时允许构建容器等 CPU 和内存密集型任务运行得更快。
此外,通过 WSL 2,冷启动后启动 Docker 守护进程所需的时间显著缩短。
先决条件
在开启 Docker Desktop WSL 2 功能之前,请确保您已具备以下条件:
- WSL 版本至少为 2.1.5,但最好是最新版本,以避免 Docker Desktop 无法按预期工作。
- 满足适用于 Windows 的 Docker Desktop 的系统要求。
- 在 Windows 上安装了 WSL 2 功能。有关详细说明,请参阅 Microsoft 文档。
提示为了在 WSL 上获得更好的体验,请考虑启用 WSL 的 autoMemoryReclaim 设置,该设置自 WSL 1.3.10 起可用(实验性)。
此功能增强了 Windows 主机在 WSL 虚拟机内回收未使用内存的能力,从而确保为其他主机应用程序提供更高的内存可用性。此功能对于 Docker Desktop 尤其有利,因为它可防止 WSL VM 在 Docker 容器镜像构建期间在 Linux 内核的页面缓存中保留大量内存(GB),而在 VM 中不再需要时也不会将其释放回主机。
开启 Docker Desktop WSL 2
重要为避免在 Docker Desktop 上使用 WSL 2 时发生任何潜在冲突,您必须在安装 Docker Desktop 之前卸载直接通过 Linux 发行版安装的任何早期版本的 Docker Engine 和 CLI。
下载并安装最新版本的适用于 Windows 的 Docker Desktop。
按照常规安装说明安装 Docker Desktop。根据您使用的 Windows 版本,Docker Desktop 可能会在安装过程中提示您开启 WSL 2。请阅读屏幕上显示的信息并开启 WSL 2 功能以继续。
从 Windows 开始菜单启动 Docker Desktop。
导航到 Settings。
从通用选项卡中,选择使用基于 WSL 2 的引擎。
如果您的系统支持 WSL 2,并且您已安装 Docker Desktop,则此选项默认开启。
选择**应用**。
现在,docker 命令可以通过新的 WSL 2 引擎从 Windows 运行。
提示默认情况下,Docker Desktop 将 WSL 2 引擎的数据存储在
C:\Users\[USERNAME]\AppData\Local\Docker\wsl。如果您想更改位置,例如更改到另一个驱动器,可以通过 Docker Dashboard 的Settings -> Resources -> Advanced页面进行设置。有关此设置和其他 Windows 设置的更多信息,请阅读 更改设置
在 WSL 2 发行版中启用 Docker 支持
WSL 2 为 Windows 添加了对“Linux 发行版”的支持,其中每个发行版都像一个虚拟机一样运行,但它们都运行在单个共享的 Linux 内核之上。
Docker Desktop 不需要安装任何特定的 Linux 发行版。docker CLI 和 UI 都可以从 Windows 正常运行,无需任何额外的 Linux 发行版。然而,为了获得最佳开发体验,我们建议至少安装一个额外的发行版并启用 Docker 支持。
确保发行版在 WSL 2 模式下运行。WSL 可以在 v1 或 v2 模式下运行发行版。
要检查 WSL 模式,请运行
$ wsl.exe -l -v要将 Linux 发行版升级到 v2,请运行
$ wsl.exe --set-version (distribution name) 2要将 v2 设置为未来安装的默认版本,请运行
$ wsl.exe --set-default-version 2当 Docker Desktop 启动时,转到设置 > 资源 > WSL 集成。
Docker-WSL 集成在默认的 WSL 发行版上启用,即 Ubuntu。要更改您的默认 WSL 发行版,请运行
$ wsl.exe --set-default <distribution name>如果“WSL 集成”在“资源”下不可用,则 Docker 可能处于 Windows 容器模式。在任务栏中,选择 Docker 菜单,然后选择“切换到 Linux 容器”。
选择**应用**。
注意在 Docker Desktop 版本 4.30 及更早版本中,Docker Desktop 安装了两个专用内部 Linux 发行版
docker-desktop和docker-desktop-data。docker-desktop用于运行 Docker 引擎dockerd,而docker-desktop-data存储容器和镜像。两者都不能用于一般开发。对于 Docker Desktop 4.30 及更高版本的新安装,不再创建
docker-desktop-data。相反,Docker Desktop 为存储创建和管理自己的虚拟硬盘。docker-desktop发行版仍被创建并用于运行 Docker 引擎。请注意,如果
docker-desktop-data发行版已由早期版本的 Docker Desktop 创建,并且尚未全新安装或恢复出厂设置,则 Docker Desktop 4.30 及更高版本将继续使用该发行版。
Docker Desktop 中的 WSL 2 安全性
Docker Desktop 的 WSL 2 集成在 WSL 的现有安全模型内运行,并且不会在标准 WSL 行为之外引入额外的安全风险。
Docker Desktop 在其自己的专用 WSL 发行版 docker-desktop 中运行,该发行版遵循与任何其他 WSL 发行版相同的隔离特性。Docker Desktop 与其他已安装的 WSL 发行版之间的唯一交互发生在设置中启用 Docker Desktop WSL 集成功能时。此功能允许从集成发行版轻松访问 Docker CLI。
WSL 旨在促进 Windows 和 Linux 环境之间的互操作性。其文件系统可通过 Windows 主机 \\wsl$ 访问,这意味着 Windows 进程可以读取和修改 WSL 中的文件。此行为并非 Docker Desktop 所特有,而是 WSL 本身的核心方面。
对于关注 WSL 相关安全风险并希望进行更严格隔离和安全控制的组织,请在 Hyper-V 模式而非 WSL 2 中运行 Docker Desktop。或者,启用增强型容器隔离来运行您的容器工作负载。