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后端之前,您必须完成以下步骤:
- 安装Windows 10版本1903或更高版本。
- 在Windows上启用WSL 2功能。有关详细说明,请参阅Microsoft文档。
- 下载并安装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版本之前,请确保已完成先决条件部分中描述的步骤。
- 请遵循通常的安装说明来安装Docker Desktop。如果您运行的是受支持的系统,则Docker桌面会提示您在安装过程中启用WSL 2。阅读屏幕上显示的信息,并使WSL 2继续。
- 从Windows``开始''菜单中启动Docker Desktop。
-
在Docker菜单中,选择设置>常规。
-
选中“使用基于WSL 2的引擎”复选框。
如果您在支持WSL 2的系统上安装了Docker Desktop,则默认情况下将启用此选项。
- 单击“应用并重新启动”。
-
确保分发以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
-
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来运行集成。
- 单击“应用并重新启动”。
使用Docker和WSL 2进行开发
以下部分描述了如何开始使用Docker和WSL 2开发应用程序。我们建议您将代码放在默认的Linux发行版中,以获得使用Docker和WSL 2的最佳开发体验。在Docker Desktop上启用WSL 2之后,您可以可以开始在Linux发行版中使用代码,并且理想情况下仍在Windows中使用IDE。如果您使用的是VSCode,则此工作流程可能非常简单。
- 打开VSCode并安装Remote-WSL扩展。通过此扩展,您可以在Linux发行版中使用远程服务器,而IDE客户端仍在Windows上。
-
现在,您可以开始在VSCode中远程工作。为此,请打开您的终端并输入:
wsl
code .
这将打开一个新的VSCode,该VSCode远程连接到您的默认Linux发行版,您可以在屏幕的右下角进行检查。
或者,您可以在“开始”菜单中键入默认Linux发行版的名称,将其打开,然后运行
code
。 - 当您使用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 GitHub的Docker桌面上创建一个问题并添加WSL 2标签,以让我们知道您的反馈。
WSL,WSL 2技术预览版,适用于Linux的Windows子系统,WSL 2后端Docker