前言
大家好,这里是可爱的cherry。NAS上部署的Docker服务多起来以后,Docker管理成了一件令人头疼的事情,今天介绍一款用于自动更新Docker镜像与容器的工具——Watchtower。让容器管理容器,让容器解放双手,不可谓不是自己给自己最好的一份礼物。
而我本人比较懒,又害怕服务一直吃性能,所以就设置成了手动更新的模式。以下是我在使用Watchtower时的日志记录,可以看到镜像、容器都在被稳步的更新迭代。
一、项目介绍
Watchtower在Github上有超过15.7K的星星,用于监控和自动进行镜像更新以及容器更新。
与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
(四)指定更新
这个功能就比较实用了,也是最推荐的模式。就是指定我们需要的容器进行更新,只需要在执行命令最后输入容器名字即可。这里分别是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小时
(七)使用群晖部署
在群晖部署的时候,可以在执行命令中加入以上提到的一些指令。
例如我最后生成的指令命令,就是包括了需要更新的容器。
最后
其实安装了那么多的Docker容器,实际在用的也就那么几个,很多时候为了稳定甚至特意去找了指定版本标签的(非latest)安装。
不过稳定是一方面,另一方面又不能忍受自己的镜像和容器不是最新的,因此使用Watchtower来帮助自己能有效降低自己的强迫症行为。
暂无评论内容