对于一些个人的小项目来说,没必要也没能力上一些大型 devops 工具(如 jenkins,argocd) 时, 有一些小工具往往非常好用
当我们 ci 打包完成 docker 镜像之后需要 cd (部署)时,如果没有工具,有时候特别麻烦,而一些大型的重工具往往对于小项目来说并不合适。今天要说的一个小工具就是 watchtower。
地址: https://github.com/containrrr/watchtower/
介绍
功能
- 定时对比当前机器上的启动着的容器,如果发现新版本的镜像则停止、拉取、重启以更新容器
- 支持 cron 指定对比时间
- 支持指定容器
- 支持更新后进行通知
适用场景
- 单机小项目
- 启停间隔无所谓
- docker 镜像 latest 一把梭
使用
使用部署非常简单,一个 docker-compose 就能说清楚所有基础能力
代码语言:javascript复制version: "3"
services:
watchtower:
image: containrrr/watchtower
environment:
- TZ=Asia/Shanghai
- WATCHTOWER_NOTIFICATIONS=slack
- WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL="https://hooks.slack.com/services/xx/xx"
- WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=linkinstars-watcher
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /root/.docker/config.json:/config.json
command: your-app1 your-app2 --cleanup --interval 60
your-app1 your-app2
你需要监控的 docker 容器名称,如果不写,则是全部--cleanup
自动清理旧镜像,建议打开--interval
监控间隔时间,单位:秒。也可以替换为 cron 表达式--schedule "0 0 4 * * *"
当然注意配置时区,否则时间不对。WATCHTOWER_NOTIFICATIONS
通知渠道,具体其他通知配置可以参考:https://containrrr.dev/watchtower/notifications//var/run/docker.sock:/var/run/docker.sock
必须有,docker 容器的操作权限/root/.docker/config.json:/config.json
如果需要拉取私有 docker 仓库,则需要配置这个,否则拉取不到
其他
启动之后,如果需要单次执行,可以使用下面的命令:
代码语言:javascript复制docker exec -it watchtower-watchtower-1 /watchtower --debug --run-once your-app1
- watchtower-watchtower-1 为你启动的 watchtower 容器名称
- your-app1 是你需要检查的容器名称
总结
我最喜欢它的一点是解耦了 cd 和 ci,不需要一个独立的平台去配置 ssh 访问服务器去执行 cd 的工作,所以我用了也挺久的了,对于自己家里的小项目来说是足够了的。不过就一点很难受,通知不支持任意的 webhook,仅仅支持 slack 的 webhook,也没别的办法,无法接入钉钉飞书。