当前位置: 首页 > article >正文

利用 Watchtower 自动监听并更新正在运行的 Docker 容器

本文首发于只抄博客,欢迎点击原文链接了解更多内容。

前言

大部分 VPS 和 NAS 用户或多或少都有用 Docker 来部署一些 Self-hosting 的服务,其中大部分项目都是开源项目,更新频率非常高,特别是一些版本 0.x 的项目,及时的将 Docker 容器更新到最新版本不仅可以体验到新特性,还能减少 BUG。

但是一旦部署的容器多起来,就不知道到底哪一个项目更新了,哪一个项目没有更新,即便是有类似 Portainer、Dockge 之类的可视化工具,更新 Docker 容器还是一件麻烦事。

而今天介绍的 Watchtower 可以帮助我们解决这个烦恼,启动 Watchtower 后,它将监控正在运行的 Docker 容器以及这些容器最初启动时所用的镜像是否发生变化。如果检测到镜像发生更改,Watchtower 会拉取新的镜像,然后正常关闭现有容器,再使用最初部署时的相同选项重新启动它。

简单用法

Watchtower 本身也是一个 Docker 容器,你可以直接通过 docker run 来启动它,所有的容器都会自动更新

谨慎运行以下代码,所有的容器都会更新!更多的配置请继续往后面看!

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

配置项

由于默认情况下的 Watchtower 会更新的所有的容器,我们可以通过配置项来进行设置,Watchtower 提供的配置项非常的多,可以参考官方文档,下面只介绍最常用的几个配置项。

更新指定容器

如果不希望更新所有的容器,只需要将要自动更新的容器名作为参数写在启动命令中,例如下面的命令只会更新 nginx 和 redis

docker run -d \
    --name watchtower \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower \
    nginx redis

忽略指定容器

如果你不希望某个容器不更新,可以通过 --disable-containers 参数(简写为 -x)将其忽略

清理旧镜像

如果你希望在容器更新完成后,自动清理旧的镜像,可以添加上 --cleanup 参数(简写为 -c

运行频率

默认情况下,Watchtower 会一直运行,以 86400s 的频率轮询检测 Docker 容器是否有更新,你可以通过 --interval 参数(简写为 -i)修改其运行频率,单位为秒,也可以通过 --schedule 参数(简写为 -s)来让他定时运行,参数为 6 字段的 Cron 表达式,两个参数只能选择其中一个

手动运行

默认情况下,Watchtower 是轮询检测 Docker 容器更新的,你也可以通过 --run-once 参数(简写为 -R)来让它只运行一次,每次运行完毕后 Watchtower 都会自动退出并删除自身

完整用法

上面的这些配置项看的一头雾水?没关系,下面给出完整的 Docker Compose 包含常用的一些配置项,每天的凌晨 4 点会自动更新所有的 Docker 容器,并且将旧镜像移除。如果需要更新指定容器或者忽略指定容器,只需要在 command 后面加上对应的容器名即可

services:
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    network_mode: host
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /etc/localtime:/etc/localtime:ro
    command: --cleanup --schedule "0 0 4 * * *"

http://www.kler.cn/a/413392.html

相关文章:

  • 新版布谷直播软件源码开发搭建功能更新明细
  • Electron文件写入、读取(作用:公共全局变量,本地存储)
  • 将table中行的赋值到其他模块去维护不显示,this.$forceUpdate()无效,刷新key 放到完整模块里不可行
  • 第四十篇 DDP模型并行
  • 异常处理(6)自定义异常
  • GESP C++等级考试 二级真题(2024年9月)
  • 如何选择合适的电网安全警示牌|防外破声光警示牌,确保电力设施安全
  • 深入理解SpringMVC(九)
  • matplotlib中文字体问题排查
  • 算法设计作业
  • AR商业化的“AI转身”
  • Unity类银河战士恶魔城学习总结(P141 Finalising ToolTip优化UI显示)
  • linux-centos-静态ipdocker安装使用
  • 网易博客旧文-----安卓界面代码例子研究(二)
  • 深度神经网络模型压缩学习笔记一:模型压缩概述
  • 量化交易系统开发-实时行情自动化交易-8.量化交易服务平台(一)
  • 企业OA管理系统:Spring Boot技术应用与优化
  • 校园交友/校园开黑/校园跑腿等多端系统如何进行二次开发?二次开发有哪些注意事项?
  • 40分钟学 Go 语言高并发:错误处理最佳实践
  • 最大公约数和最小公倍数-多语言
  • C语言——数组基本知识(一)
  • PHP 函数的未来发展有哪些变化呢
  • Github 2024-11-24 php开源项目日报 Top10
  • android 安全sdk相关
  • 【Linux】网络连接模式,VM:桥接、NAT、仅主机如何选择?
  • Linux 共享环境搭建