本文正在参加「金石计划」
欢迎关注我的公众号 [极智视界],获取我的更多经验分享
大家好,我是极智视界,本文介绍一下 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开发环境构建,希望我的分享能对你的学习有一点帮助。
【公众号传送】
畅享人工智能的科技魅力,让好玩的AI项目不难玩。邀请您加入我的知识星球, 星球内我精心整备了大量好玩的AI项目,皆以工程源码形式开放使用,涵盖人脸、检测、分割、多模态、AIGC、自动驾驶、工业等。不敢说会对你学习有所帮助,但一定非常好玩,并持续更新更加有趣的项目。 t.zsxq.com/0aiNxERDq