首页 » 嘿群晖 » 更换NAS DOCKER应用要重装?——保姆级Docker容器无损迁移教程

更换NAS DOCKER应用要重装?——保姆级Docker容器无损迁移教程

时间:2020-12-19作者:岁月十三鹰分类:嘿群晖评论:0

大家好,我是你们的智能家居领路人CT。相信爱好冲浪的大家,几乎人人家里都会有一台NAS,无论是群辉,威联通,还是黑裙,矿渣,还有All in One的矿渣软路由等等……,而即使是一个小白用户,在折腾的过程中,一定会用到一件“神器”——Dcoker。Docker真是件好东西,你可以用它来做影音管理,下载神器,私人云等等等等……不过做为智能家居玩家,用它用的最多的就是跑各种智能家居系统了,无论是home assitant,还是domoticz,iobroker,配合智能家居的homebridge,nodered,可视化数据用的Grafana, InfluxDB等,都可以一键无脑安装和使用。

5f977708ddfc73053.jpg_e680

那这里的问题就是,docker虽然很方便,但是万一系统崩了,硬盘坏了该怎么办?或者是硬件更换,Docker该怎么办呢?如果是像影音管理和下载之类,即使是重装也只是改下配置就能运行,但是智能家居或自动化呢?像我家里的智能设备数量是比较多的,光domoticz里面的设备idx已经到了330:

5f976f164ff858596.png_e680

而参与自动的话的变量数值也有97个:

5f976f76bf6f04099.png_e680

跟别提在后台运行的一分钟十几条的自动化了:

5f97701cc16183507.png_e680

这些东西差不多是过去3年我全屋智能的成果,我一直跟家居群的朋友说,要是哪天崩了,我就全线转投Hass阵营。当然,话虽这么说,但是你要我真的整个推翻重建,那我是打从心底的不乐意的。不过好在Docker的口号是“Build once,Run anywhere”,也就是搭建一次,哪都能用。

5f978ad2c0e8c7733.jpg_e680

所以只要搭建了一次,原则是可以随时导出,部署到其他硬件设备上的(注意:ARM版和X86版并不通用)。当然,实际上我们安装的容器本身,也是由其他人build之后放到Docker Hub,然后我们下载了之后Run的:

5f978b86863ed369.png_e680

而我们现在要做的,就是在别人的基础上,将自己改造过的容器再次打包,ship到其他设备,然后跑起来。

一、方案确认

做这事其实也不是心血来潮,其实早就预谋许久了。主要原因有以下几点,一是目前我的docker是运行在群晖DS218+上的,而最早部署DS218+的时候贪图空间利用的最大化,所以选择了JBOD模式:

5f97aa94695d17518.png_e680

JBOD模式说实话,当做普通的仓库盘或下载盘来说完全没有问题,但是如果有重要数据的话,JBOD没有恢复机制,要是硬盘出现物理损坏的话,那就哭也来不及了,并且刚才也说了,我的智能家居系统每分钟会记录上一大堆数据,并运行十几条自动化,所以硬盘永远都不会休眠,即使用的是PMR的4T红盘,这样24*7的运行了近3年,虽然目前状况良好,但是谁知道什么时候会出什么幺蛾子,有一个万一就只有哭的份了。并且近段时间已经感觉到因为零散数据太多,智能家居系统查个日志都能卡上半分钟,而备份个容器有时候要花上1-2个小时。

第二还是因为JBOD的关系,数据写入是按盘顺序写入的,等第一块盘写完了之后再把数据写到第二个磁盘,所以虽然我做了JBOD,但是实际上就目前的用量来看,数据都写在第一块磁盘里,第二块磁盘基本就是在那空转了三年。而HDD的并发能力实在堪忧,下载,智能家居,局域网内读取同时操作一块硬盘时,非常直观的一点就是灯光自动化会慢上两秒,而如果是局域网内有机器写入超大文件的话,那么在文件写入的时候,整个智能家居都会停摆,一直到文件写入完成……,当然,除去硬盘的关系,也可能是因为千兆网口被跑满的关系,这里就不去细究了。

所以怎么优化系统就不得不提上日程,简单点的做法是把整个系统干掉重来,先把数据导出,然后重新建立磁盘阵列,把数据恢复,完全零成本操作,就是要花些时间。但是这样做的问题出在我还是在使用HDD,并发还是会有问题,千兆跑满的问题还是解决不掉,只能说做RAID1能够让安全系数更高些。当然,还有个解决方法是换一块SSD专门跑Docker和系统,HDD只做数据盘,不过这样的话,原来两块4T红盘,只能用一块。另一块就浪费了,所以犹豫再三,我决定趁着DS218+在小黄鱼还能换点钱就直接换一台NAS:

天猫精选QNAP 威联通 TS-451D 4盘位 NAS网络存储(J4025、8GB)2899元

实时价格5小时前已更新

去购买

在之前写过给公司购买了威联通TVS-951N之后搭建了版本服务器,并且开通了百度云同步:

版本控制系统丨如何通过威联通TVS-951N,打造NAS的时光机器?本文来自#千兆网络有什么用#征稿活动,不断提速的网络给你的生活带来了什么变化?快来参与活动,聊聊你玩转互联网,高速网上冲浪的经历!>点击这里查看活动详情casatift|94评论53收藏420查看详情NAS同步百度云全攻略!一篇打尽win虚拟机、黑群、Docker操作演示本文来自#千兆网络有什么用#征稿活动,不断提速的网络给你的生活带来了什么变化?快来参与活动,聊聊你玩转互联网,高速网上冲浪的经历!>点击这里查看活动详情casatift|54评论41收藏669查看详情使用至今,状态良好,所以这次因为自己掏钱,所以也倾向于选择威联通品牌的NAS来替换掉群晖,主要原因还是因为威联通的性价比实在是高……

天猫精选QNAP 威联通 TS-451D 4盘位 NAS网络存储(J4025、8GB)2899元

实时价格5小时前已更新

去购买

这次我选的是威联通的TS451D,主要原因有如下几点:

一、四盘位

刚才说了,双盘位已经满足不了我需要,而6盘位甚至8盘位价格又太高,可以说4盘位的机型是比较符合我要求的。其中一个盘位上SSD,两个盘位放拆下来的4T红盘,剩下一个备用留待升级。

二、双千兆网络接口

前文也说过,不知道是因为网络跑满千兆还是因为HDD性能关系,大文件写入时整个系统都会卡住,所以这里准备使用双网卡,两根网线,一个IP为智能家居专用,另一个则用于日常NAS应用,网络不打架。

三、性能强大

虽然从配置上看,453D有4125四核处理器,双2.5G网络接口以及8G内存,但是以我之前的使用经验,在我跑了10来个docker的情况下,DS218+的系统资源占用也还是在低位:

5f97d2b87b0ea3415.png_e680

我丧心病狂的给DS218+配了10G内存,但是在日常应用中连2G都用不掉。而CPU 40%是峰值,日常只有10-20%,这还是16年发布的J3355,双核双线程HD500核显,而451D用的是19年新的J4025,虽然仍然是双核心双线程,但是睿频提升到了2.9GHz,并且支持DDR4,还使用了HD600核显,能够直接输出4k@60hz的影响,影音文件编码能力也有了提高。其实说这么多的意思就是,451D的配置完全够我用了,并且目测未来4-5年也不会有更新需求。

四、性价比高

当然,这一点也是最重要的一点,TS451D的到手价不足3000,一台X86的4盘位NAS,怎么都不算贵了。当然,要是你要拿矿渣来比,我无话可说。

除了NAS之外,我这次还添购了一块SSD,虽然本打算是使用拆机下来的128G SSD作为系统盘,但是考虑到128G的容量太受限了,并且已使用多年,为了长远的稳定性,还是一并购入新的:

这里选的是西数红盘,官方号称相对蓝盘拥有4倍寿命,虽然我也不是很信,但是差价也就300,还是买个平安吧。

二、NAS准备

1.硬盘安装

首先还是让我们先看下 TS451D

5f98178c4d33c6074.jpg_e680

虽然是4盘位设计,但是TS451D的体积控制的非常小,无论是放桌面,还是隐藏都很适宜。侧边的磨砂蓝非常的亮眼,给原本死气沉沉的黑盒子带来了一丝活力。

5f9817b2548a47067.jpg_e680

正面主要就是4个硬盘仓位以及开关,外加一个USB口以及指示灯。

5f9817d2903ee7091.jpg_e680

背面的接口比较丰富,2X1GBps网口,3个USB3.0接口,1个HDMI和电源接口以及巨大的散热风扇,毕竟四个硬盘,散热可不能省。

5f98183d4dd117551.jpg_e680

机器共有两个内存插槽,标配为1条金士顿4G ddr4L内存,如果有需要可以自己再买条4G的插上,不过根据我的经验,是完全不需要的,4G足够了。

5f98188c72e3d3781.jpg_e680

因为两块4T红盘还要等DS218+退役后拆过来,所以先只安装一块西数SSD作为“系统”盘。

2.系统配置

系统配置这部分比较傻瓜,如果是多硬盘的话,我们还需要选择RAID模式等等,但是我就用单硬盘,这块盘上只准备跑系统和Docker,不需要快照或备份,即使备份容器,也会出于安全考虑备份到其他磁盘。所以只预留了10%的SSD的缓存空间,剩余空间全部使用:

5f981acfe58fa7683.gif_e680

3.Container Station安装

在威联通QNAP QTS系统中,Docker和LXC被合并称作Container Station,我们只要在App Center中直接安装就行:

5f981d0d185bc8157.png_e680

三、导出原有容器

1.群辉系统

如果原先使用的是群辉系统的话,相信大家都知道Docker APP中有个导出选项:

5f980c61b8dfc4038.png_e680

选中想导出的容器,右键选择设置,导出

5f980c958f90e1720.png_e680

然后选择容器内容和设置,这样才会把容器运行后的所有修改全部导出,而导出容器设置则只是导出容器运行的命令。选择导出到 DiskStation,当然,你也可以选择导出到本地计算机,不过之前已经提过,我的硬盘似乎有些问题,导出要1-2个小时,所以就让它导出到DiskStation吧

5f980d17533883623.png_e680

然后可以看到,所选的容器在导出中,等导出完成,你就能得到一个.syno.txz文件,但是这里要注意的是.syno.txz这个格式的文件是不能被标准docker APP所使用(docker import只支持.tar文件),只能在DMS系统上导入,而我们如果要把DMS系统上的容器导出并迁移到非DMS系统的话,就需要SSH到群晖上,使用docker命令来干这事了。首先,我们要做的是打开群晖的SSH端口:

5f9829cd6f0586242.png_e680

先是打开控制面板里的高级模式,选择终端机和SNMP

5f982a0260fd4425.png_e680

之后就可以通过putty等SSH工具连接群晖使用docker命令来导出容器了。

2.linux系统的容器导出

上一节说到群晖直接导出的.syno.txz文件实际只能在DMS系统上使用,并且相信也有很多网友之前可能不是在使用群晖DMS而是使用X86的Linux的,所以下面就是如何SSH到主机使用命令来导出容器了

sudo docker ps

5f9810c177fdb2000.png_e680

系统会列出本机所有容器,然后我们先要将容器停止,运行命令,这里需要注意的是,在上面这张截图中有一列是COMMAND,这里也需要把它记下,我需要导出的是domoticz,对应的COMMAND是”/src/domoticz/domoticz”接着我们先把容器停止,在导出的时候容器不能运行:

sudo docker stop <容器ID>

5f981141614f98041.png_e680

接着再运行导出容器的命令:

sudo docker export <容器ID >><保存路径>

然后慢慢等待导出完成:

5f98127c7dc939175.png_e680

可以看到目录下多了一个domoticz.tar的文件,这个就是我们导出的容器。我们将其复制到本地电脑上待用。

四、导入容器

第一次打开Container Station APP会让你建立一个文件夹来储存磁盘镜像和容器:

5f982ca4a82586472.png_e680

然后进入Container Station的主界面选择导入:

5f982d2ae9d701502.png_e680

选择本地文件,下一步:

5f982d6fb93ac4601.png_e680

自己设定镜像名称,然后点击导入等待导入成功:

5f982db7583f63639.png_e680

然后我们点击资源下的镜像文件,就能看到我们刚才导入的镜像:

5f982e07069655036.png_e680

点击+号建立新的容器:

5f982e4bdecdc2710.png_e680

在命令这行填入我们在导出时记下的COMMAND,然后点击高级设置,根据实际情况来进行环境,网络,设备和共享文件夹,我这里是把网络设置成了Bridge:

5f982f1a64f959005.png_e680

然后创建容器,就能看到总览里容器已经运行起来了:

5f982f68d55fa7562.png_e680

然后打开浏览器web端口,就能看到和之前导出前一模一样的domoticz出现在你眼前:

5f982fd32d4cc464.png_e680

所有的设备都在,所有的日志也都在:

5f983004ea4f95096.png_e680

包括自动化也仍旧在完美的自动运行:

5f98305451a896259.png_e680

就跟没有换过NAS前一模一样,堪称完美。

五、总结

本文主要讲述了在同一架构(X86)下,Docker内容器的含数据迁移,通过这种方式,我们的Docker应用可以很方便的在不同硬件间切换,也应证了Docker 的那句Build once,Run anywhere口号。当然,除了有目的的硬件升级外,我们在平日还是需要自己做好备份工作,智能家居折腾不易,且行且珍惜。最后,如果大家觉得本文有用,还请收藏,以备不时之需。