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 体验,请考虑启用 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。

  1. 下载并安装最新版本的适用于 Windows 的 Docker Desktop

  2. 按照常规安装说明安装 Docker Desktop。根据您使用的 Windows 版本,Docker Desktop 可能会在安装过程中提示您开启 WSL 2。阅读屏幕上显示的信息,并开启 WSL 2 功能以继续。

  3. Windows 开始菜单启动 Docker Desktop。

  4. 导航到设置

  5. 通用选项卡中,选择使用基于 WSL 2 的引擎

    如果您在支持 WSL 2 的系统上安装了 Docker Desktop,此选项默认处于开启状态。

  6. 选择应用并重启

现在,可以在 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 支持。

  1. 确保该发行版运行在 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
    
  2. 当 Docker Desktop 启动时,转到设置 > 资源 > WSL 集成

    Docker-WSL 集成在默认的 WSL 发行版(通常是 Ubuntu)上启用。要更改默认的 WSL 发行版,请运行

    $ wsl --set-default <distribution name>
    

    如果在资源下找不到 WSL 集成,则 Docker 可能处于 Windows 容器模式。在任务栏中,选择 Docker 菜单,然后选择切换到 Linux 容器

  3. 选择应用并重启

注意

在 Docker Desktop 4.30 及更早版本中,Docker Desktop 安装了两个专用内部 Linux 发行版 docker-desktopdocker-desktop-datadocker-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。或者,启用增强容器隔离来运行您的容器工作负载。

更多资源

页面选项