Docker 篇四:watchtower——一键全自动更新docker容器

Docker 篇四:watchtower——一键全自动更新docker容器

前言

大家好,这里是可爱的cherry。NAS上部署的Docker服务多起来以后,Docker管理成了一件令人头疼的事情,今天介绍一款用于自动更新Docker镜像与容器的工具——Watchtower。让容器管理容器,让容器解放双手,不可谓不是自己给自己最好的一份礼物。

而我本人比较懒,又害怕服务一直吃性能,所以就设置成了手动更新的模式。以下是我在使用Watchtower时的日志记录,可以看到镜像、容器都在被稳步的更新迭代。

20240506151013726-4-1

 

 

一、项目介绍

Watchtower在Github上有超过15.7K的星星,用于监控和自动进行镜像更新以及容器更新。

20240506151040332-4-2

 

 

  • 与Docker守护进程通信: Watchtower通过与Docker守护进程的API进行通信来获取关于容器和镜像的信息。Watchtower容器启动时,它会将Docker守护进程的socket挂载到自己的文件系统上,以便能够直接与Docker API进行交互。

  • 获取镜像列表: Watchtower定期查询Docker守护进程,获取当前运行的容器所使用的镜像列表。通过比对这个列表和Docker Hub上的最新镜像版本,Watchtower能够确定哪些容器可以进行更新。

  • 比对镜像版本: Watchtower检查每个容器所使用的镜像是否有新的版本。这通常涉及到从Docker Hub或其他镜像仓库拉取最新的标签信息,比较本地镜像和远程镜像的版本号。

  • 自动更新容器: 一旦Watchtower确定容器的新版本可用,它将触发容器的重新创建。这个过程包括停止当前运行的容器、拉取新的镜像、然后重新启动容器。确保了应用程序在最短的停机时间内得到更新。

  • 可选的通知和日志: Watchtower支持可选的通知功能,可以通过配置来选择使用电子邮件、Slack等方式接收更新通知。此外,Watchtower会生成更新的日志,记录每次更新的详细信息,方便用户进行审查和故障排除。

  • 定制更新策略: Watchtower允许用户通过标签和其他配置选项对更新策略进行定制。用户可以为特定容器设置更新频率、指定不同的镜像源、定义更新时的行为等,以满足各种部署需求。

二、部署操作

以下分不同的使用场景进行介绍,也可以根据自己的要求进行组合。

(一)清理过期镜像

用于清理docker的匿名卷和标签为none的镜像。

–remove-volumes #清理匿名卷

–cleanup #清理标签为none的镜像。

sudo docker run -d –name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower –cleanup –remove-volumes

(二)定期更新

通俗的讲,就是啥也不管,24小时定期给你所有的docker更新一遍。

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

(三)单次更新

表示只让watchtower运行一次,运行完成以后容器就会变为停止状态,下次只要手动打开即可再次运行。

–run-once #只运行一次

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

(四)指定更新

20240506151053973-4-3

 

 

这个功能就比较实用了,也是最推荐的模式。就是指定我们需要的容器进行更新,只需要在执行命令最后输入容器名字即可。这里分别是mov-jellyfin和mov-autobangumi。

sudo docker run -d –name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower mov-jellyfin mov-autobangumi

(五)通知

推送目前支持slack,邮件,微软team,gotify等,这里介绍最简单的gotify。配置方法可以看我这篇文章

Docker 篇三:Nas给自己的礼物,实用好用妙用的各类消息通知工具

 
 

-e WATCHTOWER_NOTIFICATIONS=gotify

# 选择gotify作为推送接口

-e WATCHTOWER_NOTIFICATION_GOTIFY_URL=”https://my.gotify.tld/”

#gotify的网址

-e WATCHTOWER_NOTIFICATION_GOTIFY_TOKEN=”SuperSecretToken”

#gotify的token

sudo docker run -d –name watchtower -v /var/run/docker.sock:/var/run/docker.sock -e WATCHTOWER_NOTIFICATIONS=gotify -e WATCHTOWER_NOTIFICATION_GOTIFY_URL=”http://127.0.0.1:16008/” -e WATCHTOWER_NOTIFICATION_GOTIFY_TOKEN=”AcERJCNGLtwc.-l”

(六)其它

–include-stopped

#包含停止状态的容器,这样就不必在每次更新的时候要先把容器打开了。

–revive-stopped

#只能在上一个指令使用以后才可以使用,表示将未启用的容器更新后自动启动。

–interval 600

#定时轮训,数字表示秒,这里代表600秒。如果不输入-I,则是默认的是24小时

(七)使用群晖部署

在群晖部署的时候,可以在执行命令中加入以上提到的一些指令。

20240506151104353-4-4

 

 

例如我最后生成的指令命令,就是包括了需要更新的容器。

20240506151118494-4-5

 

 

最后

其实安装了那么多的Docker容器,实际在用的也就那么几个,很多时候为了稳定甚至特意去找了指定版本标签的(非latest)安装。

不过稳定是一方面,另一方面又不能忍受自己的镜像和容器不是最新的,因此使用Watchtower来帮助自己能有效降低自己的强迫症行为。

 

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容