龙空技术网

如何优雅的更新 Docker 容器?使用Watchtower让Docker容器自动更新

什么值得买 3706

前言:

今天我们对“docker容器的命令展示出来”大致比较关切,朋友们都想要分析一些“docker容器的命令展示出来”的相关内容。那么小编在网摘上搜集了一些关于“docker容器的命令展示出来””的相关资讯,希望你们能喜欢,大家一起来了解一下吧!

本内容来源于@什么值得买APP,观点仅代表作者本人 |作者:Stark-C

我们在折腾NAS上 Docker 的时候,一般更新容器还需要手动停止容器,然后重新映射文件夹配置端口,重新拉取一次镜像,最后还要在重启容器。虽说步骤不多,但是如果Docker 容器比较多的话,操作起来还是很麻烦的。

今天就教大家一种可以利用Watchtower这款神器,实现Docker容器自动更新的小技巧,有需要的小伙伴先收藏,再观看!

今天使用的NAS为威联通TS-464C,作为家用型4盘位旗舰款,它搭载了Intel 四核心处理器,支持Intel OpenVINO AI引擎,配置了双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程序。

命令为:

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

但是这个命令默认更新的是所有运行中的容器,包括Watchtower自己。如果说你NAS中就部署了几个Docker容器,并且也确实需要让它们全部保持最新,这个命令就适合你,但是如果你NAS里面的Docker容器非常多,并且还有多个容器联动达到一个目的(比如搭建影音库就需要多个Docker容器联动),或者说有些容器已经很稳定我们不需要更新,全部更新可能会出现问题。

指定更新容器

通过这种方法,我们可以更新指定的容器,而没有被指定的容器则不会被更新。

在更新指定的容器前,我们需要知道我们需要更新容器的名字。命令为:

docker ps

在后面“NAMES”下面便是我们NAS中运行的所有Docker容器的名字。

假设我们需要监控并更新的容器为 librespeed-1和 portainer,我们需要的操作为:

命令为:

docker run -d —name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower librespeed-1 portainer

简单来说,它只需要在Watchtower默认的命令后面加上我们指定的容器名字即可,并且多个容器名字只用空格隔开即可,就这么简单!

自动清除旧镜像

默认命令如果长期使用会堆积非常多的标签为 none 的旧镜像,这些旧镜像占用的可是我们NAS中的磁盘空间,这个时候我们只需要在命令后面加上“ —cleanup ”的参数选项,这样每次更新都会把旧的镜像清理掉。

命令为:

docker run -d —name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower —cleanup XXXX

XXXX为指定容器名字。

指定更新频率

这里有两种方式可供选择,两种方式任选其一便可!

❶设置更新时间间隔,单位为秒,加入的命令参数为“ —interval ”。比如说我们需要设定每一个小时检查一次更新的频率:

命令为:

docker run -d —name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower —cleanup —interval 3600 XXXX

XXXX为指定容器名字。

❷设置定时检测,格式为 6 字段 Cron 表达式,加入的命令参数为“ —schedule ”。比如我们需要每天凌晨 3 点种检查更新:

命令为:

docker run -d —name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower —cleanup —schedule “0 0 3 *” XXXX

XXXX为指定容器名字。

前台模式(手动更新)

前面介绍的更新Watch­tower都是以 detached(后台)模式运行的,而 foreground(前台)模式可以说是手动模式,也就是说Watch­tower运行一次就自动退出容器,下次需要的时候在次启动便可,这个对于更新次数比较少的容器还是非常有用的。这个模式需要加入的命令参数为“ —run-once ”

举例说明,我们需要检查更新librespeed-1和 portainer ,并且更新好之后退出本次运行创建的 Watch­tower 容器:

命令为:

docker run -d —name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower —cleanup —run-once XXXX

XXXX为指定容器名字。

通过威联通的Container Staion可以发现,Watch­tower 确实为退出状态。

实操演示

说了那么多,还是为小伙伴们展示一次实操结果吧!

比如说我NAS上的qbittorrentee镜像目前在DockerHub上的最新版本为4.5.2.10

但是我NAS上部署的容器显示的版本为4.5.1.10,很明显低一个版本。

我的需求是只更新一次qbittorrentee容器,之让Watch­tower退出。按照前面所说的命令格式,它的完整命令为:

docker run -d —name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower —cleanup —run-once qbittorrentee

大概过了30秒,等我在次打开qbittorrentee界面,版本已经为最新的4.5.2.10

并且Watch­tower已退出,就是这么简单~!

对于刚刚命令的运行结果,我们还可以查看日志。命令为:

docker logs -f watchtower

一步小心我又杠到深夜了,为了满足不同需求的小伙伴,以上每个命令我都需要不停的删除,然后重新部署才得以完成,难度不大,但是非常的耗费时间。

本篇文章也是我特意为NAS上玩Docker开设的个人专栏第一篇,还请小伙伴们多多支持!后续会有更多精彩的内容分享给大家!

好了,以上就是今天给大家分享的内容,我是爱分享的Stark-C,如果今天的内容对你有帮助请记得收藏,顺便点点关注,我会经常给大家分享各类有意思的软件和免费干货!谢谢大家~

标签: #docker容器的命令展示出来