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>
来设置自定义的间隔时间
共有 0 条评论