文章

完整指南:在Windows上安装并配置WSL与Docker

详细介绍如何在Windows系统上安装配置WSL2和Docker,包括GPU支持、GUI应用运行等高级功能

完整指南:在Windows上安装并配置WSL与Docker

前言

Windows Subsystem for Linux (WSL) 和 Docker 是现代开发环境中不可或缺的工具。WSL 让开发者能够在 Windows 上原生运行 Linux 环境,而 Docker 则提供了轻量级的容器化解决方案。本教程将详细介绍如何在 Windows 系统上完整配置 WSL2 和 Docker,包括 GPU 支持、GUI 应用运行等高级功能。

目录

系统要求

硬件要求

  • 处理器: 支持虚拟化技术(Intel VT-x 或 AMD-V)
  • 内存: 建议 8GB 以上(16GB 更佳)
  • 存储: 至少 20GB 可用空间
  • GPU: NVIDIA 显卡(如需 GPU 支持)

软件要求

  • 操作系统: Windows 10 2004 及更高版本,或 Windows 11
  • Windows 版本: 建议使用 Windows 11 以获得最佳体验

WSL2 安装与配置

步骤 1:启用 Windows 功能

首先,我们需要启用必要的 Windows 功能。有两种方法:

方法 A:自动安装(推荐)

以管理员身份打开 PowerShell,运行:

1
wsl --install

方法 B:手动启用功能

如果自动安装失败,可以手动启用以下功能:

  1. Win + S 搜索”功能”,打开”启用或关闭 Windows 功能” 搜索功能

  2. 勾选以下功能:
    • ✅ 适用于 Linux 的 Windows 子系统
    • ✅ 虚拟机平台
    • ✅ Windows 虚拟机监控程序平台
    • ✅ Hyper-V(可选,某些系统需要)

    需要启用的功能

  3. 点击”确定”,重启计算机

步骤 2:设置 WSL2 为默认版本

重启后,打开 PowerShell,执行:

1
2
3
4
5
# 设置 WSL2 为默认版本
wsl --set-default-version 2

# 检查当前 WSL 版本
wsl --version

步骤 3:查看可用的 Linux 发行版

1
2
# 查看可安装的 Linux 发行版
wsl --list --online

常见可选发行版:

  • Ubuntu 24.04 LTS
  • Ubuntu 22.04 LTS
  • Ubuntu 20.04 LTS
  • Debian
  • Kali Linux
  • openSUSE
  • Alpine Linux

Linux 发行版管理

安装 Linux 发行版

1
2
3
4
5
6
# 安装 Ubuntu 24.04
wsl --install -d Ubuntu-24.04

# 或者安装其他版本
wsl --install -d Ubuntu-22.04
wsl --install -d Debian

安装过程中会提示创建用户名和密码,建议设置简单的密码(如 1),因为会频繁使用。

管理已安装的发行版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 查看已安装的发行版
wsl --list --verbose
# 或简写
wsl -l -v

# 设置特定发行版为 WSL2
wsl --set-version Ubuntu-22.04 2

# 设置默认发行版
wsl --set-default Ubuntu-22.04

# 注销并删除发行版(谨慎使用)
wsl --unregister Ubuntu-22.04

# 导出发行版备份
wsl --export Ubuntu-22.04 D:\tempbackup.tar

# 导入发行版
wsl --import Ubuntu D:\Ubuntu D:\tempbackup.tar

WSL 迁移到其他磁盘

默认情况下,WSL 安装在 C 盘。如果空间不足,可以迁移到其他磁盘:

1
2
3
4
5
6
7
8
9
10
11
# 1. 导出当前发行版
wsl --export Ubuntu-24.04 D:\wsl-backup\ubuntu.tar

# 2. 注销原发行版
wsl --unregister Ubuntu-24.04

# 3. 导入到新位置
wsl --import Ubuntu-24.04 D:\WSL\Ubuntu D:\wsl-backup\ubuntu.tar

# 4. 设置默认用户(需要查看原用户名)
# 在 WSL 中运行:cat /etc/passwd

详细迁移步骤可以参考我的另一篇文章:WSL迁移到其他盘

Docker 安装与配置

方法 1:使用官方或网络公开安装脚本(推荐)

在 WSL 中执行以下命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 下载并运行官方安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# 将当前用户添加到 docker 组
sudo usermod -aG docker $USER

# 重新加载组权限
newgrp docker

# 验证安装
docker --version
docker run hello-world

方法 2:使用自定义安装脚本

点击下载安装脚本

然后执行:

1
2
3
chmod +x ./install-docker.sh
sudo ./install-docker.sh
newgrp docker

GPU 支持配置

检查 GPU 状态

首先检查系统是否正确识别 GPU:

1
2
# 查看 NVIDIA GPU 信息
nvidia-smi

应当出现类似以下内容: nvidia-smi输出

安装 NVIDIA Container Toolkit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 步骤 1:配置生产存储库
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

# 步骤 2:更新包列表
sudo apt-get update

# 步骤 3:安装 NVIDIA Container Toolkit
sudo apt-get install -y nvidia-container-toolkit

# 步骤 4:配置 Docker 使用 NVIDIA runtime
sudo nvidia-ctk runtime configure --runtime=docker

# 步骤 5:重启 Docker 服务
sudo service docker restart
# 或
sudo systemctl restart docker

验证 GPU 支持

1
2
3
4
5
# 测试 GPU 是否可在容器中使用
docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi

# 运行 CUDA 示例
docker run --rm --runtime=nvidia --gpus all nvidia/cuda:12.0-base nvidia-smi

GUI 应用支持

WSL 原生 GUI 支持

WSL2 支持直接运行 Linux GUI 应用,无需额外配置:

1
2
3
4
5
6
7
# 安装 GUI 应用
sudo apt-get update
sudo apt-get install -y gedit firefox

# 直接运行
gedit
firefox

安装的应用会自动出现在 Windows 开始菜单中。

Docker 容器中的 GUI 应用

要在 Docker 容器中运行 GUI 应用,需要配置 X11 转发:

1
2
3
4
5
6
7
8
9
10
# 安装音频支持(可选)
sudo apt-get install -y pulseaudio alsa-utils

# 运行 GUI 应用的 Docker 容器
docker run -it \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -v /mnt/wslg:/mnt/wslg \
  -e DISPLAY=unix$DISPLAY \
  -e "PULSE_SERVER=${PULSE_SERVER}" \
  your-image-name

示例:运行 Gazebo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 创建支持 GUI 的 Dockerfile
cat > Dockerfile << EOF
FROM osrf/ros:humble-desktop

RUN apt-get update && apt-get install -y \
    gazebo \
    pulseaudio \
    alsa-utils \
    && rm -rf /var/lib/apt/lists/*

ENV DISPLAY=unix$DISPLAY
ENV PULSE_SERVER=${PULSE_SERVER}
EOF

# 构建镜像
docker build -t ros-gazebo-gui .

# 运行带 GUI 的容器
docker run -it --rm \
  --runtime=nvidia \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  -v /mnt/wslg:/mnt/wslg \
  -e DISPLAY=unix$DISPLAY \
  -e "PULSE_SERVER=${PULSE_SERVER}" \
  ros-gazebo-gui \
  gazebo

参考文章:在Docker中运行GUI程序

本文由作者按照 CC BY 4.0 进行授权