Docker桌面WSL 2后端

预计阅读时间:7分钟

用于Linux的Windows子系统(WSL)2引入了重大的体系结构更改,因为它是由Microsoft构建的完整Linux内核,允许Linux容器在没有仿真的情况下本机运行。通过在WSL 2上运行的Docker Desktop,用户可以利用Linux工作区,而不必同时维护Linux和Windows构建脚本。此外,WSL 2改进了文件系统共享,启动时间,并允许Docker Desktop用户访问一些很酷的新功能。

Docker Desktop使用WSL 2中的动态内存分配功能来大大改善资源消耗。这意味着,Docker Desktop仅使用所需数量的所需CPU和内存资源,同时使CPU和内存密集型任务(如构建容器)运行得更快。

此外,使用WSL 2,冷启动后启动Docker守护程序所需的时间明显更快。与之前版本的Docker Desktop中几乎一分钟的启动时间相比,启动Docker守护程序所需的时间不到10秒。

先决条件

在安装Docker Desktop WSL 2后端之前,您必须完成以下步骤:

  1. 安装Windows 10版本1903或更高版本。
  2. 在Windows上启用WSL 2功能。有关详细说明,请参阅Microsoft文档
  3. 下载并安装Linux内核更新程序包

最佳实务

  • 为了在绑定安装文件时获得最佳的文件系统性能,我们建议docker run -v <host-path>:<container-path>在Linux文件系统(而不是Windows文件系统)中存储源代码和其他数据绑定安装到Linux容器(即带有)的数据。您也可以参考Microsoft的建议

    • 如果原始文件存储在Linux文件系统中,则Linux容器仅接收文件更改事件(“ inotify事件”)。例如,某些Web开发工作流程依赖inotify事件来在文件更改后自动重新加载。
    • 当文件是从Linux文件系统绑定挂载而不是从Windows主机远程挂载时,性能会更高。因此,请避免 docker run -v /mnt/c/users:/users/mnt/c从Windows挂载的位置)。
    • 相反,在Linux Shell中,使用诸如docker run -v ~/my-project:/sources <my-image> where~由Linux Shell扩展为的命令$HOME
  • 如果您对docker-desktop-data VHDX的大小有疑问,或者需要更改它,请查看Windows内置WSL工具
  • 如果您对CPU或内存使用情况有疑问,可以配置分配给WSL 2实用程序VM的内存,CPU,交换大小的限制。
  • 为了避免与在Docker Desktop上使用WSL 2发生任何潜在冲突,必须在安装Docker Desktop之前卸载直接通过Linux发行版安装的任何早期版本的Docker Engine和CLI。

下载

下载Docker Desktop Stable 2.3.0.2或更高版本。

安装

安装Docker Desktop Stable 2.3.0.2版本之前,请确保已完成先决条件部分中描述的步骤。

  1. 请遵循通常的安装说明来安装Docker Desktop。如果您运行的是受支持的系统,则Docker桌面会提示您在安装过程中启用WSL 2。阅读屏幕上显示的信息,并使WSL 2继续。
  2. 从Windows``开始''菜单中启动Docker Desktop。
  3. 在Docker菜单中,选择设置>常规

    启用WSL 2

  4. 选中“使用基于WSL 2的引擎”复选框。

    如果您在支持WSL 2的系统上安装了Docker Desktop,则默认情况下将启用此选项。

  5. 单击“应用并重新启动”
  6. 确保分发以WSL 2模式运行。WSL可以在v1或v2模式下运行发行版。

    要检查WSL模式,请运行:

    wsl.exe -l -v

    要将现有的Linux发行版升级到v2,请运行:

    wsl.exe --set-version (distro name) 2

    要将v2设置为以后安装的默认版本,请运行:

    wsl.exe --set-default-version 2

  7. Docker Desktop重新启动后,转到“设置” >“资源” >“ WSL集成”

    Docker-WSL集成将在您的默认WSL发行版上启用。要更改默认的WSL发行版,请运行wsl --set-default <distro name>

    例如,要将Ubuntu设置为默认的WSL发行版,请运行wsl --set-default ubuntu

    (可选)选择要启用Docker-WSL集成的任何其他发行版。

    笔记

    在您的发行版中运行的Docker-WSL集成组件取决于glibc。在运行基于Musl的发行版(例如Alpine Linux)时,这可能会导致问题。高山用户可以使用alpine-pkg-glibc软件包在musl旁边部署glibc来运行集成。

    WSL 2选择Linux发行版

  8. 单击“应用并重新启动”

使用Docker和WSL 2进行开发

以下部分描述了如何开始使用Docker和WSL 2开发应用程序。我们建议您将代码放在默认的Linux发行版中,以获得使用Docker和WSL 2的最佳开发体验。在Docker Desktop上启用WSL 2之后,您可以可以开始在Linux发行版中使用代码,并且理想情况下仍在Windows中使用IDE。如果您使用的是VSCode,则此工作流程可能非常简单。

  1. 打开VSCode并安装Remote-WSL扩展。通过此扩展,您可以在Linux发行版中使用远程服务器,而IDE客户端仍在Windows上。
  2. 现在,您可以开始在VSCode中远程工作。为此,请打开您的终端并输入:

    wsl

    code .

    这将打开一个新的VSCode,该VSCode远程连接到您的默认Linux发行版,您可以在屏幕的右下角进行检查。

    或者,您可以在“开始”菜单中键入默认Linux发行版的名称,将其打开,然后运行code

  3. 当您使用VSCode时,可以使用VSCode中的终端提取代码并从Windows机器开始本地工作。

GPU支持

从Docker Desktop 3.1.0开始,Docker Desktop在NVIDIA GPU上支持WSL 2 GPU半虚拟化(GPU-PV)。要启用WSL 2 GPU半虚拟化,您需要:

  • 配备NVIDIA GPU的机器
  • Dev Preview环中的最新Windows Insider版本
  • NVIDIA Beta驱动程序,支持WSL 2 GPU半虚拟化
  • 使用wsl --update提升的命令提示符将WSL 2 Linux内核更新到最新版本
  • 确保在Docker桌面中启用了WSL 2后端

要验证一切是否按预期进行,请运行以下命令以在GPU上运行简短的基准测试:

❯ docker run --rm -it --gpus=all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark
Run "nbody -benchmark [-numbodies=<numBodies>]" to measure performance.
        -fullscreen       (run n-body simulation in fullscreen mode)
        -fp64             (use double precision floating point values for simulation)
        -hostmem          (stores simulation data in host memory)
        -benchmark        (run benchmark to measure performance)
        -numbodies=<N>    (number of bodies (>= 1) to run in simulation)
        -device=<d>       (where d=0,1,2.... for the CUDA device to use)
        -numdevices=<i>   (where i=(number of CUDA devices > 0) to use for simulation)
        -compare          (compares simulation results running once on the default GPU and once on the CPU)
        -cpu              (run n-body simulation on the CPU)
        -tipsy=<file.bin> (load a tipsy model file for simulation)
        
> NOTE: The CUDA Samples are not meant for performance measurements. Results may vary when GPU Boost is enabled.

> Windowed mode
> Simulation data stored in video memory
> Single precision floating point simulation
> 1 Devices used for simulation
MapSMtoCores for SM 7.5 is undefined.  Default to use 64 Cores/SM
GPU Device 0: "GeForce RTX 2060 with Max-Q Design" with compute capability 7.5

> Compute 7.5 CUDA device: [GeForce RTX 2060 with Max-Q Design]
30720 bodies, total time for 10 iterations: 69.280 ms
= 136.219 billion interactions per second
= 2724.379 single-precision GFLOP/s at 20 flops per interaction

反馈

您的反馈对我们来说很重要。请在用于Windows GitHubDocker桌面上创建一个问题并添加WSL 2标签,以让我们知道您的反馈。

WSLWSL 2技术预览版适用于Linux的Windows子系统WSL 2后端Docker