【热点】Docker镜像自动升级?Watchtower帮你搞定!
Watchtower介绍
之前我们讲了Docker的部署,当前一般通过docker hub上拉取镜像进行部署,但是如果docker hub上镜像版本变更了,容器不会自动升级镜像版本,保持在旧版本,如果我们想要升级只能重新拉取最新的latest版本,然后重新部署容器,还要保证创建的命令与之前的旧容器一致,这些步骤会比较繁琐。
Watchtower 是一个可以实现自动化更新 Docker 基础镜像与容器的实用工具。它监视正在运行的容器以及相关的镜像,当检测到 registry 中的镜像与本地的镜像有差异时,它会拉取最新镜像并使用最初部署时相同的参数重新启动相应的容器。
官网链接:https://containrrr.dev/watchtower/
Watchtower本身作为一个镜像可以像其他容器一样运行:将docker的进程映射到容器内进行监控。
# 官方运行参数参考,然后会检测所有容器和镜像的更新,包括watchtower本身
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower
选项
自动清除旧镜像
默认情况下旧版本镜像会保存在磁盘中成为孤立的镜像,watchtower提供了自动清除旧版本的功能,可以在docker run 时添加参数自动清除旧的镜像。
docker run -d \
--name watchtower \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--cleanup
或者简写-c
docker run -d \
--name watchtower \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower -c
选择性更新
有时候我们不需要全部镜像自动升级,由此产生一些故障和bug,可以选择性进行更新,在docker run时添加需要更新的指定容器名称可以设置只有指定的容器会自动更新,用于一些不适合经常更新升级的情况。
# 指定更新nginx和redis容器名称
docker run -d \
--name watchtower \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower -c \
nginx redis
设置更新频率
默认watchtower会每5分钟检查更新一次,可以通过--interval, -i或者--schedule, -s设置更新间隔。 --interval, -i - 设置更新检测时间间隔,单位为秒。比如每隔 1 个小时检查一次更新:
docker run -d \
--name watchtower \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower -c \
--interval 3600
--schedule, -s - 设置定时检测更新时间。格式为 6 字段 Cron 表达式,而非传统的 5 字段,即第一位是秒。比如每天凌晨 2 点检查一次更新:
docker run -d \
--name watchtower \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower -c \
--schedule "0 0 2 * * *"
手动更新
可以手动运行一次更新,相当于单独更新部分容器一次,然后删除watchtower,主要不用名称冲突即可。
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower -c \
--run-once \
aria2-pro
#
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower -cR \
aria2-pro
通过watchtower可以实现容器镜像版本的自动更新了,不过要考虑好那些服务需要更新,哪些不需要更新。
本文由 mdnice 多平台发布