本内容来源于什么值得买APP,观点仅代表作者本人作者:StarkC 我们在折腾NAS上Docker的时候,一般更新容器还需要手动停止容器,然后重新映射文件夹配置端口,重新拉取一次镜像,最后还要在重启容器。虽说步骤不多,但是如果Docker容器比较多的话,操作起来还是很麻烦的。 今天就教大家一种可以利用Watchtower这款神器,实现Docker容器自动更新的小技巧,有需要的小伙伴先收藏,再观看! 今天使用的NAS为威联通TS464C,作为家用型4盘位旗舰款,它搭载了Intel四核心处理器,支持IntelOpenVINOAI引擎,配置了双2。5GbE口,NVMe双M。2插槽,再加上USB3。2和HDMI2。0的加入,不管是玩Docker还是折腾虚拟机都游刃有余! 关于Watchtower 什么是Watchtower? Watchtower是一款自由开源的应用,它本身自己也是一个Docker镜像,主要作用是用来监控运行中的容器最初启动时的镜像是否需要更新。 Watchtower如何工作? Watchtower在运行之后会监视NAS中正在运行的容器以及相关的镜像(可以是全部也可以是我们指定的),当它发现运行容器中的镜像已经有变动并需要更新的时候,它会以发送SIGTERM信号的方式,先结束运行中容器运行,然后会根据我们设定的指令(其实就是一条命令行),用该容器镜像最开始相同的参数自动重新启动相应的容器,甚至包括Watchtower本身,就是这么简单! 还不理解?你就把它看作是我们手机上的应用市场,而Docker容器就是手机上的APP,应用市场实际上也是一个APP,但是通过它可以更新手机上所有的APP。部署Watchtower 前面说过,Watchtower的运行仅需一条命令即可完成,所有我们想要什么样的Docker更新效果就在于我们命令的参数。所以接下来我将从各种需求来教大家如何设定Watchtower的部署命令! 为了让小伙伴们更好的抄作业,以下命令全部都在SSH连接的模式下进行。SSH连接工具请自备(Putty,XShell,FinalShell等),我演示的为FinalShell。 快速更新全部容器(不推荐) 这个是Watchtower默认的命令(原始命令),在这个命令下,我们可以快速的部署Watchtower程序。 命令为: dockerrundnamewatchtowervvarrundocker。sock:varrundocker。sockcontainrrrwatchtower 但是这个命令默认更新的是所有运行中的容器,包括Watchtower自己。如果说你NAS中就部署了几个Docker容器,并且也确实需要让它们全部保持最新,这个命令就适合你,但是如果你NAS里面的Docker容器非常多,并且还有多个容器联动达到一个目的(比如搭建影音库就需要多个Docker容器联动),或者说有些容器已经很稳定我们不需要更新,全部更新可能会出现问题。 指定更新容器 通过这种方法,我们可以更新指定的容器,而没有被指定的容器则不会被更新。 在更新指定的容器前,我们需要知道我们需要更新容器的名字。命令为: dockerps 在后面NAMES下面便是我们NAS中运行的所有Docker容器的名字。 假设我们需要监控并更新的容器为librespeed1和portainer,我们需要的操作为: 命令为: dockerrundnamewatchtowervvarrundocker。sock:varrundocker。sockcontainrrrwatchtowerlibrespeed1portainer 简单来说,它只需要在Watchtower默认的命令后面加上我们指定的容器名字即可,并且多个容器名字只用空格隔开即可,就这么简单! 自动清除旧镜像 默认命令如果长期使用会堆积非常多的标签为none的旧镜像,这些旧镜像占用的可是我们NAS中的磁盘空间,这个时候我们只需要在命令后面加上cleanup的参数选项,这样每次更新都会把旧的镜像清理掉。 命令为: dockerrundnamewatchtowervvarrundocker。sock:varrundocker。sockcontainrrrwatchtowercleanupXXXX XXXX为指定容器名字。 指定更新频率 这里有两种方式可供选择,两种方式任选其一便可! 设置更新时间间隔,单位为秒,加入的命令参数为interval。比如说我们需要设定每一个小时检查一次更新的频率: 命令为: dockerrundnamewatchtowervvarrundocker。sock:varrundocker。sockcontainrrrwatchtowercleanupinterval3600XXXX XXXX为指定容器名字。 设置定时检测,格式为6字段Cron表达式,加入的命令参数为schedule。比如我们需要每天凌晨3点种检查更新: 命令为: dockerrundnamewatchtowervvarrundocker。sock:varrundocker。sockcontainrrrwatchtowercleanupschedule003XXXX XXXX为指定容器名字。 前台模式(手动更新) 前面介绍的更新Watchtower都是以detached(后台)模式运行的,而foreground(前台)模式可以说是手动模式,也就是说Watchtower运行一次就自动退出容器,下次需要的时候在次启动便可,这个对于更新次数比较少的容器还是非常有用的。这个模式需要加入的命令参数为runonce 举例说明,我们需要检查更新librespeed1和portainer,并且更新好之后退出本次运行创建的Watchtower容器: 命令为: dockerrundnamewatchtowervvarrundocker。sock:varrundocker。sockcontainrrrwatchtowercleanuprunonceXXXX XXXX为指定容器名字。 通过威联通的ContainerStaion可以发现,Watchtower确实为退出状态。实操演示 说了那么多,还是为小伙伴们展示一次实操结果吧! 比如说我NAS上的qbittorrentee镜像目前在DockerHub上的最新版本为4。5。2。10 但是我NAS上部署的容器显示的版本为4。5。1。10,很明显低一个版本。 我的需求是只更新一次qbittorrentee容器,之让Watchtower退出。按照前面所说的命令格式,它的完整命令为: dockerrundnamewatchtowervvarrundocker。sock:varrundocker。sockcontainrrrwatchtowercleanuprunonceqbittorrentee 大概过了30秒,等我在次打开qbittorrentee界面,版本已经为最新的4。5。2。10 并且Watchtower已退出,就是这么简单! 对于刚刚命令的运行结果,我们还可以查看日志。命令为: dockerlogsfwatchtower 一步小心我又杠到深夜了,为了满足不同需求的小伙伴,以上每个命令我都需要不停的删除,然后重新部署才得以完成,难度不大,但是非常的耗费时间。 本篇文章也是我特意为NAS上玩Docker开设的个人专栏第一篇,还请小伙伴们多多支持!后续会有更多精彩的内容分享给大家! 好了,以上就是今天给大家分享的内容,我是爱分享的StarkC,如果今天的内容对你有帮助请记得收藏,顺便点点关注,我会经常给大家分享各类有意思的软件和免费干货!谢谢大家