前言
Watchtower 是一个用于自动更新 Docker 容器的开源工具。它会定期检查运行中的容器镜像是否有新版本,如果有新的版本,就会拉取新的镜像并重新启动容器。这个过程是自动化的,无需手动干预,非常适合那些需要持续更新的 Docker 环境。
准备条件
1)一台服务器或者NAS
我们使用飞牛云NAS和VPS来演示
需要vps的可以看下vps官网
2)本项目使用到的github
https://github.com/containrrr/watchtower
①《飞牛NAS上搭建》
直接在docker新增一个compose项目即可
项目名称:
watchtower
docker-compose配置如下
services:
watchtower:
image: containrrr/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WATCHTOWER_INTERVAL=3600 # 设置为每小时检查一次(3600秒)
- WATCHTOWER_CLEANUP=true # 自动清理未使用的旧镜像
restart: always
启动成功
国内如果无法使用Docker的可以尝试更换Docker镜像仓库
补充docker可用的镜像仓库
https://proxy.1panel.live/
https://docker.1panel.top/
https://mirror.azure.cn/
https://hub.rat.dev/
https://docker.1ms.run
《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安装脚本
bash <(curl -sSL https://cdn.jsdelivr.net/gh/SuperManito/LinuxMirrors@main/DockerInstallation.sh)
docker-compose安装脚本
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose
创建docker-compose.yml文件
mkdir watchtower;cd watchtower #创建一个目录,并进入此目录
vim docker-compose.yml
services:
watchtower:
image: containrrr/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WATCHTOWER_INTERVAL=3600 # 设置为每小时检查一次(3600秒)
- WATCHTOWER_CLEANUP=true # 自动清理未使用的旧镜像
restart: always
执行容器运行命令
docker-compose up -d #运行容器
docker-compose ps #查看是否开启成功
正常启动如下所示
docker-compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
watchtower-watchtower-1 containrrr/watchtower "/watchtower" watchtower 2 hours ago Up About an hour (healthy) 8080/tcp
一、主要功能
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 服务。
一个基本的配置示例:
services:
watchtower:
image: containrrr/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WATCHTOWER_INTERVAL=3600 # 设置为每小时检查一次(3600秒)
- WATCHTOWER_CLEANUP=true # 自动清理未使用的旧镜像
restart: always
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):
environment:
- WATCHTOWER_NOTIFICATION=slack
- WATCHTOWER_NOTIFICATION_SLACK_URL="https://hooks.slack.com/services/your/slack/webhook"
5.2指定容器更新:你可以通过标签来限制 Watchtower 只更新特定的容器,而不是系统中所有容器。
示例(只更新 myapp 镜像):
environment:
- WATCHTOWER_MONITOR_ONLY="myapp"
5.3强制更新:即使镜像没有发生变化,Watchtower 也可以强制拉取并更新容器镜像。
示例:
environment:
- WATCHTOWER_FORCE_PULL=true
更新指定容器的镜像:通过配置 WATCHTOWER_MONITOR_ONLY 环境变量来指定只更新某些镜像。
示例:
environment:
- WATCHTOWER_MONITOR_ONLY="myapp,anotherapp"
六、安全性
6.1访问控制:
Watchtower 需要访问 Docker 的 socket(通过 /var/run/docker.sock),这意味着它需要足够的权限与 Docker 引擎进行交互。确保你信任 Watchtower,并了解它所拥有的权限。
6.2自动更新风险:
自动更新可能会带来一些风险,特别是当新版本的容器镜像包含破坏性变化时。如果你有严格的版本控制或测试要求,可以通过配置只更新特定镜像或标签来避免过于频繁的自动更新。
总结
Watchtower 是一个轻量且功能强大的工具,能够帮助 Docker 用户自动化容器的更新过程。它支持定期检查镜像更新、自动拉取新镜像并重启容器,非常适合用于需要自动保持容器镜像最新的场景。通过灵活的配置选项,你可以控制更新频率、通知机制和容器选择等。
如果你希望让你的 Docker 环境更加自动化,Watchtower 是一个非常有用的工具。
有任何问题可以直接留言或者问我
有任何问题可以直接留言或者问我
有任何问题可以直接留言或者问我
欢迎关注我们的微信公众号!
评论区