极智开发 | win11+wsl2+docker+vscode开发环境构建

3,903 阅读6分钟

本文正在参加「金石计划」

欢迎关注我的公众号 [极智视界],获取我的更多经验分享

大家好,我是极智视界,本文介绍一下 win11 + wsl2 + docker + vscode 开发环境构建。

邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码下载,链接:t.zsxq.com/0aiNxERDq

开发方式其实有很多种,最常见的可能是 linux + ide 或者 linux + docker + ide 了,这里的 w11 + wsl2 + docker + vscode 其实可以看成是 w11衍生出的linux + docker + ide

折腾了几天,写个教程经验分享一下。

一、安装w11

安装 w11 就不多说了,可以选择u盘安装也可以直接软件安装。因为后面下载 wsl2 需要到Microsoft Store,所以需要激活一下以开启 Microsoft Store 的全部功能。不会windows激活的小伙伴可以在我的公众号「极智视界」内回复 windows激活 ,可以获取到屡试不爽的简便的激活方法。

二、安装wsl2

首先确保虚拟化选项开启,若未开启,则进 BIOS 开启。现在的机器一般都是默认开启的,可以进 任务管理器 -> 性能查看。

然后继续配置,打开 控制面板->程序->启用或关闭 windows 功能,开启 Windows 虚拟化Linux 子系统(WSL2) 以及 Hyper-V,勾选完成后重启电脑。

以管理员打开 PowerShell 终端执行如下命令:

bcdedit /set hypervisorlaunchtype auto

好,然后打开 Microsoft Store,以安装 ubuntu 为例,则搜索 ubuntu,会出来几个稳定版本,一般就是 ubuntu1804、ubuntu2004、ubuntu2204,选择一个自己喜欢的进行安装就行。

启动 ubuntu 的时候配置用户名和密码,wsl 也内置了一些命令,可以查看状态、切换 wsl 版本、停止掉 wsl 等,比如若要查看 wsl 的默认版本,可以在 PowerShell 终端输入:

wsl -l --all

三、安装docker

这里也是我"折腾"了几天的主要原因,按网上一些教程 --> 安装 Docker Desktop(软件)后,在 wsl2 中使用 docker 的方式,我在 docker run nvidia-docker 的时候就卡死了,试过一些所谓的文件io不跨系统、daemon.json配置、安装wsl-cuda-toolkit 以及 ubuntu1804/ubuntu20.04 中都不行。后来采用 wsl-cuda-tookkit + 抛弃Docker Desktop的方式成功,这种方式也就是直接在 wsl2 中通过命令行进行 docker 和 nvidia-docker 的安装。

这里还会有一个坑,就是在 wsl 中就得用 wsl 的 cuda-toolkit,不能用咱们平时用的 cuda-toolkit,不然在 run nvidia-docker 的时候同样会卡死。

下面说说我的方法。

首先去 NVIDIA 官网下载 wsl cuda-toolkit,官网下载地址:developer.nvidia.com/cuda-downlo…

比如我这里选择 cuda11.1.1 的版本,如下。

以安装 runfile 包为例,其实就两条命令:

# 下载包
wget https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda_11.1.1_455.32.00_linux.run

# 安装
sudo sh cuda_11.1.1_455.32.00_linux.run

接着进行常规的 ubuntu 环境的 docker 安装方式进行。

# 卸载旧版本docker ==> 因为本身纯净,执行不执行这条命令都不要紧
sudo apt remove docker docker-engine docker-ce docker.io 

# 更新包
sudo apt update 

# 安装以下包以使apt可以通过HTTPS使用存储库(repository)
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

# 添加docker官方密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# 设置stable存储库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

# 再次更新apt包
sudo apt update

# 安装最新docker CE
sudo apt install -y docker-ce 

# 安装nvidia-docker
# 添加源
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

# 再次更新包
sudo apt update

# 安装
sudo apt install -y nvidia-container-toolkit

# 启动docker server
sudo service docker restart

这样,已经成功安装好并启动了 wsl2 中的支持 GPU 调用的 docker 了,可以使用下面的命令测试:

docker run --rm --gpus all nvidia/cuda:11.1.1-devel-ubuntu18.04 nvidia-smi

这里你如果报权限的错误,如:permission denied while trying to connect to the Docker daemon socket xxx permission denied ==> 则可以把docker用户组加入sudo,或直接使用sudo docker命令

至此 wsl2 中的 docker 已经安装完成。

四、配置vscode远程

先把 wsl2 中的 openssh-server 给卸了,它预装的可能并不完整,咱们重新装一下。

# 更新包
sudo apt update

# 卸载&重装openssh-server
sudo apt remove openssh-server
sudo apt install openssh-server

接下来需要配置 openssh-server,修改 sshd_config 文件:

# vim打开sshd_config
sudo vim /etc/ssh/sshd_config

进入 sshd_config后,需要修改的配置如下,自己找一下对应进行修改:

Port 3333                   # 设置端口为3333
LoginGraceTime 120
StrictModes yes
PermitRootLogin yes         # 允许root远程登录
PasswordAuthentication yes  # 密码验证登录

拓展一句,若想免密登录,则可以打开 AuthorizedKeysFile .ssh/authorized_keys,并将你的开发机器/宿主机的 id_rsa.pub >> authorized_keys,然后将宿主机的authorized_keys拷贝到wsl的 ~/.ssh下 ==> 不会的找我

修改完毕后,保存退出 vim,重启 ssh 服务:

sudo service ssh --full-restart

需要注意的是,上面咱们配置了 3333 端口,但是这个端口大概率是被 windows 防火墙拦截的,那么怎么放开呢,按我说的做。

  • 进入防火墙,依次点击 高级设置 -> 入站规则 -> 新建规则
  • 依次点击 端口 -> 下一页 -> TCP -> 特定本地端口
  • 特定本地端口中输入咱们刚才设置的 3333 端口,点击 下一页
  • 点击 允许连接 -> 下一页 -> 下一页,最后填写 名称 -> 完成

这样 ssh 环境就配置好了,咱们可以用命令行 ssh 一下看能不能连上 wsl2,打开 PowerShell,输入如下命令:

ssh username@ip -p 3333  # username和ip替换成你实际的

这样能登录上后,再回到 vscode 的远程就简单了,先安装好 vscode 的 remote-ssh 插件,然后打开 config配置:

Host wsl2_ubuntu18.04
    HostName ip
    User username
    Port 3333

这样就大功告成了。


可以看到整个 win11 + wsl2 + docker + vscode 开发环境的配置过程其实涉及到挺多的知识点/技能点。其实,考虑文章可能篇幅过长,对于 wsl2通过Hyper-V固定ip、wsl2根目录迁移出c盘、docker根目录迁移,特别是vscode如何远程到wsl2中的docker方法 (这里是远程到了wsl2,还没到docker内) 等还没有介绍,但是这些只是 "锦上添花",这些并不影响这里的 win11 + wsl2 + docker + vscode 工具链开发环境的完整构建。

开发经验分享不宜篇幅过长,后面有机会再写写好了。

好了,以上分享了 win11 + wsl2 + docker + vscode开发环境构建,希望我的分享能对你的学习有一点帮助。


 【公众号传送】

《极智开发 | win11+wsl2+docker+vscode开发环境构建》


畅享人工智能的科技魅力,让好玩的AI项目不难玩。邀请您加入我的知识星球, 星球内我精心整备了大量好玩的AI项目,皆以工程源码形式开放使用,涵盖人脸、检测、分割、多模态、AIGC、自动驾驶、工业等。不敢说会对你学习有所帮助,但一定非常好玩,并持续更新更加有趣的项目。 t.zsxq.com/0aiNxERDq

logo_show.gif