简介:
Docker 用户看过来!通过 Watchtower,一键自动更新容器,轻松管理你的应用环境。无需手动拉取镜像,彻底告别繁琐操作!本文将带你了解如何使用 Watchtower 实现 Docker 的自动更新。
项目地址:https://github.com/containrrr/watchtower
官方文档:https://containrrr.dev/watchtower/
什么是 Watchtower?
Watchtower 是一个简单而强大的工具,专门用于自动更新 Docker 容器中的镜像。通过 Watchtower,你可以定时检查容器的镜像版本,如果有更新,它会自动拉取并更新镜像,确保容器始终运行最新的版本。
Watchtower 的工作原理
Watchtower 通过监控 Docker 容器中的运行镜像,一旦发现镜像有新版本,它会:
Watchtower只检测你运行容器时使用的 tag 的更新变动
自动拉取最新的镜像。
停止正在运行的旧版本容器。
启动新的容器实例,使用最新的镜像。
如何安装和使用 Watchtower?
安装 Watchtower
在 Docker 中运行 Watchtower 非常简单。只需运行以下命令:docker run -d \ --name watchtower \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower
-d:后台运行 Watchtower。
--name watchtower:为容器命名为 Watchtower。
-v /var/run/docker.sock:/var/run/docker.sock:通过 Docker 套接字与 Docker 引擎通信,监控和更新容器。配置更新间隔
默认情况下,Watchtower 每隔 24 小时检查一次镜像更新。你可以根据需要调整检查的频率。如下选项来控制更新检查的频率,但二者只能选择其一。
方式一:
比如,如果你想每小时检查一次更新,可以通过 --interval,-i 参数进行设置,单位为秒:docker run -d \ --name watchtower \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower --interval 3600 -c
这里,--interval 3600 表示每 3600 秒(即 1 小时)检查一次更新。
方式二:
--schedule,-s 设置定时检测更新时间。格式为 6 字段 Cron 表达式,而非传统的 5 字段,即第一位是秒。比如每天凌晨 2 点检查一次更新:
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower -c \
--schedule "0 0 2 * * *"
使用 Watchtower 更新特定容器
如果你只想让 Watchtower 监控特定容器进行更新,可以指定容器名称。例如:docker run -d \ --name watchtower \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower -c nginx redis
- 使用 Watchtower 手动更新
如果您不希望 Watchtower 作为守护进程运行,您可以传递 --run-once 标志并在执行后删除 Watchtower 容器。例如:
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower --run-once -c nginx redis
--run-once 可以简写为 -R:
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower -Rc nginx redis
- 使用 Watchtower 自动清除旧镜像
官方给出的默认启动命令在长期使用后会堆积非常多的标签为 none 的旧镜像,如果放任不管会占用大量的磁盘空间。要避免这种情况可以加入 --cleanup 选项,这样每次更新都会把旧的镜像清理掉。例如:
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower --cleanup
--cleanup 选项可以简写为 -c, 如:
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower -c
- 查看 Watchtower 日志
docker logs -f watchtower
Watchtower 的优势
自动化:Watchtower 可以让 Docker 容器的更新全程自动化,免去手动操作的麻烦。
高效:每当镜像有更新时,Watchtower 会立刻为你替换掉旧版本的容器,保证环境始终处于最新状态。
节省时间:无需反复手动更新,每次更新都能自动执行。
轻松配置:只需几行命令即可完成配置,简单易用。
注意事项
资源消耗:Watchtower 会定期扫描所有容器,因此会占用一定的系统资源。对于小型环境,这通常不成问题,但在资源有限的环境中,可能需要谨慎考虑。
版本兼容性:确保 Watchtower 和 Docker 的版本兼容,避免出现意外问题。