docker妙用 篇七:docker自动更新容器——Watchtower全攻略(含大部分常用参数)
提示:本篇文章约4802字符,阅读大约需要5分钟。
关注专栏不迷路
写在前面
在使用docker的过程中,虽然我们知道在容器对应的镜像后面添加latest标签,然后通过手动编辑容器,即可拉取最新镜像,然后达成更新容器的目的。但是,大家是否会感到这种更新容器的方法不够优雅,或者在建立非常多的容器之后,使用手动更新容器将会是一件非常繁琐的事情,那么今天我们就来介绍一款非常优雅的容器更新工具——Watchtower。
注:本文适合所有可以安装docker容器的NAS系统食用,不过群晖有更为简单有效的办法,可以期待一下我之后的文章。
使用 Watchtower 自动更新 Docker 容器
介绍
Watchtower 是一个开源项目,它可以监控你的 Docker 容器,并在容器的基础镜像有更新时自动重启容器。这个工具对于需要持续部署和集成的项目来说非常有用,可以简化管理工作并确保你的应用始终运行最新的镜像。
环境准备
在开始使用 Watchtower 之前,你需要确保你的系统已经安装了 Docker,并已经配置好可以访问 Docker Hub 或其他 Docker 镜像仓库。如果你还没有安装 Docker,可以参考官方文档进行安装和配置。
安装 Watchtower
要在你的系统上安装 Watchtower,你可以使用 Docker 命令从 Docker Hub 下载 Watchtower 镜像,并创建一个新的容器来运行它。下面是一个基本的命令示例:
docker run -d --name=watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower
在这个命令中,我们使用 -v
选项将 Docker 的 Unix socket 挂载到 Watchtower 容器中,这样 Watchtower 就可以访问和管理其他 Docker 容器了。
Watchtower 的基本使用
安装完 Watchtower 后,你就可以开始使用它来自动更新你的 Docker 容器了。默认情况下,Watchtower 会每 5 分钟检查一次容器的基础镜像是否有更新。如果有更新,它会自动下载新的镜像,并重启容器。
此外,你还可以查看 Watchtower 的日志,以了解其工作情况:
docker logs watchtower
Watchtower 的高级配置
除了基本的自动更新功能,Watchtower 还支持许多高级配置,以满足不同的需求。例如,你可以设置 Watchtower 只在特定的时间段进行更新,或者配置 Watchtower 忽略某些容器。
如果你希望接收 Watchtower 的更新通知,你还可以配置 Watchtower 发送邮件或其他方式的通知。
更新特定容器
你可以在运行 Watchtower 时,指定它只更新特定的容器。你需要在命令行中添加你希望更新的容器的名称或者 ID。
更新特定容器代码如下:
docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower container_to_update_1 container_to_update_2
在这个例子中,Watchtower 将只会更新名为 container_to_update_1
和 container_to_update_2
的容器。
下面是一个实际操作的例子:
我在unraid下发现我的qb容器可以更新:
容器名称为qbittorrent:
那么实际操作就是:
docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower qbittorrent
忽略更新某些容器方法1
如果你希望 Watchtower 忽略某些容器,你可以在运行那些容器时添加一个名为 com.centurylinklabs.watchtower.enable
的 label,并将其值设为 false
。下面是一个例子:
docker run -d --label=com.centurylinklabs.watchtower.enable=false container_to_update_1
在这个例子中,Watchtower 将不会更新运行 container_to_update_1 镜像的这个容器。
忽略更新某些容器方法2
当然,如果你只想让Watchtower更新特定容器,那可以将以上思路进行反向选择:即在Watchtower的命令行参数中使用了--label-enable
,那么Watchtower将只更新那些带有标签com.centurylinklabs.watchtower.enable=true
的容器。这种情况下,你只需要在你想要Watchtower更新的容器上添加这个标签即可,其他没有这个标签的容器都会被Watchtower忽略。
那么Watchtower建立时的命令行参数应该修改为:
docker run -d --name=watchtower -v /var/run/docker.sock:/var/run/docker.sock --restart=always containrrr/watchtower --label-enable --cleanup
自动删除旧的镜像
如果需要Watchtower在自动更新容器时,删除旧的镜像以节约存储空间,请直接在命令结尾添加—cleanup参数即可。
即,部署命令为:
docker run -d --name=watchtower -v /var/run/docker.sock:/var/run/docker.sock --restart=always containrrr/watchtower --cleanup
立即检查更新
你可以通过发送一个 SIGHUP
信号给 Watchtower 容器来让它立即检查更新。你可以使用 docker kill
命令发送这个信号。以下是完整的命令:
docker kill -s SIGHUP watchtower
在这个命令中,-s SIGHUP
参数指定了要发送的信号,而 watchtower
是你的 Watchtower 容器的名称。
这个命令会让 Watchtower 立即开始检查并更新容器,而不是等到下一个计划的检查时间。注意,这个命令不会停止或重启 Watchtower 容器,只是触发它进行一次额外的检查。
故障排除
如果你在使用 Watchtower 时遇到问题,你可以参考官方文档的“故障排除”部分,或在社区论坛寻求帮助。另外,记住,始终查看 Watchtower 的日志是解决问题的好方法。
以下是一份Watchtower的日志示例:
time=”2023-05-23T02:37:45Z” level=info msg=”Watchtower 1.5.3”`:这个消息告诉你正在运行的Watchtower的版本是1.5.3。
time="2023-05-23T02:37:45Z" level=info msg="Using no notifications"
:这个消息告诉你Watchtower没有配置任何通知。这意味着如果容器被更新或出现错误,你将不会收到通知。time="2023-05-23T02:37:45Z" level=info msg="Only checking containers which name matches "qbittorrent""
:这个消息告诉你Watchtower只会检查名字匹配”qbittorrent”的容器是否有更新。time="2023-05-23T02:37:45Z" level=info msg="Scheduling first run: 2023-05-24 02:37:45 +0000 UTC"
:这个消息告诉你Watchtower将在UTC时间2023-05-24 02:37:45进行第一次检查。time="2023-05-23T02:37:45Z" level=info msg="Note that the first check will be performed in 23 hours, 59 minutes, 59 seconds"
:这个消息告诉你距离第一次检查还有大约24小时。
这些信息都是Watchtower启动时的常规日志,可以帮助你理解Watchtower的运行状态和计划。
总结
Watchtower 是一个强大的工具,可以帮助你简化 Docker 容器的管理,并确保你的应用始终运行最新的镜像。然而,像所有工具一样,它也有其局限性,例如,它不能更新使用了“latest”标签的镜像。因此,在
下期预告:如何定时自动启动和停止docker容器。
这就是本期的全部内容了,如果这篇文章对您有帮助的话,欢迎您在评论区多多讨论,也欢迎关注、点赞、打赏一键三连,您的支持对我非常重要。
我是冥冰薇,点个关注不迷路,我们下期再见。
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
天天刷
校验提示文案
值友3349562808
校验提示文案
包心菜布丁
校验提示文案
隔壁的七大叔
校验提示文案
啥都没有
校验提示文案
天人1
校验提示文案
爱吃大锅饭
校验提示文案
值友3292573772
校验提示文案
szseer
校验提示文案
C2H6
校验提示文案
C2H6
校验提示文案
szseer
校验提示文案
值友3292573772
校验提示文案
包心菜布丁
校验提示文案
爱吃大锅饭
校验提示文案
天人1
校验提示文案
值友3349562808
校验提示文案
啥都没有
校验提示文案
隔壁的七大叔
校验提示文案
天天刷
校验提示文案