> 技术文档 > Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop

Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop

WSL,Windows Subsystem for Linux,是微软开发的轻量级虚拟机环境,允许用户在 Windows上运行完整的Linux内核和用户空间,适用于Windows的Linux子系统。能实现:

  • 运行原生的Linux命令和程序(如apt,gcc,make等);
  • 拥有独立的文件系统
  • 支持网络、进程等Linux功能。

另有一说,可在WSL上模拟出有限的Linux环境,而不是Linux发行版。

安装

安装WSL需要有一些前置操作。

前置操作

打开控制面板,找到【程序和功能】,点击左侧的【启用或关闭Windows功能】,勾选【适用于Linux的Windows子系统】,需要同时勾选【虚拟机平台】(下面截图未勾选):
Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop
需要重启Windows电脑生效。

Docker Desktop

安装WSL有两种方式:

  • 通过Docker Desktop:实际上还是通过下面的命令行;
  • 通过命令行:执行任意wsl命令行可触发WSL安装。

下载并安装Docker Desktop时会出现如下提示:
Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop
或者:
在这里插入图片描述
正常情况下,用管理员身份启动Docker Desktop时会触发WSL的安装或升级:
在这里插入图片描述
也可手动输入命令行:
在这里插入图片描述
安装WSL系统需要有较好的网络环境(代理),否则下载速度会非常慢。

安装成功后,输入命令wsl -v查看WSL版本号
Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop
输入命令wsl --listwsl --list --verbose查看子系统列表:
Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop
注意到在NAME前面有个*,VERSION为2。

下面会继续论述。

WSL和Docker Desktop

Docker Desktop是Docker官方为Windows和macOS提供的一个桌面应用程序,集成:

  • Docker Engine:引擎
  • Docker CLI:命令行工具
  • Kubernetes:可选
  • 资源管理器集成
  • 与WSL2的深度集成

新版Docker Desktop(v2.3+)在Windows上强烈依赖WSL2,官方推荐并默认使用WSL2作为后端运行环境。

功能 使用WSL2的优势 完整的Linux内核支持 Docker 需要Linux特性(如cgroups、namespaces) 更好的性能 相比Hyper-V虚拟机更轻量、更快 文件系统互通 可无缝访问Windows文件系统 与Ubuntu等发行版共存 可在多个终端中使用Docker CLI

脱离WSL2,能否在Windows上安装Docker Desktop?

从2020年以后发布的Docker Desktop版本来看,已经无法完全绕过WSL2来运行完整功能的Docker Desktop。

旧版本,如Windows 10企业版/专业版,可使用Hyper-V + Windows Containers来运行Docker Desktop,但:

  • 不支持Linux容器(除非切换容器类型)
  • 不适合开发者日常使用
  • 很多功能受限(如挂载本地目录、构建镜像等)

参考:Windows10系统Docker for Windows与VMWare关于Hyper-V问题。

Ubuntu

上面通过Docker Desktop方式安装WSL,并启动一个docker-desktopLinux子系统。

相信很多接触Linux的同学都是从Ubuntu开始的。WSL能不能安装Ubuntu系统呢?

当然可以,输入命令wsl --install Ubuntu安装Ubuntu系统:
Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop
报错原因是因为开了代理,就比如此时无法打开Microsoft Store一样。

关掉代理:
Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop
反复重试还是失败的解决方法:手动下载离线安装包地址,得到Ubuntu2204-221101.AppxBundle文件。

安装方法:

  • 双击该文件,系统会自动调用应用安装程序完成安装;
    Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop
  • 通过PowerShell命令:Add-AppxPackage -Path \"C:\\Users\\johnny\\Downloads\\Ubuntu2204-221101.AppxBundle\"

本文使用第二种方式,上面的命令执行成功后,在开始菜单中找到Ubuntu并点击:
Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop
忽略第二个弹窗里的报错,出现如下提示:
Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop
首次运行会提示输入用户名和密码,完成初始化配置。

用户名密码必填,直接回车无效:
Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop
正常情况下,可通过命令行安装:
Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop
安装成功,输入命令wsl --list --verbose
Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop
在CMD下新增窗口的效果:
Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop

WSL1和WSL2

Windows1903版本以及以后还支持WSL2。WSL2基于Windows Hyper-V虚拟化技术,启用更全面的虚拟化功能。两者比较:WSL2和WSL1,两者不兼容。WSL2与大多数其他虚拟机产品在开启虚拟化加速技术诸如 Intel TV-x / AMD-V时是冲突的。

特性 WSL1 WSL2 内核支持 模拟Linux系统调用(翻译) 完整的Linux内核(基于轻量级虚拟机) 文件系统互通 支持Windows与Linux文件系统互相访问 访问Windows文件慢,Linux文件快 网络 与Windows共享IP地址 有自己的独立IP地址 GUI应用支持 默认不支持(需额外配置) 可通过设置支持GUI应用 启动速度 快 稍慢(需要启动虚拟机) 硬件支持 不支持USB、GPU直接访问 更好地支持GPU、USB(需配合驱动) 优点 文件系统可以无缝互操作;性能高,启动快 支持完整的Linux内核功能,如docker,firewalld;更接近真实Linux环境;支持GUI、网络服务等高级功能 缺点 不支持Linux内核特性(如systemd,iptables,mount等);不适合运行需要完整Linux内核的服务或容器,如Docker 与Windows文件系统交互较慢;有自己的IP地址,需注意防火墙设置;启动稍慢 适合场景 开发工具、脚本运行等 需要完整Linux环境(如Docker、内核功能)

WSL1,模拟方式运行Linux用户态程序,不使用真正的Linux内核,将Linux系统调用翻译成Windows能理解的NT API。

WSL2,使用Hyper-V技术运行一个完整的Linux内核(轻量级虚拟机),对用户透明,所有Linux系统调用都直接运行在Linux内核中。

切换WSL版本

可为每个发行版单独设置使用的WSL版本:

wsl --set-version <DistributionName> 2wsl --set-version <DistributionName> 1wsl --set-version Ubuntu 2wsl --set-version Debian 1

比如
Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop
遇到的问题,也就是上面看到的,设置为WSL1之后,Docker Desktop自动停止:
Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop
因此,对于Docker Desktop,不能使用WSL 1版本。

切换回去:
Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop
还是Stopped状态:
Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop
直接执行wsl命令即可启动Docker Desktop(启动默认发行版):
Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop

使用

WSL安装或升级成功后的效果:
在这里插入图片描述
有很多概要性介绍知识。

跨文件系统工作

包括:

  • 从Linux访问Windows文件
  • 使用Windows文件资源管理器访问Linux文件
    Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop
  • 从WSL启动Windows文件和程序(TODO);

GUI应用

可通过本机Windows交互操作(例如Alt-Tab、开始菜单启动、任务栏固定以及剪切和粘贴支持)使用基于图形的Linux应用程序。

可通过sudo apt install 在Ubuntu中尝试安装的部分应用列表:

  • gedit:基本文本编辑器
  • audacity:录制和编辑音频文件
  • blender:制作3D动画和可视化效果
  • gimp:编辑照片
  • nautilus:Linux文件资源管理器
  • vlc:视频播放器

GPU加速

在WSL中运行的Linux二进制文件可自动使用Windows中的GPL来加快性能。

网络集成

可以跨Windows和Linux操作系统轻松访问网络应用。

  • 从Windows访问Linux网络应用
    如果要在Linux分发版中生成网络应用,则可使用localhost从Windows应用(如Chrome浏览器)访问它。
  • 镜像模式网络
    WSL还包括一种称为镜像模式的新网络模式,添加IPv6支持等高级功能,并且能够访问局域网中的网络应用程序。

发行版管理

WSL是试用不同Linux发行版的好方法。
列出可安装的WSL发行版命令:wsl.exe -l -o
安装命名的WSL发行版命令:wsl.exe --install
列出可用的WSL发行版命令:wsl.exe -I

Docker Desktop集成

上面多次提及。

VS Code集成

可直接从VSCode使用WSL作为全时开发环境。

安装VSCode后,可从Windows终端安装远程WSL扩展:code -install-extension_ms-vscode-remote.remote-wsl

实战

读写文件

分两种场景:

  • 在WSL中访问本地Windows;
  • 在本地Windows下访问WSL系统。

在WSL2中,Windows的文件系统会自动挂载到/mnt目录下,比如Windows下的C盘,对应路径为/mnt/c
Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop
Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop

在Windows中访问Ubuntu文件,打开(文件)资源管理器,输入\\\\wsl$回车:
Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop
双击操作,和在Windows下一样:
Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop
设置永久挂载或软链接

如果你经常需要访问某个 Windows 文件夹,可以创建一个符号链接(软链接)到你的 home 目录:
ln -s /mnt/c/Users/YourName/Documents ~/win_docs
之后就可以用~/win_docs来快速访问 Windows 中的文档目录。

在 Docker 中挂载 Windows 本地目录(与 WSL2 配合)
当你使用 Docker Desktop 时,它会自动处理 WSL2 和 Windows 之间的文件系统桥接。

比如你在 Docker 命令中这样写:docker run -v /mnt/c/Users/YourName/mycode:/app myimage
等价于把 Windows 的 C:\\Users\\YourName\\mycode 挂载到了容器的 /app 目录。

注意事项:

  • 不要在/mnt路径下运行git、npm、或编译工具(如make),因为性能差且可能导致数据损坏;
  • 避免在Windows资源管理器中直接编辑WSL2的Linux文件系统中的文件(如/home/xxx),这可能导致权限问题或文件损坏;
  • 推荐将项目放在Linux文件系统中(如/home/me),仅通过/mnt挂载做临时拷贝或共享。

告警

wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理。
Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop

Docker

Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop
根据上面的提示,让我去Docker Desktop设置下,但是找了一圈还是没有找到配置入口。还是得看文档,执行命令wsl --set-default Ubuntu
Windows 10/11安装WSL、Ubuntu、Docker Desktop_wsl docker desktop
再次在WSL里的Ubuntu系统执行docker,可正常使用。

参考

  • 官方文档
  • GPT