让Docker容器优雅的实现自动更新,极空间NAS部署『Watchtower』

俺是玩机小能手 2024-12-19 14:56:56
让Docker容器优雅的实现自动更新,极空间NAS部署『Watchtower』

哈喽小伙伴们好,我是Stark-C~

折腾Docker可以说是NAS玩家最大的乐趣之一,不过很多小伙伴可能部署成功之后就不会再管它了,殊不知的是,Docker容器其实就和我们的手机APP一样,也会不停地更新与升级。

传统的Docker容器更新其实有些繁琐,还需要手动停止容器,然后重新拉取最新镜像,在对着原路径再配置一次,最后重启容器。虽说步骤不多,但是如果自己NAS上的Docker容器很多的话,操作起来还是很费功夫的。

对于极空间我很早就分享了它上面一个很好用的Docker更新神器『docker copilot』,不过不能自动更新略有遗憾,今天就为大家分享一种逼格更高(全程命令化操作),可以全自动监控和更新Docker容器的神器『Watchtower』

关于Watchtower

Watchtower是一个免费开源项目,主要用于自动更新运行中的 Docker 容器。它可以监控容器中的镜像,如果检测到更高版本的镜像可用,Watchtower 会自动拉取最新的镜像并重新启动容器,以确保使用的是最新的版本。

它主要的作用为:

自动检查更新:定期或者随时检查托管的容器镜像,以发现是否有新的版本。镜像拉取:当发现新的镜像版本时,自动拉取最新的镜像并自动配置。容器重启:在拉取完新镜像后,自动停止并重启相应的容器,以应用更新。配置灵活性:支持通过环境变量进行多种配置,用户可根据需求自定义更新策略(比如指定更新,全部更新等)。

它的工作原理为:

Watchtower在运行之后会监视NAS中正在运行的容器以及相关的镜像(可以是全部也可以是我们指定的),当它发现运行容器中的镜像已经有变动并需要更新的时候,它会以发送 SIGTERM 信号的方式,先结束运行中容器运行,然后会根据我们设定的指令(其实就是一条命令行),用该容器镜像最开始相同的参数自动重新启动相应的容器,甚至包括Watchtower本身,就是这么简单!

还不理解?你就把它看作是我们手机上的应用市场,而Docker容器就是手机上的APP,应用市场实际上也是一个APP,但是通过它可以更新手机上所有的APP。

Watchtower部署

Watchtower的部署需要我们开启极空间的SSH,位置在“系统设置--远程协助/SSH”。开启之后还需要使用SSH终端工具连接到极空间,具体的连接方案请看我之前极空间SSH教程的专题介绍。

连接成功之后,需要输入命令“sudo -i”,再输入一遍管理员的密码(输入密码没有显示,输入完成直接回车即可),切换到root账户(提升操作权限)。

然后这里需要说明的是,Watchtower是根据不同的命令操作来执行不同的更新效果,也就是说,我们需要根据自己的需求来执行不同的命令。下面我一个一个的来讲解。

需求一:快速更新全部容器(不推荐)

这个是Watchtower默认的命令(原始命令),在这个命令下,我们可以一键快速部署Watchtower程序并更新所有NAS上的Docker容器。

命令为:

docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower

我为什么不推荐这种方案?首先并不是最新版本就是最好的,可能会导致不稳定(和我们手机版本更新是一个道理),另一个就是,如果说你NAS里面部署的Docker容器非常多,特别是有Docker Compose堆栈容器,它们之间都是相互关联的,如果你更新到不同的版本,极大可能会出问题。

所以,这里建议大家【指定更新容器】,也就是说,只更新自己需要更新的。

需求二:指定更新容器

在更新指定的容器前,我们需要知道我们需要更新容器的名字。输入命令【docker ps】,在后面“NAMES”下面便是我们NAS中运行的所有Docker容器的名字。

我这里以更新portainer为例来作演示,它的命令为:

docker stop watchtower #因为我前面已经部署运行了watchtower容器,所以这里先要“停止watchtower容器”,首次操作这步忽略(下同)

docker rm watchtower #接着“删除watchtower容器”,首次操作这步忽略(下同)

docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower portainer #运行容器并更新portainer

简单来说,我们需要在命令后面加上想要更新的容器名字即可。并且它支持一次更新多个容器,我们只需要继续往后加上容器名字,中间用空格隔开即可。

需求三:指定更新容器的同时删除旧镜像

我们使用Docker的时间越长,更新Docker的次数越多,它之前的旧镜像文件还占据着我们NAS的空间。我们可以在使用watchtower更新Docker容器的时候加上“ --cleanup ”的参数选项,就能在更新容器的同时删除之前的旧镜像。

这里依然以portainer为例,它的命令为:

docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup portainer

需求四:指定更新容器的频率(时间)

watchtower默认是24小时监控一次,如果有更新就会自动更新。不过我们可以根据自己的需求自定义它监控和更新的时间频率,这里有两种方案:

一个方案是设置更新时间间隔,单位为秒,加入的命令参数为“ --interval ”。比如说我们需要设定每一个小时检查一次portainer的更新,它的命令为:

docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --interval 3600 portainer

【--interval 3600】就是我们指定的更新频率,一小时为3600秒。

另一个方案是置定时检测,格式为 6 字段 Cron 表达式,加入的命令参数为“ --schedule ”。比如我们需要每天凌晨 3 点种检查portainer的更新,它的命令为:

docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --schedule “0 0 3 * * *” portainer

【--schedule “0 0 3 * * *”】就是我们指定的更新频率,每天凌晨 3 点种的6 字段 Cron 表达式为“0 0 3 * * *”(自己找网站转换即可)。

需求五:手动更新

可能有些小伙伴只是想更新一次容器,然后让watchtower退出,下次更新再次打开即可。虽说可以直接在Docker管理器中手动停止watchtower容器,其实我们也可以直接通过加入命令参数“ --run-once ”来搞定。

比如说我需要更新一次 portainer ,并且更新好之后退出watchtower。它的命令为:

docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --run-once portainer

Watchtower体验

说了那么多,我现在以我NAS上的实际Docker容器为例为大家演示一次。比如说同样是神器的Lucky,目前我安装的版本为2.11.1,现在的最新版本为2.13.4。

我目前的需求就是更新Lucky容器的同时删掉旧容器,完成之后Watch­tower退出。按照前面所说的命令格式,它的完整命令为:

docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --run-once lucky

搞定之后我们再次打开Lucky容器,可以看到Lucky的版本已经更新到最新的2.14.0,甚至比它自己给出的版本还要高~~

并且Watch­tower也已经退出,就是这么简单~!

最后

Watchtower 的自动化、灵活性、安全性和易用性使其成为一个非常实用的 Docker 容器管理工具,可以说是NAS必装神器之一。但是,这里需要再次强调的是,并不是所有的 Docker 容器都适合第一时间更新,因为有些Docker容器是求稳,有些是需要特定功能。举个最简单的例子,nastools为什么要2.9.1版本,而不让它更新到最新版本?懂的都懂~

极空间最近的更新步伐明显加快,就比如说最近一次的更新除了常规的系统修复和优化,还带来了大家期待已久的新功能。比如说:

AI字幕:也就是智能字幕生产功能,调用本地AI计算能力,生产字幕文件,支持中文、英语、日语等多种声音的视频;DDNS功能:现在我们可以使用自己的个性域名直接访问极空间,支持自动添加DNS记录、泛域名解析、支持IPv6,可选择阿里、腾讯、花生壳三家服务提供商;子账号容量控制:管理员可以手动设定每个子账号在每个存储池可以使用的空间,存储容量分配更灵活方便;原画转码:观影爱好者期待已久,现在终于可以直接在APP端(手机&电视)直接观看原盘无损的电影或纪录片了;APP端小窗播放:就像目前市面上的流媒体APP一样,极空间手机端的APP也支持小窗播放功能,观看视频更方便了。

后续我也会单独出更详细的教程,为大家分享这些新功能的介绍和玩法。

还有就是,极空间也在本月正式发布了高性能四盘位NAS私有云Q4与随身智能魔盒T2S两款新品,继续为用户提供更易用、更智能、更安全、更强大的私有云产品与智能存储解决方案。如果你近期有入手NAS的计划,不妨关注下极空间。

好了,以上就是今天给大家分享的内容,我是爱分享的Stark-C,如果今天的内容对你有帮助请记得收藏,顺便点点关注,咱们下期再见!谢谢大家~

0 阅读:1

俺是玩机小能手

简介:感谢大家的关注