docker镜像的自动升级
背景
希望自己的一些docker镜像能随时保持最新状态,比如nginx,redis,甚至mysql等.
平常的方法可能需要手动操作
- 停掉并删除container
- 下载新的image
- 使用新的image建立container
latest不会永远为latest
带有非版本号tag的镜像,其版本可以通过 docker inspect xxx
等方法得到.
据说当pull了最新的latest版本后,原先的镜像tag会变成none.
Watchtower
- 这是一个自动监控image信息的工具,能够自动执行上面的操作,并提供额外的功能
- 监控了
/var/run/docker.sock
, 似乎能够记录下其他container是如何启动的,然后用同样的方式启动新的 - 黑白名单功能(但不是特别优雅)
- 设置检查间隔
- 日志和通知
- 使用docker配置连接私有仓库
- 监控远程docker
- hooks
- 监控了
- 本身也是一个docker镜像,安装和使用都很方便,甚至还能更新自身
尽管API的设计并不是特别优雅,但瑕不掩瑜.
初步使用
官方给了特别简单的指导,挑选除了以下内容
1 | docker run --rm \ |
或者对应的 docker-compose
版本
1 | version: "3" |
常见参数与用途
debug
cleanup
清除掉标签变为none的镜像们run-once
只执行一次interval
检查间隔(单位秒),默认86400s即24h.
黑白名单
非侵入式
直接以白名单的形式,在命令中指定要升级的 容器名.
考虑到不是特别依赖版本的镜像数量并不多,该方式比较容易接受
侵入式
该中方式下要求修改其他container的启动命令,加入
1 | --label=com.centurylinklabs.watchtower.enable="true" |
或者 docker-compose
中使用
1 | labels: |
这标签名也太长了,是希望给公司提高知名度吗?
但不能要求所有容器启动时都写上了该label.因此对于默认值的解读,可以用一些方式配置
- 命令中使用
--label-enable
选项 - 使用
WATCHTOWER_LABEL_ENABLE
环境变量
watchtower
配置的含义解读如下
- 配置结果为false(默认): 默认更新所有容器,除非声明label为false
- 配置结果为true: 默认不更新,除非声明label为true