手绘流程图,教你 WSL2 与 Docker 容器无缝互相迁移
本文分享自华为云社区《WSL2与Docker容器,无缝互相迁移》,作者: tsjsdbd 。
注:本文提到的 WSL 都是指 WSL2
WSL 与 Docker
WSL 非常像 windows 版的 Docker,可以直接启动“容器”(故意加引号,下面有解释),并且在容器世界里面,可以执行各种 Linux 操作。像下面这样,是不是和 Docker 很像?
ps:上面提到的“容器”,实际是安全容器(即:虚机),WSL2 内部架构如下:
虽 WSL 和 Docker 很像,但是它对 WSL 镜像有要求,就是得从 MS 的应用商店下载:
这个就稍显不那么方便,毕竟你可能已经有很多现成的 Docker 容器了,这里又得重新安装一遍。
我是 Windows 上有 WSL,我的 Linux 开发机上有 Docker,那我怎么在 WSL 里面跑 Docker 呢?
WSL 运行 Docker 容器
常见的 WSL 里面运行 Docker,是这样子的:
就是把 WSL 当做一台新的开发机,然后在 WSL 里面,安装 Docker 软件。
这样子,也能解决问题。就是稍微麻烦了一点点。那能不能 WSL 直接运行 Docker 镜像呢?
答案是可以的:
参考:https://docs.microsoft.com/en-us/windows/wsl/use-custom-distro
这种方法下,是类似这个样子的:
具体操作如下:
在 Docker 里面,将容器导出来
然后再 WSL 里面,将 Docker 镜像导入:
示例
比如,我这里用 Docker 运行了一个 busybox 容器:
然后查询容器 ID:
导出:
然后我把这个 镜像文件,拷贝到我的 windows 电脑上。
并在 wsl 里面导入:
导入后查看:
这时,我启动这个 busybox 镜像。
OK,这时我已经在 WSL 容器里面了,这是一个 busybox 的 Docker 容器镜像。
Docker 运行 WSL 镜像
从上面的操作可以看出来,WSL 和 Docker 的镜像是相通的。所以 WSL 系统,也可以导出给 Docker 直接运行。类似这个样子:
具体操作如下:
先查看下当前跑了哪些 wsl 容器:
导出指定的 wsl 镜像
其中 “tsjsdbd_busybox” 就是你希望导给 Docker 运行的 WSL 容器(里面可能安装了一些你需要的软件)。导出的 tar 包,就可以看做是 WSL 镜像了(可以直接导入给 Docker)
最后,在 Docker 里面,导入这个镜像:
可以查询此镜像
并启动
WSL 镜像与 Docker 镜像
大体上,我给个示意:
所以 WSL 确实挺香的。
WSL 启动 GUI 界面
整体方案是利用 X11 Server,原理参考:
《Docker 运行带 UI 界面的应用,并将它的界面投射到你的 Windows 电脑》
https://bbs.huaweicloud.com/blogs/281862
X11 Server,一般网上推荐 VcXsrv,我自己用下来,感觉 MobaXterm 更傻瓜一些。所以我都用 MobaXterm 的。
附:安装 WSL
1. 系统要求
Windows 10,版本 2004 以上。
比如我的是 20H2,是 OK 的。
点击:开始-设置-关于,查询自己的版本
2. 判断 wsl2 是否已有
打开 power shell,输入
如 OK,则不用后续步骤了(说明你的 windows 版本已经比较高)。
不行,则手动执行后续步骤
3. 允许开发者模式
4. 启动 WSL2 功能
启用 WSL2
启用虚拟机平台
启用 Hyper-V
设置 WSL2 为默认
5. 重启,安装 wsl 补丁
执行以上补丁包。
补丁包下载地址:
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
附:高阶版 GPU,GUI 界面
Windows 版本高的(win10 21H2),可以在 WSL2 里面跑 CUDA
https://docs.microsoft.com/en-us/windows/ai/directml/gpu-cuda-in-wsl
再高一点(win11),可以原生支持带 GUI 界面的 Linux 程序。
https://docs.microsoft.com/en-us/windows/wsl/tutorials/gui-apps
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/c5efbf3f30eac8abdfe54749d】。文章转载请联系作者。
评论