十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

WSL2实战指南:从安装配置到Docker与AI开发环境

WSL2实战指南:从安装配置到Docker与AI开发环境 1. 为什么我最终选择WSL2真内核、秒启动和不一样的开发体验先交代一下背景。我主力机一直用 Windows但很多开源工具链、编译脚本、服务端中间件只愿意在 Linux 生态里好好工作。以前我图省事直接装 VMware 跑一个完整的 Ubuntu 虚拟机开发是能做了但每次开机都要等一两分钟进桌面内存常年被吃掉 8GB 以上还得手动配置共享文件夹和网络桥接。后来换了 WSL2整个工作流一下子清爽很多。WSL2 全称是 Windows Subsystem for Linux 2它在微软的虚拟机平台之上运行一个真正的 Linux 内核。和第一代 WSL 相比最核心的变化是放弃了系统调用翻译层改用一个轻量级虚拟机承载完整内核。这意味着 Linux 二进制兼容性大幅度提升Docker 可以原生跑apt 安装的软件基本不会遇到奇怪的兼容问题。很多第一次接触 WSL2 的朋友会把它和 VMware、VirtualBox 这类传统虚拟机混为一谈其实体验差异很大。我做了个简单对比大家感受一下维度WSL2传统虚拟机VMware/VirtualBox启动速度秒级启动随终端打开而唤醒需要完整开机流程通常几十秒到几分钟内存占用按需分配不用时可释放固定分配一开机就占满文件互访资源管理器直接访问\\wsl$\非常顺手需要配置共享文件夹或网络映射Docker 支持原生支持 Docker Desktop 的 WSL2 后端通常需要另装 Linux 环境再跑 DockerGUI 支持Windows 11 自带 WSLgWindows 10 可配 X Server完整桌面环境但资源开销大当然WSL2 不是万能的。比如你希望得到完整的 Linux 桌面体验或者需要大量直连 USB 设备做嵌入式调试那还是老老实实用传统虚拟机或物理机。但在 90% 的日常开发场景下WSL2 的轻量、快速和低资源占用让它成为 Windows 上跑 Linux 的默认选择。2. 动手安装前的三个自检版本、虚拟化和系统组件2.1 先确认 Windows 版本够不够新WSL2 对系统版本有硬性要求。Windows 10 需要 2004 版本及以上对应 build 19041 或更高Windows 11 全系列都支持。查看方法很简单Win R 打开运行窗口输入winver回车就能看到完整的版本号和内部版本号。如果你的系统还是 Windows 10 1909 或更老建议先升级系统再折腾 WSL2否则会遇到一堆莫名其妙的兼容问题。另外需要注意WSL2 同样适用于 Windows Home 家庭版不需要为了安装它去升级到专业版或企业版这点和 Hyper-V 的要求不同。2.2 确认 CPU 虚拟化已经打开WSL2 本质是虚拟机CPU 的硬件虚拟化功能就是地基这一步没做好后面一定会报错。检查方法打开任务管理器切到“性能”选项卡点击“CPU”看右下角的“虚拟化”状态显示“已启用”就说明没问题。如果显示“已禁用”需要进入 BIOS 设置开启。BIOS 进入方式因机器型号而异通常是开机时连续按 F2、F10、Del、F12 中的一个。进去后找以下类似的选项Intel 平台查找Intel Virtualization Technology、VT-x或VirtualizationAMD 平台查找SVM Mode或AMD-V把状态从 Disabled 改成 Enabled保存并退出再进系统检查一遍。这一步很多教程一笔带过但我在实际帮人排查时遇到太多人卡在这里——系统功能全开了安装也顺利就是 WSL 无法启动回头一看 BIOS 虚拟化压根没开。2.3 启用两个必须的 Windows 功能组件接下来要确保两个可选功能处于启用状态适用于 Linux 的 Windows 子系统和虚拟机平台。打开“控制面板” - “程序” - “启用或关闭 Windows 功能”勾选这两项然后重启电脑。如果找不到这个入口也可以用管理员身份打开 PowerShell执行下面的命令效果完全一样dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart重启后继续执行下一节的操作。这里还要提醒一句如果你在安装过程中遇到虚拟化已启用但 WSL 内核无法启动之类的诡异现象可以额外勾选Windows 虚拟机监控程序平台这个小组件经常被忽略但在特定硬件和系统版本组合下就是决定成败的关键。3. 两条安装路线实测一键命令和手动安装3.1 路线一wsl --install 一条命令搞定如果你用的是 Windows 11 或较新的 Windows 10最简单的方式确实就是一条命令。管理员身份打开 PowerShell执行wsl --install这条命令会自动完成以下几件事启用 WSL 所需的所有 Windows 功能安装 WSL 内核下载并安装默认的 Ubuntu 发行版执行完后系统提示重启重启后会自动弹出终端窗口进入 Ubuntu 初始化流程按提示设置用户名和密码即可。如果你像很多搜索wsl2安装ubuntu22.04的朋友一样想安装指定版本的系统可以先用下面的命令查看在线可用的发行版wsl -l -o输出结果会列出 Ubuntu、Ubuntu-22.04、Ubuntu-20.04、Debian、Kali Linux 等发行版。找到想要的名称后执行wsl --install -d Ubuntu-22.043.2 路线二手动安装控制力更强一键命令虽然方便但在两种情况下会“失灵”一是公司电脑被策略限制了 Microsoft Store 或在线下载渠道二是网络环境对微软服务器的访问速度很慢wsl --install卡在下载阶段。手动安装路线是这样走的先在“启用或关闭 Windows 功能”里勾选“适用于 Linux 的 Windows 子系统”和“虚拟机平台”也就是上一节的步骤重启。然后打开微软商店搜索“Windows Subsystem for Linux”和“Ubuntu-22.04”分别安装。如果商店也被限制可以到微软官方的 WSL 发布页面手动下载 Linux 内核更新安装包再通过浏览器访问 Ubuntu 的 Appx 下载链接手动获取安装包保存到本地后双击安装。手动安装的过程稍微繁琐但每一步都可见可控下载速度也有更多操作空间。我个人遇到wsl --install卡住的情况时会更倾向于手动安装因为至少能知道卡在哪一步。3.3 装完后的三件套建用户、换源、确认版本无论走哪条路线进入 Ubuntu 终端后第一件事不是急着跑 apt 安装软件而是依次完成三件基础配置。第一创建自己的用户和密码。安装时提示设置的用户名会被加入sudo组日常操作建议都用这个普通用户不要长期使用 root否则后续文件权限会各种别扭。第二更换软件源。刚装好的 Ubuntu 默认使用海外软件源apt update的速度在多数网络环境下都很感人。修改为国内镜像源能极大提升体验以清华源为例sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i s/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g /etc/apt/sources.list sudo apt update sudo apt upgrade -y如果是 Ubuntu 24.04 及以上版本软件源配置被拆分到了/etc/apt/sources.list.d/ubuntu.sources里操作方式稍有不同但原理一致先备份再替换地址最后 update。也可以手动编辑文件把里面的archive.ubuntu.com和security.ubuntu.com替换成清华、中科大或阿里云的镜像地址。第三确认一下 WSL 的版本确实是 2。在 PowerShell 里执行wsl -l -v输出结果里会显示每个发行版的名称、状态和 WSL 版本号。如果发现某一项还是 1执行转换命令wsl --set-version Ubuntu-22.04 24. 我踩过的坑虚拟化报错、安装太慢、系统盘被塞满4.1 “请确保计算机固件设置中“虚拟机平台”已启用”的完整排查链路这个报错大概率是大家搜得最多的词条。我第一次在一台老笔记本上装的时候也遇到了折腾了一个下午后来发现修复链路是有固定顺序的照着排查就不会乱。第一步回任务管理器看虚拟化状态。如果显示“已禁用”先进 BIOS 开启虚拟化这一步见前文 2.2 节。很多老款笔记本出厂默认关闭 VT-x / SVM尤其是 AMD 平台的机器SVM Mode 默认可能就是关闭状态。第二步确认 Windows 功能选项都开了。如果 BIOS 虚拟化已经开启但还是报错大概率是“虚拟机平台”没勾选或者勾选了但没重启生效。用管理员 PowerShell 执行一遍 2.3 节的 DISM 命令再重启。第三步检查是否有安全软件或旧版虚拟机软件干扰。某些杀毒软件会阻断虚拟化相关的系统调用VMware Workstation 的旧版本也可能和 WSL2 抢资源。如果你的电脑同时装了 VMware建议把版本升级到 15.5.5 以上这一版本开始支持与 Windows Hypervisor Platform 共存。第四步考虑关闭内存完整性功能。在 Windows 安全中心里找到“设备安全性” -“内核隔离” -“内存完整性”尝试关闭后重启再测试。这个功能和 WSL2 的虚拟化底层在某些硬件组合下会有兼容性问题虽然概率不高但我确实遇到过。第五步更新 WSL 内核。老版本内核可能存在已知 bug执行wsl --update更新到最新版本或者直接运行wsl --shutdown让内核完全重启再启动 WSL 试试。4.2 用 PowerShell 命令行安装 WSL2 太慢怎么办安装速度慢这个问题主要是 WSL 发行版的内核和镜像文件都托管在微软的服务器上跨网络下载速度不稳定。我自己在安装时也遇到过卡在进度条 60% 十分钟不动的情况。最有效的解决方案是手动下载发行版安装包然后离线导入。具体流程如下第一步从微软官方渠道下载 Linux 发行版的 rootfs 压缩包。如果你身边有另一台已经装好 WSL 的电脑也可以直接在 WSL 终端里执行导出命令wsl --export Ubuntu-22.04 D:\ubuntu-22.04-rootfs.tar第二步把下载好的 tar 文件放到你希望的目标位置比如D:\WSL\Ubuntu2204目录下执行导入命令wsl --import Ubuntu-22.04 D:\WSL\Ubuntu2204 D:\ubuntu-22.04-rootfs.tar --version 2这个命令的意思是从 tar 文件创建一个新的 WSL 发行版实例存储位置指定在 D 盘。你会发现--import这个方案顺便解决了“WSL2 怎么安装到指定目录”的痛点一举两得。第三步导入完成后直接用wsl -d Ubuntu-22.04进入系统。注意这时默认用户是 root因为导入的方式没有保留原系统的用户配置。需要在 WSL 内创建自己的用户或者修改默认用户配置。创建用户的命令useradd -m -s /bin/bash 你的用户名 passwd 你的用户名 usermod -aG sudo 你的用户名然后编辑 WSL 发行版内的/etc/wsl.conf文件[user] default你的用户名保存后在 PowerShell 里执行wsl --terminate Ubuntu-22.04重新进入默认用户就变成你自己了。4.3 默认装在 C 盘系统盘被撑爆的善后方案WSL2 的虚拟磁盘文件是ext4.vhdx它采用动态增长机制初始很小但装了 Docker、Python 环境、AI 模型文件之后几十 GB 很轻松。默认存储位置在C:\Users\你的用户名\AppData\Local\Packages\...下时间一长 C 盘就会告急。如果你已经装好并且存储占了很多可以做迁移。步骤其实和上面的导入导出类似在 PowerShell 中执行wsl --shutdown确保 WSL 完全停止执行wsl --export Ubuntu-22.04 D:\wsl-backup.tar导出备份执行wsl --unregister Ubuntu-22.04从 WSL 中移除原来的发行版注意这个命令会删除该系统内的所有数据务必备份执行wsl --import Ubuntu-22.04 D:\WSL\Ubuntu2204 D:\wsl-backup.tar --version 2重新导入到新位置迁移后按照前面提到的方法重新设置默认用户即可。还有一个只压缩不迁移的操作。如果你的 WSL 安装在系统盘但暂时不想挪可以手动压缩 vhdx 文件释放空间。同样先wsl --shutdown然后打开 diskpartselect vdisk fileC:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited...\LocalState\ext4.vhdx attach vdisk readonly compact vdisk detach vdisk exit这个操作对减少了文件但 vhdx 未自动收缩的情况特别有效我偶尔清理一次能释放 5-10GB。5. 日常使用体验优化网络、内存和文件互访5.1 网络模式NAT 默认够用镜像模式适合端口暴露场景WSL2 默认使用 NAT 模式Windows 作为宿主机WSL 子系统有一套自己的虚拟网络。日常开发最常见的需求是WSL 里启动一个后端服务Windows 浏览器访问localhost:8000来调试。默认情况下 WSL2 已经做了 localhost 转发所以直接访问即可不需要额外配置。但如果你启动的服务需要让局域网内其他设备访问或者服务监听的端口很多NAT 模式的转发配置就会变得繁琐。这时候可以尝试镜像网络模式。在C:\Users\你的用户名\.wslconfig文件中加入[wsl2] networkingModemirrored保存后执行wsl --shutdown再重启WSL 会共享 Windows 的网络接口局域网设备可以直接通过 Windows 的 IP 访问 WSL 内所有服务。这个功能需要 Windows 11 22H2 及以上版本配合较新的 WSL 版本老系统可能不支持。5.2 用 .wslconfig 控制内存和 CPU 上限WSL2 默认的资源配置比较保守默认内存分配为主机总内存的 50% 或 8GB 中的较小值。如果你打算在 WSL 里跑编译任务、Docker 容器或者 AI 训练这个默认值远远不够。还是通过C:\Users\你的用户名\.wslconfig调整示例配置如下[wsl2] memory16GB processors8 swap8GB配置完成后执行wsl --shutdown再重新启动 WSL 就生效了。这里有两个细节一是memory和swap参数要带单位processors直接填数字二是不要把宿主机内存全部分配出去Windows 本身也需要一定的内存余量否则系统会开始卡顿。5.3 文件互访的最佳姿势在 Windows 资源管理器的地址栏输入\\wsl$\Ubuntu-22.04可以直接浏览 WSL 里的文件系统拖拽文件、复制项目都非常方便。反过来在 WSL 终端里访问 Windows 文件系统也简单Windows 的盘符被挂载在/mnt目录下C 盘就是/mnt/cD 盘就是/mnt/d。但这里有一个性能大坑不要在/mnt/c下面直接跑编译或 npm install 这类 IO 密集操作。跨文件系统 IO 的开销非常大实测同样的项目放在/mnt/c下构建要比放在 Linux 原生的~目录下慢好几倍。正确做法是把项目代码放在 WSL 内部比如/home/用户名/projects需要的数据文件用软链接或路径引用指向 Windows 侧的磁盘这样才能兼顾性能和数据管理。如果你是 VS Code 用户强烈建议安装 Remote-WSL 插件。在 WSL 终端里输入code .VS Code 会自动以远程模式连接到 WSL编辑、调试、终端的体验完全是原生的不需要手动做任何端口转发。6. 把 WSL2 当生产力机器Docker、AI 训练和图形界面6.1 用 WSL2 后端跑 Docker资源占用比虚拟机低很多很多人装 WSL2 就是为了在 Windows 上跑 Docker。Docker Desktop 安装后在 Settings - Resources - WSL Integration 里勾选你使用的发行版Docker Desktop 就不再用 Hyper-V 虚拟机而是直接通过 WSL2 的轻量虚拟机运行容器。实际体验下来容器启动速度和 Linux 原生环境几乎没有差别而且因为 Docker Desktop 本身和 WSL2 共享内核内存占用比之前用 VirtualBox 跑 Docker 明显下降。在 WSL 终端里直接输入docker ps、docker compose up就能操作不需要切回 PowerShell 执行。6.2 WSL2 里装 CUDA本地做 AI 训练WSL2 对 AI 训练的支持是很多人关心的话题毕竟谁能拒绝在 Windows 上直接用 GPU 搞深度学习的诱惑呢。前提条件很明确Windows 侧需要安装支持 WSL 的 NVIDIA 驱动这个驱动版本会在任务管理器里看到“GPU”和“GPU - Copy”两个条目。WSL 内部不需要安装 NVIDIA 驱动只需要安装 CUDA Toolkit。安装 CUDA Toolkit for WSL2 的方式比较简单先添加 NVIDIA 的 apt 源再安装wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.1-1_all.deb sudo dpkg -i cuda-keyring_1.1-1_all.deb sudo apt-get update sudo apt-get -y install cuda安装完成后在 WSL 终端执行nvidia-smi如果能看到和 Windows 侧一致的 GPU 信息说明环境已经打通。配合 conda 安装 PyTorch就可以直接在这个环境里跑训练脚本了。我必须说这个方案对 AI 开发者的吸引力极大它把原来必须装双系统或者用远程 Linux 服务器的门槛降低了一大截。6.3 WSLg 图形界面Windows 11 用户开箱即用的惊喜Windows 11 自带的 WSLg 支持在 WSL 内直接运行 Linux GUI 应用。比如我想用 nautilus 管理文件或者打开 gedit 编辑脚本直接在 WSL 终端输入命令图形界面就会自动弹出和原生 Windows 窗口几乎无异。Windows 10 用户如果也想用图形界面可以安装 VcXsrv 之类的 X Server然后在 WSL 内设置DISPLAY:0环境变量。只是体验上不如 WSLg 顺手偶尔有性能问题。不过坦白说WSLg 更适合运行一些轻量 GUI 工具和开发辅助软件如果你想在 WSL2 里跑完整的桌面环境OpenGL 渲染和输入法之类的体验还远不如真机这时候传统虚拟机才是更合适的选择。6.4 其他重度使用场景嵌入式仿真与自动化测试除了常见的开发和 AI 场景WSL2 还能承担不少这类的重活。例如用verilator做硬件仿真在 WSL2 里编译和运行完全没有问题用xvfb跑无头浏览器测试也比在 Windows 上折腾各种兼容环境要清爽得多。实际上只要不是对硬件级访问有强依赖的应用WSL2 大多能接手。最后分享几个让我省心的小习惯在多次新装、迁移 WSL 的过程中我形成了几个固定的习惯每次都能少踩很多坑。第一重要环境要做定期备份。WSL 发行版内部的数据只存在于单个 vhdx 文件里一旦系统崩溃或误操作恢复很麻烦。我的做法是每隔一段时间执行一次wsl --export Ubuntu-22.04 D:\wslbackup\ubuntu-$(date %Y%m%d).tar保留最近两三份备份这样哪怕环境搞崩了也能快速恢复到可用状态。第二遇到 WSL 启动异常先别急着卸载重装按照虚拟化状态、Windows 功能、内核更新、冲突软件的顺序排查90% 的问题都能在十分钟内定位。最怕的就是一上来就wsl --unregister然后重新装费时费力还可能丢掉已有数据。第三把.wslconfig维护好这个文件是 WSL 日常体验的“总开关”。内存、CPU、网络模式都在这一处配置我建议你把自己的常用配置固定下来新机器上直接复制过去就能用。WSL2 确实不是一个完美的 Linux 替代品但对于绝大多数在 Windows 上需要 Linux 环境的人来说它已经足够好用而且还在不断迭代。把这些配置和排查思路收藏起来下次无论在新电脑还是老电脑上装 WSL2应该都能一次通过。
返回列表