摘要:本文主要介绍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里面,将容器导出来
//查看正在运行的容器
docker ps
//根据容器ID,导出镜像包
docker export $ContainerID > ./tsjsdbd.tar
  • 然后再WSL里面,将Docker镜像导入:
wsl --import <DistributionName> <InstallLocation> <FileName>

示例

比如,我这里用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直接运行。类似这个样子:

具体操作如下:

先查看下当前跑了哪些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电脑》

https://bbs.huaweicloud.com/blogs/281862

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

执行以上补丁包。

补丁包下载地址:

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

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

手绘流程图,教你WSL2与Docker容器无缝互相迁移的更多相关文章

  1. Spring配置类深度剖析-总结篇(手绘流程图,可白嫖)

    生命太短暂,不要去做一些根本没有人想要的东西.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习 ...

  2. 你也可以手绘二维码(二)纠错码字算法:数论基础及伽罗瓦域GF(2^8)

    摘要:本文讲解二维码纠错码字生成使用到的数学数论基础知识,伽罗瓦域(Galois Field)GF(2^8),这是手绘二维码填格子理论基础,不想深究可以直接跳过.同时数论基础也是 Hash 算法,RS ...

  3. 轻量级手绘软件openCanvas免费版,手绘板CG手绘软件

    轻量级手绘软件openCanvas免费版,手绘板CG手绘软件 手绘软件通俗一点来说就是用手来绘画的软件,应用很宽泛如建筑,服饰陈列设计.橱窗设计.家居软装设计.空间花艺设计.美术.园林.环艺.摄影.工 ...

  4. JointBoost+CRF+GraphCut做手绘草图的分割

    研究生做的稍微有点水平的就这两个项目了:一个是利用SVM做手绘草图的分类,另一个是利用JointBoost+CRF做手绘草图的分割.总结得出的经验是做研究的方法就是将别人大神的代码看懂然后改成适合自己 ...

  5. Android基于mAppWidget实现手绘地图(一)--简介

    http://lemberg.github.io/mappwidget/user_guide.html 最近在看一些导游类应用,发现一些景区的导览图使用的完全是自定义地图,也就是手绘地图.这种小范围使 ...

  6. EDIUS手绘遮罩功能如何用

    学了这么久的EDIUS视频编辑软件,你们学的怎么样了呢?你们知道EIDUS手绘遮罩的用法么,会熟练地使用它么?如果你们还没有学到这一知识点的话也不要着急,因为你们看完下面这篇文章就会明白了.事不宜迟, ...

  7. 免费下载:320+ 手绘风格 Apple iOS7 图标

    Themify 图标是一套用在网页设计和应用程序的图标,包括 320+ 手工制作的像素完美的苹果  iOS7 图标中汲取灵感.这些图标完全免费,您可以用于任何目的,无论是个人或商业. 您可能感兴趣的相 ...

  8. IOS 手绘地图导航

    手绘地图导航 第三方库 NAMapKit, 1)支持在手绘图上标记.缩放 2)支持在单张图片 3)支持瓦片小图片 思路 前提:美工已经切好手绘图,并告知我们当前的缩放级别. 1)确定好手绘图左上角点在 ...

  9. 基于mAppWidget实现手绘地图(十五)–如何控制放大缩小

    一般来说,可以使用以下几种方式来控制地图的放大/缩小 : 使用控件底部的缩放按钮 双击控件 pinch手势 物理按键 :I键标识缩小 :O键表示放大.(只有设备具有物理按键才行)        当然, ...

随机推荐

  1. fckeditor for php 上传图片文件名中文乱码,中文文章乱码

    转载请注明来源:https://www.cnblogs.com/hookjc/ 中文名乱码是因为:FCKeditor使用UTF-8编码,自己机子比如是Windows系统文件名使用的是GBK编码,在上传 ...

  2. 用Java模拟实现对系统文件以目录的拷贝功能

    要用Java对单个文件拷贝的话,其实思路很简单,循环读取被拷贝文件,放入byte数组,然后写入目标文件.当然我们也可以借助现有的类去完成,如InputStream中的transferTo()方法就可以 ...

  3. linux 定时删除图以及crontab介绍

    执行 sudo crontab -e 0 3 1 * * /etc/letsencrypt/certbot-auto renew --renew-hook "sudo nginx -s re ...

  4. 5个不常提及的HTML技巧

    2021年你需要知道的HTML标签和属性 Web开发人员都在广泛的使用HTML.无论你使用什么框架或者选择哪个后端语言,框架在变,但是HTML始终如一.尽管被广泛使用,但还是有一些标签或者属性是大部分 ...

  5. Oracle - Trunc() 函数截取日期&截取数值

    Oracle TRUNC函数可以截取数字和日期类型:截取日期:select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; --显示当前时间 s ...

  6. Spring Security探究之路之开始

    前言 在Spring Security介绍中,我们分析到了根据请求获取匹配的SecurityFilterChain,这个类中包含了一组Filter 接下来我们从这些Filter开始探究之旅 Sprin ...

  7. Spring系列14:IoC容器的扩展点

    Spring系列14:IoC容器的扩展点 回顾 知识需要成体系地学习,本系列文章前后有关联,建议按照顺序阅读.上一篇我们详细介绍了Spring Bean的生命周期和丰富的扩展点,没有阅读的强烈建议先阅 ...

  8. 3、前端--伪元素选择器、选择器优先级、字体、背景、边框、display、盒子模型

    伪元素选择器 # 首字调整>>>:也是一种文档布局的方式 p:first-letter { font-size: 48px; /*字体大小*/ color: red; } # 在文本 ...

  9. Solution -「多校联训」染色

    \(\mathcal{Description}\)   Link.   给定 \(n\) 和 \(q\) 次询问,每次询问给出 \(x,k\),求第 \(x\) 位为 0 且任意两个 1 的下标之差不 ...

  10. Spring Boot数据访问之动态数据源切换之使用注解式AOP优化

    在Spring Boot数据访问之多数据源配置及数据源动态切换 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中详述了如何配置多数据源及多数据源之间的动态切换.但是需要读数据库的地方,就 ...