前言
Watchtower 是一个用于自动更新 Docker 容器的开源工具。它会定期检查运行中的容器镜像是否有新版本,如果有新的版本,就会拉取新的镜像并重新启动容器。这个过程是自动化的,无需手动干预,非常适合那些需要持续更新的 Docker 环境。
准备条件
1)一台服务器或者NAS
我们使用飞牛云NAS和VPS来演示
需要vps的可以看下vps官网
2)本项目使用到的github
https://github.com/containrrr/watchtower
①《飞牛NAS上搭建》
直接在docker新增一个compose项目即可
项目名称:
docker-compose配置如下
启动成功
国内如果无法使用Docker的可以尝试更换Docker镜像仓库
补充docker可用的镜像仓库
《vps上搭建》
Docker环境部署
在vps安装docker和docker-compose
Docker官方安装文档(英文)
https://duan.yyzq.eu.org/docker-001
Docker-Compose官方安装文档(英文)
https://duan.yyzq.eu.org/docker-002
Centos安装Docker和Docker-compose(中文)
https://duan.yyzq.eu.org//03
Ubuntu安装Docker和Docker-compose(中文)
https://duan.yyzq.eu.org//04
推荐直接用一键脚本
docker安装脚本
docker-compose安装脚本
创建docker-compose.yml文件
执行容器运行命令
正常启动如下所示
一、主要功能
1.1自动拉取镜像:
Watchtower 会定期检查镜像的版本,如果发现有新的版本,它会自动拉取更新的镜像。
1.2自动重启容器:
更新镜像后,Watchtower 会自动停止旧容器,并使用新镜像启动一个新容器。这样,容器始终保持最新的镜像版本。
1.3支持多个容器:
你可以将 Watchtower 配置为更新单个容器、多个容器或整个系统上的所有容器。
1.4轻量级:
Watchtower 作为一个 Docker 容器运行,内存和资源消耗非常低,只需要 docker.sock 的访问权限来与 Docker 引擎交互。
1.5灵活的配置:
通过环境变量,你可以控制 Watchtower 的许多行为,比如更新频率、是否通知、更新特定容器等。
二、工作原理
2.1容器监控:
Watchtower 定期扫描宿主机上的容器,检查它们使用的镜像是否有更新。
2.2镜像更新:
如果找到镜像的新版本,Watchtower 会自动拉取该镜像并重新启动容器。
2.3容器重启:
旧的容器会被停止并移除,新的容器会使用更新后的镜像重新启动。这个过程是无缝的,基本不需要人工干预。
三、安装与配置
Watchtower 可以通过 Docker Compose 或直接使用 Docker 命令来启动。最常见的做法是通过 docker-compose.yml 文件来定义 Watchtower 服务。
一个基本的配置示例:
volumes 配置了 /var/run/docker.sock,使 Watchtower 能够与 Docker 引擎进行通信。
WATCHTOWER_INTERVAL 是设置检查间隔,单位是秒,默认为 24 小时。
WATCHTOWER_CLEANUP 是自动清理未使用的旧镜像
restart: always 使得 Watchtower 在容器停止后会自动重启。
四、主要配置选项
WATCHTOWER_INTERVAL:
控制检查更新的时间间隔,单位是秒。例如,WATCHTOWER_INTERVAL=3600 表示每小时检查一次。
WATCHTOWER_CLEANUP:如果设置为 true,更新后会自动删除旧的镜像,帮助清理无用的磁盘空间。
WATCHTOWER_LABEL_ENABLE:启用容器标签过滤,仅更新具有特定标签的容器。
WATCHTOWER_LABEL_FILTER:通过标签来筛选需要更新的容器,避免更新不必要的容器。
WATCHTOWER_NOTIFICATION:启用通知功能,支持通过 Slack、邮件等方式发送通知。
WATCHTOWER_NO_RESTART:如果设置为 true,更新镜像后不会自动重启容器,需要手动操作。
五、高级功能
5.1通知:Watchtower 支持多种通知方式,包括 Slack、邮件、Webhook 等。你可以在容器更新时接收到通知。
示例(使用 Slack):
5.2指定容器更新:你可以通过标签来限制 Watchtower 只更新特定的容器,而不是系统中所有容器。
示例(只更新 myapp 镜像):
5.3强制更新:即使镜像没有发生变化,Watchtower 也可以强制拉取并更新容器镜像。
示例:
更新指定容器的镜像:通过配置 WATCHTOWER_MONITOR_ONLY 环境变量来指定只更新某些镜像。
示例:
六、安全性
6.1访问控制:
Watchtower 需要访问 Docker 的 socket(通过 /var/run/docker.sock),这意味着它需要足够的权限与 Docker 引擎进行交互。确保你信任 Watchtower,并了解它所拥有的权限。
6.2自动更新风险:
自动更新可能会带来一些风险,特别是当新版本的容器镜像包含破坏性变化时。如果你有严格的版本控制或测试要求,可以通过配置只更新特定镜像或标签来避免过于频繁的自动更新。
总结
Watchtower 是一个轻量且功能强大的工具,能够帮助 Docker 用户自动化容器的更新过程。它支持定期检查镜像更新、自动拉取新镜像并重启容器,非常适合用于需要自动保持容器镜像最新的场景。通过灵活的配置选项,你可以控制更新频率、通知机制和容器选择等。
如果你希望让你的 Docker 环境更加自动化,Watchtower 是一个非常有用的工具。