Docker Desktop WSL 2 backend

预计阅读时间:8分钟

更新 Docker Desktop 条款

在大型企业(超过 250 名员工或年收入超过 1000 万美元)中商业使用 Docker Desktop 现在需要付费订阅. 需要付费订阅的用户的宽限期将于 2022 年 1 月 31 日结束. 了解更多.

适用于 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 秒.

Prerequisites

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

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

Best practices

  • 为了在绑定挂载文件时获得最佳文件系统性能,我们建议将源代码和其他绑定挂载到 Linux 容器中的数据存储(即,使用docker run -v <host-path>:<container-path> ) 在 Linux 文件系统中,而不是在 Windows 文件系统中. 你也可以参考微软的推荐.

    • 如果原始文件存储在 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>的命令,其中~被 Linux shell 扩展为$HOME .
  • 如果您担心 docker-desktop-data VHDX 的大小,或者需要更改它,请查看Windows 中内置的 WSL 工具.
  • 如果您担心 CPU 或内存使用情况,您可以配置分配给WSL 2 实用程序 VM的内存、CPU、交换大小的限制.
  • 为避免与在 Docker Desktop 上使用 WSL 2 产生任何潜在冲突,您必须在安装 Docker Desktop 之前卸载直接通过 Linux 发行版安装的任何先前版本的 Docker Engine和 CLI.

Download

下载Docker Desktop 2.3.0.2或更高版本.

Install

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

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

    Enable WSL 2

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

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

  5. Click 应用并重新启动.
  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 重新启动时,转到Settings > Resources > WSL Integration .

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

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

    或者,选择您希望启用 Docker-WSL 集成的任何其他发行版.

    Note

    在您的发行版中运行的 Docker-WSL 集成组件依赖于 glibc. 在运行基于 musl 的发行版(例如 Alpine Linux)时,这可能会导致问题. Alpine 用户可以使用alpine-pkg-glibc包将 glibc 与 musl 一起部署以运行集成.

    WSL 2 Choose Linux distro

  8. Click Apply & Restart.

Develop with Docker and WSL 2

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

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

    wsl

    code .

    这将打开一个远程连接到默认 Linux 发行版的新 VSCode,您可以在屏幕的下角查看它.

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

  3. 当你在 VSCode 中时,你可以使用 VSCode 中的终端来拉取你的代码并开始在你的 Windows 机器上本地工作.

GPU support

从 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 Desktop 中启用了 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

Feedback

您的反馈对我们来说很重要. 请通过在Docker Desktop for Windows GitHub存储库中创建问题并添加WSL 2标签来告知我们您的反馈.

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

by  icopy.site