Docker Desktop 在 Windows 上的 WSL 2 后端
Windows Subsystem for Linux (WSL) 2 是微软构建的完整 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 版本至少为 1.1.3.0,但最好是最新版本 WSL,以避免 Docker Desktop 未按预期工作。
- 满足适用于 Windows 的 Docker Desktop 的系统要求。
- 在 Windows 上安装了 WSL 2 功能。有关详细说明,请参阅Microsoft 文档。
提示
为了获得更好的 WSL 体验,请考虑启用 WSL autoMemoryReclaim 设置(自 WSL 1.3.10 起可用,实验性功能)。
此功能增强了 Windows 主机回收 WSL 虚拟机中未使用的内存的能力,确保为其他主机应用程序提供更好的内存可用性。此功能对 Docker Desktop 特别有益,因为它可防止 WSL 虚拟机在 Docker 容器镜像构建期间保留 Linux 内核页面缓存中的大量内存(以 GB 为单位),而在虚拟机中不再需要时也不会将其释放回主机。
开启 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。
导航到设置。
在通用选项卡中,选择使用基于 WSL 2 的引擎。
如果您在支持 WSL 2 的系统上安装了 Docker Desktop,此选项默认处于开启状态。
选择应用并重启。
现在,可以在 Windows 中使用新的 WSL 2 引擎运行 docker
命令。
提示
默认情况下,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 发行版。在 Windows 中,无需安装其他 Linux 发行版,docker
CLI 和 UI 都可以正常工作。但是,为了获得最佳开发者体验,我们建议安装至少一个额外的发行版并启用 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 --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。或者,启用增强容器隔离来运行您的容器工作负载。