随着 Docker
的普及,基本上 90% 的项目都会提供 Docker
来部署应用并且隔离。部署之前有一些基础经验还好,还能预先设定之后怎么进行更新、数据怎么进行保存。但是有一些对 Docker
几乎不了解的用户来说,可能只能跟着用户文档复制粘贴运行,后续更新相当茫然,只能重新部署一次。
偶然在 Github
发现了 WatchTower
这个项目,我想这可能就是容器更新的最佳解决方案了。
简单介绍#
Watchtower 是一个容器管理工具,推荐的安装方式也是使用 Docker。它能够监视 Docker 中的容器,并在其所依赖的镜像更新之后自动更新容器并恢复数据。
一些优点#
- 自动更新,不需要人工进行干预,更新时候会保存所有的数据信息。
- 简单易用,默认运行方式也是直接 Docker 运行,不需要其他多余配置。
- 自定义程度高,支持配置时间点、更新镜像策略、更新容器策略等。
- 轻量级且和现有的服务无缝集成,不需要其他多余的配置
简单上手#
WatchTower
默认只需要执行下以下 Docker
命令就可以运行起来。默认为五分钟去检查一次,启动之后日志里面也会包含每次运行的时间、预计下次运行时间。
docker run -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower
这里我们启动时还可以加上一些其他的设置。
- 设置下默认时区,这里我只直接设置为东八区。
- 后台运行。
- 设置重启策略,即使
docker
重启了也还会继续运行。
# -d 后台运行
# -e TZ="Asia/Shanghai" 设置时区为东八区。
# -v /var/run/docker.sock:/var/run/docker.sock 让 WatchTower 可以查询到容器信息。
docker run -d \
--name watchtower \
-e TZ="Asia/Shanghai" \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower
扩展设置#
除了基础的应用,列出了一些比较常用的扩展配置:
--run-once
只执行一次。--cleanup
执行完成之后清理未使用的镜像。--include-stopped
停止的容器也去检查下。--schedule
使用cron
定时策略执行。--interval
使用间隔时间去执行,和--schedule
这个配置选择一个。
结合以上,可以整理出来一些常用的方式
- 手动执行一次对容器镜像的更新,更新的时候包含已停止的容器,并且更新完之后执行一次清理。
docker run --rm \
--name watchtower \
-e TZ="Asia/Shanghai" \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--run-once \
--cleanup \
--include-stopped
- 后台运行,每天早上五点执行一次检查(需要注意这里使用的
cron
是六位的,和linux
系统默认支持的有所不同)。
docker run -d \
--name watchtower \
-e TZ="Asia/Shanghai" \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--cleanup \
--include-stopped \
--schedule "0 0 5 * * *"
- 后台运行,每小时执行一次检查(这里的单位是
s
,所以一小时设置为3600
)。
docker run -d \
--name watchtower \
-e TZ="Asia/Shanghai" \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--cleanup \
--include-stopped \
--interval 3600