Docker
自动清除旧镜像
- 官方给出的默认启动命令在长期使用后会堆积非常多的标签为
none
的旧镜像,如果放任不管会占用大量的磁盘空间。要避免这种情况可以加入--cleanup
选项,这样每次更新都会把旧的镜像清理掉。 --cleanup
选项可以简写为-c
:
选择性自动更新
容器更新列表
- 假设我们只想更新
nginx
、redis
这两个容器,我们可以把容器名称追加到启动命令的最后面,就像下面这个例子:
- 博主觉得把需要更新的容器名称写在启动命令中不利于管理,于是想了个更好的方法,建立一个更新列表文件。
- 通过变量的方式去调用这个列表:
- 这样只需要调整列表后删除 Watchtower 容器并重新执行上面的命令重新启动 Watchtower 即可。
设置单个容器自动更新特征
- 给容器中添加
com.centurylinklabs.watchtower.enable
这个 LABEL 并设置它的值为false
,或者在启动命令中加入--label com.centurylinklabs.watchtower.enable=false
参数可以排除相应的容器。下面这个例子是博主的openwrt-mini
镜像的容器启动命令,Watchtower 将永远忽略它的更新,即使它包含在自动更新列表中。
- 当容器启动命令中加入
--label com.centurylinklabs.watchtower.enable=true
参数,并且给 Watchtower 加上--label-enable
选项时,Watchtower 将只更新这些包含此参数的容器。 --label-enable
可以简写为-e
:
- 因为需要在容器启动时进行设置,且设置后就无法直接更改,只能重建容器,所以这种方式的灵活性不如更新列表法。尤其是在设置
com.centurylinklabs.watchtower.enable=false
参数后容器将永远被 Watchtower 忽略,也包括后面将要提到的手动更新方式,所以一般不推荐这样做,除非你愿意手动重建的原生方式更新。
设置自动更新检查频率
--interval
,-i
- 设置更新检测时间间隔,单位为秒。比如每隔 1 个小时检查一次更新
--schedule
,-s
- 设置定时检测更新时间。格式为 6 字段 Cron 表达式,而非传统的 5 字段,即第一位是秒。比如每天凌晨 2 点检查一次更新:
手动更新
- 前面的使用方式都是让 Watchtower 以
detached
(后台)模式在运行并自动更新容器,而 Watchtower 也支持以foreground
(前台)模式来使用,即运行一次退出并删掉容器,来实现手动更新容器。这对于偶尔更新一次那些不在自动更新列表中的容器非常有用。 - 对于
foreground
模式,需要加上--run-once
这个专用的选项。下面的例子 Docker 会运行一次 Watchtower 并检查aria2-pro
容器的基础镜像更新,最后删掉本次运行创建的 Watchtower 容器。 --run-once
可以简写为-R
:
- 需要注意的是当这个容器设置过
com.centurylinklabs.watchtower.enable=false
参数时不会更新。