【开发环境】Windows+Docker Desktop+WSL2最佳实践

什么是WSL2

WSL2(Windows Subsystem for Linux 2)是微软推出的第二代 Linux 子系统,于 2019 年正式发布并内置于 Windows 10 2004 版本及 Windows 11 中。

它允许开发者在 Windows 操作系统上,无需安装虚拟机或双启动,直接运行完整的 Linux 环境。

技术架构

与 WSL1 不同,WSL2 采用了全新的架构------通过一个轻量级的 Hyper-V 虚拟机运行真实的 Linux 内核,而不是通过系统调用翻译层模拟。

WSL1 架构 WSL2 架构
Linux 应用程序 ↓ 系统调用翻译层(Pico Process) ↓ Windows NT 内核 Linux 应用程序 ↓ 真实 Linux 内核 ↓ 轻量级 Hyper-V 虚拟机 ↓ Windows NT 内核(Hyper-V 层)

wsl1 / wsl2 / 虚拟机横向对比

对比维度 WSL1 WSL2 传统虚拟机
架构 系统调用翻译层 轻量级 Hyper-V VM 完整虚拟机
Linux 内核 兼容层模拟 真实 Linux 内核 真实 Linux 内核
启动速度 极快(<1秒) 快(<5秒) 慢(30秒+)
文件系统性能 Windows文件快 Linux文件极快 较慢(共享目录)
内存占用 极低 低(动态分配) 高(固定分配)
系统调用兼容性 部分兼容 完全兼容 完全兼容
Docker 支持 不支持 原生支持 需额外配置
GPU/硬件访问 有限 支持 GPU 直通 有限
网络集成 共享 Windows 网络 虚拟网络(NAT) 独立网络

如何选择?

  • 日常开发、Docker 使用 → 推荐 WSL2(性能最佳,集成最好)
  • 遗留 Linux 软件(网络工具等) → 考虑 WSL1(网络行为更接近 Windows)
  • 需要完全隔离环境、桌面图形操作 → 考虑传统虚拟机

wsl2 核心优势

性能极致:

  • Linux 原生文件系统(ext4)读写速度极快,I/O 性能媲美原生 Linux

  • 内存动态分配,按需使用,最大化利用系统资源

  • 启动速度通常在 1-5 秒内完成

完整Linux兼容性:

  • 运行真实 Linux 内核,支持所有 Linux 系统调用

  • 原生支持 Docker 容器运行时,无需额外虚拟化层

  • 支持完整的 Linux 工具链:gcc、make、gdb、strace 等

  • 兼容 ELF 二进制文件,可运行任何为 Linux 编译的程序

深度Windows集成:

  • 可从 Windows 文件资源管理器直接访问 Linux 文件系统(\\wsl$\)

  • 在 Linux 中可直接调用 Windows 可执行文件(如 explorer.exe、notepad.exe)

  • 与 VS Code Remote - WSL 扩展无缝集成

  • 支持 Windows Terminal,提供现代化的终端体验

  • Linux 程序可直接访问 Windows 剪贴板

开发体验友好:

  • 开发服务器(Node.js、Python Flask 等)端口自动转发到 Windows

  • 支持 systemd(需配置),可管理 Linux 服务

  • 统一开发环境:前端、后端、DevOps 工具全部可用

安装WSL2

系统要求

项目 要求
操作系统 Windows 10 版本 2004(内部版本 19041)或更高,推荐 Windows 11
处理器 64 位 CPU,支持 SLAT(二级地址转换)
内存 最低 4GB,推荐 8GB+
Hyper-V 需在 BIOS/UEFI 中启用虚拟化技术(Intel VT-x / AMD-V)
磁盘空间 至少 10GB 可用空间(推荐 SSD)

开启虚拟化

使用WSL2的前提是需要CPU支持开启虚拟化,从任务管理器中可以查看是否开启虚拟化

Windows10/11在BIOS中通常是默认开启的,如果未开启,可按照以下步骤开启:

  1. 重启电脑并进入 BIOS/UEFI(通常按 F2、F10、Del 或 Esc 键,和电脑品牌型号有关)

  2. 找到 Virtualization Technology(Intel VT-x)或 SVM Mode(AMD)

  3. 将其设置为 Enabled(启用)

  4. 保存设置并重启


安装

启动WSL功能:

bash 复制代码
# 启用 WSL
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    
# 启用虚拟机平台功能
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
    
# 重启电脑

设置WSL2为默认版本:

bash 复制代码
wsl --set-default-version 2

安装指定Linux(建议安装24.04):

bash 复制代码
# 查看可用发行版
wsl --list --online
    
# 安装 Ubuntu 24.04
wsl --install -d Ubuntu-24.04

验证安装:

bash 复制代码
# 查看已安装发行版及 WSL 版本
wsl --list --verbose
    
# 正常输出示例:
#   NAME            STATE           VERSION
#   Ubuntu-24.04   Running         2
    
# 查看 WSL 版本信息
wsl -l -v
    
# 带*号的是默认,修改默认
wsl --set-default Ubuntu-24.04
    
# 查看各发行版详细信息,其中BasePath代表发行版安装根目录(默认C盘,建议迁移到其他盘,具体步骤往下看)
Get-ChildItem HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss

将发行版迁移到其他磁盘:

bash 复制代码
# 关闭wsl
wsl --shutdown
    
# 导出当前发行版
wsl --export Ubuntu-24.04 D:\Backup\ubuntu-24-backup.tar
    
# 注销原发行版(会清空数据,需谨慎)
wsl --unregister Ubuntu-24.04
    
# 导入到新路径(如 D 盘)
wsl --import Ubuntu-24.04 D:\WSL\Ubuntu-24.04 D:\Backup\ubuntu-24-backup.tar

WSL2全局配置

对应配置文件位置:C:\Users\{用户名}\.wslconfig

Ubuntu初始化配置

创建用户

首次进入 Ubuntu,系统会提示创建用户:

bash 复制代码
Enter new UNIX username: myuser
New password: ********
Retype new password: ********

更新系统软件包(按需)

bash 复制代码
sudo apt update && sudo apt upgrade -y

换用国内镜像源(按需)

bash 复制代码
# 备份原始源配置
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
    
# 替换为阿里云镜像(Ubuntu 24.04)
sudo tee /etc/apt/sources.list << 'EOF'
deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
EOF
    
# 更新软件包列表
sudo apt update

配置Git(按需)

bash 复制代码
# 设置 Git 用户信息
git config --global user.name "Your Name"
git config --global user.email "your@email.com"
    
# 设置默认分支名称
git config --global init.defaultBranch main
    
# 设置凭据缓存
git config --global credential.helper store

修改发行版wsl配置(按需)

bash 复制代码
# /etc/wsl.conf(在 Linux 内编辑)
[boot]
# 启用 systemd(Ubuntu 22.04+ 默认支持)
systemd=true
    
[automount]
# 自动挂载 Windows 驱动器
enabled=true
# 挂载路径前缀
root=/mnt/
# 挂载选项(设置权限)
options="metadata,umask=22,fmask=11"
    
[network]
# 设置主机名
hostname=my-wsl
# 生成 /etc/hosts
generateHosts=true
# 生成 /etc/resolv.conf
generateResolvConf=true
    
[interop]
# 允许在 WSL 中启动 Windows 进程
enabled=true
# 将 Windows PATH 追加到 Linux PATH
appendWindowsPath=true

安装Docker Desktop

虽然WSL2支持手动安装管理Docker,但更建议Docker Desktop + WSL2,听官方的没错

安装前置条件

如果前面安装wsl2已经执行过,可以跳过~

bash 复制代码
# 启用 WSL
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    
# 启用虚拟机平台功能
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
    
# 设置 WSL2 为默认版本
wsl --set-default-version 2

安装

下载地址:https://www.docker.com/products/docker-desktop/

默认安装到C盘,安装完成会提示重启电脑

配置

设置开机自启等:

修改虚拟磁盘文件存放位置:

WSL 集成开关配置:

配置哪些 WSL 发行版可以直接使用 Docker CLI,并连接到 Docker Desktop 的 backend。

开启后,Docker Desktop会:

  1. 注入docker cli(/usr/bin/docker → Docker Desktop 提供的 client)

  2. 连接socket(/var/run/docker.sock → 指向 docker-desktop backend)

  3. 连接wsl backend

实际执行链路:

复制代码
Ubuntu WSL
   ↓
docker CLI
   ↓
/var/run/docker.sock
   ↓
docker-desktop WSL distro
   ↓
containerd
   ↓
WSL2 Linux kernel

验证:

常用命令速查

命令 说明
wsl --install 安装 WSL 及默认 Ubuntu 发行版
wsl --install -d Ubuntu-24.04 安装指定 Linux 发行版
wsl --list --online 列出可用的 Linux 发行版
wsl --list --verbose 列出已安装发行版及状态
wsl --set-default Ubuntu-24.04 设置默认发行版
wsl --set-version Ubuntu-24.04 2 将发行版升级到 WSL2
wsl --set-default-version 2 设置新安装默认使用 WSL2
wsl 启动默认 Linux 发行版
wsl -d Ubuntu-24.04 启动指定发行版
wsl --shutdown 关闭所有正在运行的发行版
wsl --terminate Ubuntu-24.04 终止指定发行版
wsl --status 查看 WSL 状态信息
wsl --update 更新 WSL 内核
wsl --export Ubuntu-24.04 backup.tar 导出发行版为 tar 文件
wsl --import Ubuntu-24.04 D:\WSL backup.tar 从 tar 文件导入发行版
wsl --unregister Ubuntu-24.04 注销并删除发行版

实用技巧

Windows与Linux文件互访

bash 复制代码
# 在 Linux 中访问 Windows C 盘
cd /mnt/c/Users/YourName/Desktop
    
# 在 Windows 资源管理器中打开当前 Linux 目录
explorer.exe .
    
# 在 Linux 中打开 Windows 程序
notepad.exe myfile.txt
code.exe .   # 用 VS Code 打开当前目录

SSH 密钥共享(按需)

bash 复制代码
# 从 Windows 复制 SSH 密钥到 WSL2
cp /mnt/c/Users/YourName/.ssh/id_rsa ~/.ssh/
cp /mnt/c/Users/YourName/.ssh/id_rsa.pub ~/.ssh/
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

与VSCode集成(按需)

VS Code 是 WSL2 开发的最佳拍档,安装 WSL 扩展后可在 Windows 上编辑 WSL2 文件:

bash 复制代码
# 在 WSL2 终端中,直接用 VS Code 打开项目
code .
    
# VS Code 会自动连接到 WSL2 环境
# 安装所需扩展:Ctrl+Shift+X -> Remote - WSL

提示:

在 VS Code 左下角可以看到连接状态显示为 "WSL: Ubuntu-24.04",

此时所有终端、调试、扩展都在 Linux 环境中运行,获得原生 Linux 开发体验。

与IDEA集成(按需)

  • IDEA和VS Code一样,也支持 Remote - WSL

  • 也可以直接打开WSL中的项目路径,例如:\\wsl.localhost\Ubuntu-20.04\home\qiye\develop\project\xxx

如果是直接接在WSL项目路径,有两个注意点:

  1. 项目路径注意不要放在/mnt/下,挂载目录坑多

  2. IDEA中Git 配置项Path to Git executable要配置WSL中的Git

配置 WSL2 网络代理(按需)

bash 复制代码
# 在 ~/.bashrc 或 ~/.zshrc 中添加:
export WINDOWS_HOST=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}')
export HTTP_PROXY="http://$WINDOWS_HOST:7890"
export HTTPS_PROXY="http://$WINDOWS_HOST:7890"
export ALL_PROXY="socks5://$WINDOWS_HOST:7890"

配置 Oh My Zsh 提升终端体验(按需)

bash 复制代码
# 安装 Zsh
sudo apt install zsh -y
    
# 安装 Oh My Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
    
# 安装 Powerlevel10k 主题(推荐)
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/themes/powerlevel10k
    
# 在 ~/.zshrc 中设置主题
ZSH_THEME="powerlevel10k/powerlevel10k"

升级优化IO响应速度(按需)

总结

WSL2 代表了 Windows 与 Linux 融合的重要一步。对于开发者而言,它提供了:

  • 原生 Linux 内核的完整系统调用兼容性

  • 接近原生的文件 I/O 性能

  • 与 Windows 生态的无缝集成

  • 低资源占用的轻量级虚拟化

  • 与现代开发工具(VS Code、Docker、Git)的一流支持

无论你是 Web 开发者、DevOps 工程师还是系统程序员,WSL2 都能极大地提升你在 Windows 上的开发效率,让你在不放弃 Windows 生产力工具的同时,享受 Linux 开发生态的全部优势。

相关推荐
YCOSA20251 小时前
雨晨 Windows 10 企业版 LTSC x64 中度精简 1809 迎双节 17763.9257 特别版
windows
orangapple1 小时前
在docker里启动 orthancteam/orthanc
docker
sukalot1 小时前
windows 驱动实例分析系列: HidHide 驱动分析 - drivers 篇(四)
windows·驱动开发
fengkai45453 小时前
八、Docker详解4-5
运维·docker
ι:7 小时前
NUC12 Pro 安装 Ubuntu 24.04 LTS 详细教程
linux·windows·ubuntu·nuc
YCOSA20257 小时前
微软宣布将于10月7日举行Windows与Surface发布会,聚焦“Windows、NVIDIA RTX Spark、Surface,以及更广泛PC生态”
windows
Source.Liu7 小时前
【A11】 labelprinter(Tauri 版)新建步骤
windows·rust
Punchline2788 小时前
解决 Windows 环境变量 Path 设置时提示“字符太长”的完整指南
windows·环境变量·path
chushiyunen9 小时前
claude code笔记(二)、claude桌面端(内网不好用)
windows
d_benhua10 小时前
以太网测试步骤
windows