手搓一个Docker 以支持更多平台更省内存!

花了一天多的时间实现的手搓版的Docker,它来了!!!
我们把它这么命名叫DockRoot!
那么这个手搓版的Docker有什么好处呢?
为什么要开发这个手搓版的Docker?
为什么不用原生的Docker呢?
1、首先我们这个DockRoot,对内核没有任何的依赖;所以它就可以支持华硕路由器,因为华硕本身的无线驱动是官方编译好,不开源的一些东西,你没办法去支持Docker;
2、DockRoot更省内存,因为它本身不需要Docker Daemon。
简单过一下 Docker原理:

Linux内核支持多个文件用户系统,支持多个用户空间来调用,然后内核去管理硬件;
并且用户空间的文件系统是独立的,相互隔离,不会互相干扰,但是又是共用同一个内核。

所以Docker就是一个轻量版的用户空间隔离,而不同于虚拟机的模拟出多个硬件,没有虚拟机隔离的那么彻底;Docker只是隔离了用户空间,没有隔离内核,对于性能来说,Docker比虚拟机更好,程序运行没太多的性能损耗;Docker对内核依赖程序更高。

那没有内核的支持,手搓版的DockRoot有什么缺陷?

总结下来,就是2个点:
必须以超级权限运行,相当于 Docker 的 privilege
没任何网络隔离,相当于 Docker 的 host 模式
DockRoot原理:
下载 Docker 镜像
解压为 rootfs
生成 ruri 需要运行的配置文件
ruri -c xxx/ruri.conf 运行镜像
那么怎么在设备上运行呢?
必须准备一个高速的U盘或者硬盘,格式化为 Ext4
手动把 DockRoot 文件下载到硬盘上
下载镜像:
./DockRoot.arm pull homeassistant/home-assistant:latest ha002./DockRoot.arm run ha002

这就是把智能家居 Homeassistant 的镜像,下载到本地成为ha002(可以理解为Docker的名字),然后运行的一个过程;


下载镜像,然后自动解压,这里的 ha002/rootfs 就是用户空间,

我们得到了 Homeassistant 的用户空间,然后通过 chroot 去运行,实际就是跟 Docker 运行 Homeassistant 一样的效果;
DockRoot 本质来说就是一个 Docker,只是缺少网络隔离和用户隔离。
Homeassistant 已经运行了,我们看看能不能进入 Homeassistant 管理页面;

演示操作是在华硕路由器——GS7魔盒上操作的,192.168.9.156就是魔盒的IP,接下来,通过 Homeassistant 的默认端口 8123 进入试试;

运行 Homeassistant 成功,是可以进入 Homeassistant 的。
然后通过 SSH 命令查看,Homeassistant 占用CPU也很低,后台也没任何 Docker 在运行;

这样 DockRoot 省了很多内存,很轻量化!!!
如果想探索更多华硕路由器的玩法,请持续关注我们「iStoreOS」公众号,和「酷友社」的B站号。

七重变
校验提示文案
七重变
校验提示文案