再见watchtower!更好用的docker更新方案—威联通搭建tugtainer

说起docker容器镜像的更新,很多人第一反应就是大名鼎鼎的瞭望塔 – watchtower。
这款工具有它的很多便利之处,比如轻量化、标签化、无感化等等,但是对于国内习惯了使用可视化面板来管理各类服务的用户来说,配置其实还是过于复杂,尤其是那指定升级的标签,还需要重新装一遍其它容器,太过麻烦!
大家好,这里是Cherry,喜爱折腾、玩数码,热衷于分享数码玩耍经验~
最近,我找到了一款特别不错的docker镜像更新工具 —— tugtainer,它相比于 watchtower 最大的特点就是拥有可视化 WEB UI,而且无需配置其它容器的标签,只通过简单的点对点开启服务,就能满足指定容器镜像的版本监控和更新服务。
项目特点:
- 具有身份验证的 Web UI
- 套接字代理支持
- 多主机支持
- Crontab 调度
- 对各种服务的通知
- 每个容器的配置(仅检查或自动更新)
- 手动检查和更新
- 自动/手动图像prune

⭐部署机:
本次部署机使用的是威联通双十一前新推出的 Qu405-N355-16G。作为目前高端的低功耗处理器,N355 8核8线程的计算能力可以满足绝大多数多线程应用场景的性能需求,相比于上一代主流N150,性能提升约100%。此外,最大可扩容实测还可扩容为英睿达 24GB ,运行效率进一步释放。

说起 NAS 虚拟化能力的扩展性和兼容性,如果威联通自认第二,那应该没有 NAS 品牌可以说我能当第一了。
除了常见的 docker、虚拟机等虚拟化服务中,威联通在 QTS/QuTS Hero 系统中还提供了 LXD 虚拟化服务,特点是比 docker 容器性能损失更小;提供了 K3s 轻量化集群服务,实现容器部署的多节点冗余,降低服务单节点风险。作为生产主力机来说,威联通 Qu405-N355-16G 绝对合适,并不要说还有4000不到的8盘位型号 Qu805-N355-16G,绝对的性价比怪兽。

这几天,亚马逊崩溃导致大量的服务无法直连,而docker更是进一步被优化掉。所以为了确保我们的容器镜像更新服务可以正常运行,我们必须提前配置部分加速镜像或者代理库。
在威联通的Container Station应用中,打开存储库标签,分别在 Docker hub 默认仓库里添加加速镜像,并且在下方的自定义存储库中添加代理仓或加速仓。

接着,切换到应用程序标签,创建一个 compose 项目,然后将下面提供的 yaml 代码复制进去验证创建。

🔻yaml 代码,由于 tugtainer 项目可以配置更新通知,所以我这里还增加了 bark(ios端)、gotify(安卓端)的两个通知工具,方便后续配置,如果你不想要通知,也可以直接删除。
services:
app:
container_name: tugtainer
image: quenary/tugtainer:latest
volumes:
- tugtainer_data:/tugtainer
- /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped
ports:
- '9412:80'
# 下面的可以删除,IOS通知客户端
gotify:
image: gotify/server:latest
container_name: gotify
ports:
- "8081:80"
volumes:
- /share/Container/gotify:/app/data
environment:
- TZ=Asia/Shanghai
- GOTIFY_DEFAULTUSER_NAME=admin
- GOTIFY_DEFAULTUSER_PASS=your_strong_password
restart: unless-stopped
# 下面的可以删除,安卓通知客户端
gotify:
container_name: bark
image: finab/bark-server
volumes:
- /share/Container/bark:/data
environment:
- TZ=Asia/Shanghai
ports:
- 8080:8080
restart: unless-stopped
# 下面的不能删除
volumes:
tugtainer_data:
项目启动后,首次登录需要激活自定义的登录密码,如果大家有部署 Vaultwarden 的,也可以使用浏览器插件生成强口令,并且自动备份在 NAS 里。

退出并再次登录的时候,系统就会要求我们输入刚才配置的密码。由于 tugtainer 映射了我们的 docker socket,所以可以实现对的 docker 服务的全量管理,反过来也能直接影响到 NAS 的文件、目录,重要性极高,有效的鉴权机制可以保障我们的容器安全性。

这是我们的项目首页,几列分别是容器名称、容器运行状态、健康度(若有检测)、是否检测更新、是否更新、手动检测按钮。
它比 watchtower 最大的优势,就在于可以自由的配置某一个具体的容器镜像是否需要检测更新,是否需要更新,随时随地都可以自由调整。

左上角的功能栏里,提供了容器、镜像、设置、项目库等四个标签。

切换到镜像标签页,这里可以看到所有 NAS 里存储的镜像明细,包括是否 dingling(就是常见的none标签镜像),是否使用,以及它们的容量、创建时间、仓库信息等。
对于这些不使用的镜像,可以点击右上角的 Prune 一键销毁,释放 NAS 的存储空间。

接下来,是我们的配置重头戏,就是系统的通知功能。具体效果是当镜像检查到更新或者自动更新后,给我们发送消息让我们知晓。目前tugtainer支持主流的 Apprise、AWS、Bark、BlyeSky等数十个通知工具,详细的通知工具和 API 口令可以通过官网查询:pypi.org/project/apprise/。

由于我用的手机是iphone,所以这里就以 IOS 上的 Bark 通知服务来做教程,其它的方法也是类似参照即可。
在之前的代码中我们部署了 Bark 服务,所以只要直接下载 IOS 的 Bark 客户端并且添加自托管的域名/IP 地址,接着在设置里可以找到一个Device Token的字符串,这个我们需要激活使用。

打开浏览器,输入http://bark_ip:bark_port/register?devicetoken=你的token,然后浏览器会返回一串成功的内容,记录里面的device_key,这个就是你这台手机的设备码。

回到设置页面,在Notification URL里,按照网站要求填入bark:ip:port/device_key就可以了,然后点击一下右侧的通知测试,看看手机端能不能收到通知消息。
其它的配置,还有 CRON 自动计划、时区、更新后是否自动删除无用镜像等,这一些在每个设置的右侧都有说明,只需要简单配置,所以就不多介绍了。

以上,就是tugtainer这个项目的部署教程和具体使用方法了。总结下来,通过可视化的管理界面,以及自定义的任务计划和点对点的检查、升级渠道,tugtainer将原来watchtower等传统容器镜像升级服务做的更好用,并且可以支持外部通知,让我们不必时时刻刻盯着 NAS 来查看项目更新情况。
