watchtower 一个流行的 Docker 容器自动更新工具

前言

Watchtower 是一个流行的 Docker 容器自动更新工具,它可以帮助您自动监测并更新正在运行的容器

Watchtower 的工作原理是周期性地检查 Docker 主机上正在运行的容器,并与 Docker Hub 或私有镜像仓库进行比较,以检测镜像的更新。一旦发现镜像有新版本可用,Watchtower 将自动停止旧容器,拉取新镜像,并启动新的容器

项目地址:https://github.com/containrrr/watchtower

官方文档:https://containrrr.dev/watchtower/

安装和使用

当没有指定参数时,watchtower 将监视所有正在运行的容器

Watchtower 本身被打包为一个 Docker 容器,默认支持架构:linux/386、linux/amd64、linux/arm/v6 和 linux/arm64

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

该命令的含义如下:

  • -d 参数表示将容器以后台(detached)模式运行,即在后台运行而不阻塞终端。
  • --name watchtower 指定容器的名称为 "watchtower"。
  • -v /var/run/docker.sock:/var/run/docker.sock 将宿主机上的 /var/run/docker.sock 文件映射到容器中的同一位置。这样做是为了使容器能够与 Docker 守护进程进行通信,从而获取容器和镜像的信息。
  • containrrr/watchtower 是要使用的 Watchtower 镜像的名称。

默认情况下,watchtower 将监视在它指向的 Docker 守护进程中运行的所有容器

指定监视容器

但是,您可以通过在启动 watchtower 时将容器名称指定为参数来限制 watchtower 监视正在运行的容器。比如:

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

将只监视名为“nginx”和“redis”的容器的更新——所有其他正在运行的容器都将被忽略

手动运行

如果您不希望 watchtower 作为守护进程运行,您可以传递标志--run-once(可简写为:-R)并在执行后删除 watchtower 容器,即运行一次:

docker run --rm \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower \
    --run-once \
    nginx redis

使用此模式将启用调试输出,显示所有执行的操作,因为该模式适用于交互式用户

还可以执行这条命令:

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower -cR

更新所有,然后重启原来的容器;需要指定的话,同理,跟上容器id或 NAMES(名称)即可,多个用空格分隔

清理旧的镜像

默认旧的镜像会保留,TAG将会标注成 none,如果不想手动清理,可以按如下方式自动清理旧镜像

参数上,可以用--cleanup 或者简写-c,示例:

docker run --rm \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower -cR \
    nginx

也可用环境变量:WATCHTOWER_CLEANUP ,就是容器创建时 -e 指定或者在 Dockerfile 中使用 ENV 指令设置的

或者可以用这条命令:

docker rmi $(docker images -f "dangling=true" -q)

将会清理所有标记为none的镜像

删除附加的卷

参数:--remove-volumes

环境变量:WATCHTOWER_REMOVE_VOLUMES

指定此标志后,watchtower 将在使用新映像重新启动之前从容器中删除所有附加的卷。使用此选项可在更新容器时强制填充新卷

附加卷是将容器内的路径与主机上的路径进行关联的机制。通过挂载卷,可以实现容器内的数据持久化或与主机之间的数据共享。当容器更新时,有时可能需要删除旧的附加卷,并在使用新镜像重新启动容器时重新创建这些卷

使用此选项,请务必确认是否需要保留原来的挂载数据!

其他还有很多的用法,请自行查找官方文档

其他

第一次运行,要等24h后才会执行更新,此时可以在原先基础上选择用手动执行,这会触发强制更新,但并不会影响原先的更新计划

默认更新计划是每5分钟执行一次

--interval:指定 Watchtower 运行的间隔时间,默认为 300 秒(5 分钟)。也可以通过 -e WATCHTOWER_POLL_INTERVAL=<seconds> 来设置自定义的间隔时间

声 明 1 bujj博客:www.bujj.org
2 原创文章,转载请注明转自bujj博客:www.bujj.org
3 当前页网址:https://www.bujj.org/index.php/2023/05/31/526/
THE END
分享
二维码
< <上一篇
下一篇>>