搭建WatchTower
本文最后更新于 2024-03-20,文章原本内容可能已经过时,请查看是否有更新内容。
前言
由于substore项目更新实在太勤快了,懒得每次手动去更新了,所以重新搭建了watchtower
什么是watchtower?
Watchtower 是一个用于 Docker 的自动更新工具,它可以帮助自动更新运行在 Docker 容器中的应用程序。它通过定期检查 Docker 容器使用的镜像的新版本来工作。如果发现了镜像的新版本,Watchtower 会自动下载这个新版本的镜像,并用它来重新启动容器,从而达到自动更新应用程序的目的。
使用 Watchtower,开发人员和系统管理员可以确保他们的 Docker 容器总是运行最新版本的应用程序,而无需手动下载镜像和重启容器。这对于保持软件的安全性和稳定性至关重要,尤其是在需要频繁更新的环境中。
Watchtower 的使用通常很简单,只需运行一个 Watchtower 容器,并在启动时指定要监控更新的容器。Watchtower 还支持多种配置选项,如指定检查更新的频率、限制在特定时间段内执行更新等,以满足不同的使用需求。
本文将使用docker compose搭建watchtower,目的是方便更新substore
搭建watchtower
创建配置
mkdir /root/watchtower
cd /root/watchtower
cat > /root/watchtower/docker-compose.yml << EOF
version: "3.8"
services:
watchtower:
image: containrrr/watchtower
container_name: watchtower
restart: always
environment:
- TZ=Asia/Shanghai
- WATCHTOWER_CLEANUP=true # 更新后移除旧的镜像
- WATCHTOWER_SCHEDULE=0 */6 * * * # 设置 cron 定时任务
- WATCHTOWER_LABEL_ENABLE=true # 启用标签过滤
volumes:
- /var/run/docker.sock:/var/run/docker.sock
EOF
⚠️注意,我这里是启用了
标签过滤
也就是
- WATCHTOWER_LABEL_ENABLE=true
这个参数
因为我这台vps上不止搭建了substore,还有其他docker项目,我只希望watchtower自动更新substore,而不更新其他的项目,所以加了这个参数
如果你需要所有的docker项目都自动更新,把这个参数删除即可
cd /root/watchtower && docker compose up -d
现在watchtower就已经搭建完成了
但是如果你启用了- WATCHTOWER_LABEL_ENABLE=true # 启用标签过滤
这个参数,那还没完
你得在需要自动更新的docker项目的配置中也加一个标记参数
更改substore配置
根据搭建substore配置文件更改
原配置文件为
version: "3.8"
services:
sub-store:
image: xream/sub-store:latest
container_name: sub
restart: always
volumes:
- /root/sub:/opt/app/data
environment:
- SUB_STORE_FRONTEND_BACKEND_PATH=/xxx # xxx替换成下面的网站生成的20位随机数字字母密码,保存下来,最后要用
# <https://1password.com/zh-cn/password-generator>
# 这个网站快速快速帮你随机出来
- SUB_STORE_CRON=1 0 * * * # 定时上传"同步配置",可整行删除
- SUB_STORE_PUSH_SERVICE=https://api.day.app/XXXXXXXXXXXX/[推送标题]/[推送内容]?group=SubStore&autoCopy=1&isArchive=1&sound=shake&level=timeSensitive&icon=https%3A%2F%2Fraw.githubusercontent.com%2F58xinian%2Ficon%2Fmaster%2FSub-Store1.png # bark推送,没有的话要整行删除
ports:
- 3001:3001
stdin_open: true
tty: true
需要加一个标记参数
labels:
- com.centurylinklabs.watchtower.enable=true
那么更改完的配置文件为
version: "3.8"
services:
sub-store:
image: xream/sub-store:latest
container_name: sub
restart: always
volumes:
- /root/sub:/opt/app/data
environment:
- SUB_STORE_FRONTEND_BACKEND_PATH=/xxx # xxx替换成下面的网站生成的20位随机数字字母密码,保存下来,最后要用
# <https://1password.com/zh-cn/password-generator>
# 这个网站快速快速帮你随机出来
- SUB_STORE_CRON=1 0 * * * # 定时上传"同步配置",可整行删除
- SUB_STORE_PUSH_SERVICE=https://api.day.app/XXXXXXXXXXXX/[推送标题]/[推送内容]?group=SubStore&autoCopy=1&isArchive=1&sound=shake&level=timeSensitive&icon=https%3A%2F%2Fraw.githubusercontent.com%2F58xinian%2Ficon%2Fmaster%2FSub-Store1.png # bark推送,没有的话要整行删除
ports:
- 3001:3001
stdin_open: true
tty: true
labels:
- com.centurylinklabs.watchtower.enable=true
然后重新搭建sub即可
docker stop sub
docker rm sub
docker compose up -d # 要到你自己的sub的docker-compose.yml文件所在文件夹
那么现在加了这个标记的substore项目将被watchtower自动更新,其他的没有添加的将不受影响
运行图
补图
图中是成功检测到的一次substore更新