利用watchtower给群晖中Docker容器定时无损自动更新

聊数码有心跳吖 2024-03-30 04:35:33

群晖之所以备受欢迎,是因为它完善的系统,以及使用Docker可扩展丰富的可玩性。而Docker中的映像不是一成不变的,它是在不断更新,开发新的功能或者修复Bug的。但是我们配置好的容器是不会自动更新的,如果删除容器,重新下载新的映像并重新安装,那么原来的配置都会没了,需要重新配置。

我是一个很听劝的人,刚刚研究了怎么手动无损升级Docker容器,就有朋友推荐可以使用watchtower实现映像的自动无损升级。这可比我的手动无损升级更好用呀,赶紧来学习折腾一下。

先来说一下watchtower,它可以监视 Docker Hub 或私有仓库中的映像,并在发现新的映像版本时自动更新容器,我们可以通过定时任务来执行watchtower,可以在后台自定义的时间自动更新有新版的Docker。

我的群晖DSM是7.2版本的,它的Docker是使用Container Manager进行管理,首先在Container Manager的注册表菜单中搜索“watchtower”,我选择的是下载量最多的“containrrr/watchtower”,下拉最新版的映像。

下载完成以后无需运行映像,到“控制面板”中找到任务计划。

在任务计划中,逐层选择新增-计划的任务-用户定义的脚本

在常规设置中,任务名称可以自己随便起,不过必须是英文和数字,用户选择root

在计划设置中,设置任务运行的周期以及时间,想每天更新的可以选择每天重复,我觉得没有必要每天都去更新,就选择了每周一的5:00进行更新,因为这个时间我不会使用Docker,避免更新而造成的使用的中断

在任务设置中,输入我们的命令,其中“linuxserver-radarr-1”是指定要更新的容器的名称,如果为空的话是全部更新,我只是指定了我需要更新的容器,避免一些重要的Docker因更新造成运行不稳定。如果多个容器需要更新,可填写多个名称,中间用空格隔开。

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --run-once linuxserver-radarr-1

我手动执行了一次命令,经过短暂的运行可以看到,我的radarr从4.6.4.7568更新到了5.3.6.8612,成功进行了更新,并且全部的设置都没有变化,无需重新配置,即时可用。

如果映像有更新的话,它会停止容器才进行更新,所以我们的邮箱会收到容器异常停止的邮件

当然我设置的执行任务计划,也是会有邮件反馈的,在邮件中,也可以看到发现了linuxserver-radarr-1,并进行了更新

如果没有发现新版本的映像,邮件中显示顺利执行一次任务

通过watchtower,可以实现Docker容器的自动定时无损更新,如果我们使用了大量的Docker,这个更方便的管理方法。

0 阅读:0