【抄作业】如何优雅的更新 Docker 容器?使用Watchtower让Docker容器实现自动更新 | 您所在的位置:网站首页 › qt怎么更新 › 【抄作业】如何优雅的更新 Docker 容器?使用Watchtower让Docker容器实现自动更新 |
作者: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为指定容器名字。 👉前台模式(手动更新) 前面介绍的更新Watchtower都是以 detached(后台)模式运行的,而 foreground(前台)模式可以说是手动模式,也就是说Watchtower运行一次就自动退出容器,下次需要的时候在次启动便可,这个对于更新次数比较少的容器还是非常有用的。这个模式需要加入的命令参数为“ —run-once ” 举例说明,我们需要检查更新librespeed-1和 portainer ,并且更新好之后退出本次运行创建的 Watchtower 容器: 🔺命令为: docker run -d —name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower —cleanup —run-once XXXX XXXX为指定容器名字。 🔺通过威联通的Container Staion可以发现,Watchtower 确实为退出状态。 实操演示 说了那么多,还是为小伙伴们展示一次实操结果吧! 🔺比如说我NAS上的qbittorrentee镜像目前在DockerHub上的最新版本为4.5.2.10 🔺但是我NAS上部署的容器显示的版本为4.5.1.10,很明显低一个版本。 🔺我的需求是只更新一次qbittorrentee容器,之让Watchtower退出。按照前面所说的命令格式,它的完整命令为: 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 🔺并且Watchtower已退出,就是这么简单~! 🔺对于刚刚命令的运行结果,我们还可以查看日志。命令为: docker logs -f watchtower 一步小心我又杠到深夜了,为了满足不同需求的小伙伴,以上每个命令我都需要不停的删除,然后重新部署才得以完成,难度不大,但是非常的耗费时间。 本篇文章也是我特意为NAS上玩Docker开设的个人专栏第一篇,还请小伙伴们多多支持!后续会有更多精彩的内容分享给大家! 好了,以上就是今天给大家分享的内容,我是爱分享的Stark-C,如果今天的内容对你有帮助请记得收藏,顺便点点关注,我会经常给大家分享各类有意思的软件和免费干货!谢谢大家~ 特别声明:以上文章内容仅代表作者本人观点,不代表新浪网观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与新浪网联系。 |
CopyRight 2018-2019 实验室设备网 版权所有 |