【抄作业】如何优雅的更新 Docker 容器?使用Watchtower让Docker容器实现自动更新 您所在的位置:网站首页 qt怎么更新 【抄作业】如何优雅的更新 Docker 容器?使用Watchtower让Docker容器实现自动更新

【抄作业】如何优雅的更新 Docker 容器?使用Watchtower让Docker容器实现自动更新

#【抄作业】如何优雅的更新 Docker 容器?使用Watchtower让Docker容器实现自动更新| 来源: 网络整理| 查看: 265

  作者: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,如果今天的内容对你有帮助请记得收藏,顺便点点关注,我会经常给大家分享各类有意思的软件和免费干货!谢谢大家~

特别声明:以上文章内容仅代表作者本人观点,不代表新浪网观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与新浪网联系。


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有