WSL2 作为后端要求 Windows 2004 及以上版本,安装 WSL2 请参考以前的文章;
安装 docker-desktop
-
下载最新版本并安装,注意勾选启用 WSL 2 支持 (如果电脑已经安装 WSL2,应该是默认勾选的);
-
打开 docker-desktop,跳过向导(网络原因,这个会很坑);
-
Settings -> General 中勾选 “Use WSL 2 based engine”;
-
Settings -> Resources -> WSL Integration 中勾选 “Ubuntu-20.04”
设置默认 WSL 发行版命令:
wsl --set-default ubuntu-20.04
-
[可选] Settings -> Docker Engine 中配置修改 “registry-mirrors” 镜像仓库地址
阿里云专属镜像加速地址 申请点这
- 科大镜像:https://docker.mirrors.ustc.edu.cn
- 网易:https://hub-mirror.c.163.com
- 阿里云:https://your_id.mirror.aliyuncs.com
- 七牛云加速器:https://reg-mirror.qiniu.com
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
{ "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com", "https://reg-mirror.qiniu.com" ], "builder": { "gc": { "defaultKeepStorage": "20GB", "enabled": true } }, "experimental": false, "features": { "buildkit": true } }
-
[可选] Settings -> Resources -> Proxies 中设置 http 代理为
192.168.2.1:7890
(按实际情况填写); -
在 WSL2 调用 docker 命令创建 app 能在桌面 GUI 程序中看到信息以及控制就成功了;
需要运行一个 docker 实例;
设置 GPU 加速
-
下载并安装 NVIDIA GPU 的最新驱动程序:点这里
-
最新 docker-desktop 已经支持 GPU 加速,不用做额外操作;
-
示例:使用 GPU 加速的 NVIDIA NGC TensorFlow 容器:
核心参数:
--gpus all
;1 2 3 4 5 6
# 运行容器 docker run --gpus all -it --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 nvcr.io/nvidia/tensorflow:20.03-tf2-py3 # 进入目录运行模型 cd nvidia-examples/cnn/ python resnet.py --batch_size=64
迁移 docker 的 WSL2 后端存储位置
启用 docker-desktop 的 WSL2 支持后,会由 docker-desktop 创建两个 WSL2 的发行版:
这些发行版默认存储路径都是 C 盘,可以将它们迁移到非系统盘;
迁移方法:
只需要迁移 docker-desktop-data 即可,另一个发行版(docker-dekstop)占用空间很小,且更新 Docker-Desktop.exe 后会恢复该发行版到其原始位置;
-
首先完全退出 docker-desktop
-
使用 powershell 关闭所有发行版:
1
wsl --shutdown
-
将发行版 docker-desktop-data 导出到
D:\WSL\docker-desktop-data.tar
docker images 和 apps 存储在该镜像中,不会丢失;
1
wsl --export docker-desktop-data D:\WSL\docker-desktop-data.tar
-
注销 docker-desktop-data:
1
wsl --unregister docker-desktop-data
-
从
D:\WSL\docker-desktop-data.tar
导入发行版 docker-desktop-data 到文件夹D:\WSL\docker-desktop-data
:1
wsl --import docker-desktop-data D:\WSL\docker-desktop-data D:\WSL\docker-desktop-data.tar --version 2
-
[可选] 删除中间导出文件
1
rm D:\WSL\docker-desktop-data.tar
更新 windows docker desktop 的问题
如果你使用 zsh,当你升级 docker 后 zsh 可能在启动时报一个错误:
1
compinit:498: no such file or directory: /usr/local/share/zsh/site-functions/_docker-machine
解决方法:
1
2
mkdir -p ~/.zsh/completion
curl -L https://raw.githubusercontent.com/docker/machine/v0.16.0/contrib/completion/zsh/_docker-machine > ~/.zsh/completion/_docker-machine
外部主机访问 WSL2
配置 portproxy
请先运行服务再配置 portproxy,否则运行服务时会提示端口占用;
-
命令行方式:
powershell 管理员执行:
假设 WSL2 开启了 8080 端口(本机可通过 127.0.0.1:8080 访问服务),输入如下指令后外部主机可以通过 {your-ip}:8080 访问服务;
1
netsh interface portproxy add v4tov4 listenport=8080 connectaddress=127.0.0.1 listenaddress=* protocol=tcp
-
Gui 方式:
下载 PortProxyGUI,Github 上提供 .netcore 和 .net3.5 的版本,建议用 VS2019 编译一个 .net4.5.2 的版本;
运行后,右键新建一条规则:
允许端口入站
-
方式一,关闭防火墙:
关闭 {your-ip} 对应网卡的防火墙(需要看你的网络是属于专用还是公用网络):
控制面板 –> 系统和安全 –> Windows Defender 防火墙
-
方式二,新建入站规则:
-
启用防火墙(控制面板 –> 系统和安全 –> Windows Defender 防火墙);
-
进入防火墙高级设置:
-
新建入站规则
在“入站规则”上右击新建规则:
选择端口规则:
输入希望从外访问的 TCP 8080 端口:
选择允许连接:
何时应用规则?默认即可:
最后做个简单描述,点击完成即可外部访问 8080 端口:
-