3

手绘流程图,教你WSL2与Docker容器无缝互相迁移

 2 years ago
source link: https://juejin.cn/post/7075514747466022948
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

手绘流程图,教你WSL2与Docker容器无缝互相迁移

2022年03月16日 02:11 ·  阅读 6

本文分享自华为云社区《WSL2与Docker容器,无缝互相迁移》,作者: tsjsdbd 。

WSL与Docker

WSL非常像windows版的Docker,可以直接启动“容器”(故意加引号,下面有解释),并且在容器世界里面,可以执行各种Linux操作。像下面这样,是不是和Docker很像?

img

ps:上面提到的“容器”,实际是安全容器(即:虚机),WSL2内部架构如下:

img

虽WSL和Docker很像,但是它对WSL镜像有要求,就是得从 MS的应用商店下载:

img

这个就稍显不那么方便,毕竟你可能已经有很多现成的Docker容器了,这里又得重新安装一遍。

我是Windows上有WSL,我的Linux开发机上有Docker,那我怎么在WSL里面跑Docker呢?

WSL运行Docker容器

常见的WSL里面运行Docker,是这样子的:

img

就是把WSL当做一台新的开发机,然后在WSL里面,安装Docker软件。

这样子,也能解决问题。就是稍微麻烦了一点点。那能不能WSL直接运行Docker镜像呢?

答案是可以的:

参考:docs.microsoft.com/en-us/windo…

这种方法下,是类似这个样子的:

img

具体操作如下:

在Docker里面,将容器导出来:

//查看正在运行的容器

docker ps

//根据容器ID,导出镜像包

docker export $ContainerID > ./tsjsdbd.tar

然后再WSL里面,将Docker镜像导入:

wsl --import

比如,我这里用Docker运行了一个busybox容器:

docker run -it busybox /bin/sh

然后查询容器ID:

docker ps

CONTAINER ID   IMAGE

c1e9e8f77336   busybox
复制代码

docker export c1e9e8f77336 > tsjsdbd_busybox.tar

然后我把这个 镜像文件,拷贝到我的windows电脑上。

并在wsl里面导入:

wsl --import tsjsdbd_busybox ./busybox ./tsjsdbd_busybox.tar

导入后查看:

wsl -l 这时,我启动这个 busybox 镜像。

wsl -d tsjsdbd_busybox

OK,这时我已经在WSL容器里面了,这是一个busybox的Docker容器镜像。

Docker运行WSL镜像

从上面的操作可以看出来,WSL和Docker的镜像是相通的。所以WSL系统,也可以导出给Docker直接运行。类似这个样子:

img

具体操作如下:

先查看下当前跑了哪些wsl容器:


wsl -l -v

  NAME               STATE           VERSION

\* Ubuntu-18.04       Stopped         2

   tsjsdbd_busybox    Running         2
   
复制代码

导出指定的wsl镜像

wsl --export tsjsdbd_busybox ./mybox.tar

其中 “tsjsdbd_busybox” 就是你希望导给Docker运行的WSL容器(里面可能安装了一些你需要的软件)。导出的tar包,就可以看做是WSL镜像了(可以直接导入给Docker)

最后,在Docker里面,导入这个镜像:

docker import - mybox < mybox.tar

可以查询此镜像

docker images |grep mybox

docker run -it mybox /bin/sh

WSL镜像与Docker镜像

大体上,我给个示意:

所以WSL确实挺香的。

WSL启动GUI界面

整体方案是利用 X11 Server,原理参考:

《Docker运行带UI界面的应用,并将它的界面投射到你的Windows电脑》

bbs.huaweicloud.com/blogs/28186…

X11 Server,一般网上推荐 VcXsrv,我自己用下来,感觉 MobaXterm 更傻瓜一些。所以我都用 MobaXterm 的。

附:安装WSL

1. 系统要求

Windows 10,版本 2004 以上。

比如我的是 20H2,是OK的。

点击:开始-设置-关于,查询自己的版本

2. 判断wsl2是否已有

打开 power shell,输入

wsl -l -o

如OK,则不用后续步骤了(说明你的windows版本已经比较高)。

不行,则手动执行后续步骤

3. 允许开发者模式

4. 启动WSL2功能

启用WSL2

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

启用虚拟机平台

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

启用Hyper-V

dism.exe /online /enable-feature /featurename:Microsoft-Hyper-V /all /norestart

设置WSL2为默认

wsl --set-default-version 2

5. 重启,安装wsl补丁

wsl_update_x64.msi

执行以上补丁包。

补丁包下载地址:

wslstorestorage.blob.core.windows.net/wslblob/wsl…

附:高阶版 GPU,GUI界面

Windows版本高的(win10 21H2),可以在WSL2里面跑CUDA

docs.microsoft.com/en-us/windo…

再高一点(win11),可以原生支持带GUI界面的Linux程序。

docs.microsoft.com/en-us/windo…

注:本文提到的WSL都是指WSL2

点击关注,第一时间了解华为云新鲜技术~

文章被收录于专栏:
cover
程序员之家
技术资讯分享,欢迎投稿、交流~
安装掘金浏览器插件
多内容聚合浏览、多引擎快捷搜索、多工具便捷提效、多模式随心畅享,你想要的,这里都有!
前往安装

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK