目录
Watchtower
是一个开源的 Docker 容器管理工具,用于自动更新运行中的容器。它通过定期检查已启动容器的镜像版本,如果发现有新版本可用,就会自动拉取新镜像并重新启动容器,从而保证你的应用始终运行在最新版本上。
Watchtower 的主要功能:
- 自动更新:定期检查容器镜像的更新,并在发现新版本时自动更新并重启容器。
- 易于配置:可以通过环境变量和命令行参数轻松配置 Watchtower 的行为。
- 支持多种更新策略:可以配置 Watchtower 仅更新特定的容器,或者在更新前后执行特定的操作。
- 简单集成:通过挂载 Docker 的 Unix 套接字文件,Watchtower 可以管理 Docker 宿主机上运行的所有容器。
1. 安装docker
安装并配置加速器
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum makecache
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start
# Step 5:配置加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.rainbond.cc" ,
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://pilvpemn.mirror.aliyuncs.com",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
2. 拉取镜像
[root@localhost ~]# docker pull containrrr/watchtower
docker hub地址:https://hub.docker.com/r/containrrr/watchtower/tags
3. 启动 Watchtower
使用以下命令启动 Watchtower,自动检查和更新所有正在运行的容器:
docker run -d \
--name watchtower \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower
4. 只更新特定容器
如果你只想更新特定的容器,可以在启动 Watchtower 时指定容器名称:
docker run -d \
--name watchtower \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower nginxWebUI myapp
5. 设置更新间隔
你可以使用 --interval
参数设置 Watchtower 检查更新的时间间隔(以秒为单位),例如每 5 分钟检查一次:
docker run -d \
--name watchtower \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower --interval 300
6. 启用删除旧镜像
默认情况下,Watchtower 不会删除旧镜像。可以使用 --cleanup
参数在更新容器后自动删除旧的 Docker 镜像:
docker run -d \
--name watchtower \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower --cleanup
7. 禁用容器重启
如果你不想让 Watchtower 更新容器后自动重启,可以使用 --no-restart
参数:
docker run -d \
--name watchtower \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower --no-restart
8. 监控多个 Docker 守护进程
如果你有多个 Docker 守护进程,可以通过挂载多个 Docker 套接字来让 Watchtower 监控它们:
docker run -d \
--name watchtower \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /path/to/another/docker.sock:/path/to/another/docker.sock \
containrrr/watchtower
9. 设置 Watchtower 通知
你可以设置 Watchtower 在更新容器时发送通知。Watchtower 支持多种通知方式,包括 Slack、Email、Webhook 等。
例如,配置 Slack 通知:
docker run -d \
--name watchtower \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
-e WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL="https://hooks.slack.com/services/your/slack/hook" \
containrrr/watchtower
10. 只检查不更新
如果你只想检查镜像是否有更新,而不自动更新,可以使用 --monitor-only
参数:
docker run -d \
--name watchtower \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower --monitor-only
11. 延迟更新
使用 --delay-update
参数可以在更新容器前延迟一定时间:
docker run -d \
--name watchtower \
--restart unless-stopped \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower --delay-update 30s
这会在发现更新后等待 30 秒再执行更新。
Watchtower 的关键参数总结表格
参数 | 说明 |
---|---|
–rm | 运行结束后自动删除容器。 |
-v /var/run/docker.sock:/var/run/docker.sock | 挂载 Docker 的 Unix 套接字,允许 Watchtower 管理其他容器。 |
your_service_name | 指定要检查和更新的服务容器名称。 |
–run-once | 只执行一次检查和更新,然后退出并停止 Watchtower。 |
–interval | 设置 Watchtower 检查更新的时间间隔(默认 300 秒)。 |
–cleanup | 更新后自动删除旧的 Docker 镜像。 |
–no-restart | 禁止更新容器后自动重启。 |
–monitor-only | 仅监控镜像更新,不执行更新操作。 |
–delay-update | 更新前延迟指定时间,例如 30s 或 1m。 |
-e WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL | 设置通知,例如 Slack 的 Webhook URL。 |
-e WATCHTOWER_NOTIFICATION_EMAIL_FROM | 设置发件人邮箱地址,用于邮件通知。 |
-e WATCHTOWER_NOTIFICATION_EMAIL_TO | 设置收件人邮箱地址,用于邮件通知。 |
-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER | 设置邮件服务器的地址。 |
-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT | 设置邮件服务器的端口。 |
-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER | 设置邮件服务器的用户名。 |
-e WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD | 设置邮件服务器的密码。 |
-e WATCHTOWER_NOTIFICATION_WEBHOOK_URL | 设置 Webhook URL,用于发送 HTTP POST 请求通知。 |
-e WATCHTOWER_NOTIFICATION_TG_BOT_TOKEN | 设置 Telegram 机器人的 Token,用于发送 Telegram 消息。 |
-e WATCHTOWER_NOTIFICATION_TG_CHAT_ID | 设置 Telegram 聊天 ID,用于发送 Telegram 消息。 |
-e WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL | 设置 Slack 的 Webhook URL,用于发送 Slack 消息。 |
-e WATCHTOWER_NOTIFICATION_ROCKET_CHAT_URL | 设置 Rocket.Chat 的 Webhook URL,用于发送 Rocket.Chat 消息。 |
-e WATCHTOWER_NOTIFICATION_ROCKET_CHAT_CHANNEL | 设置 Rocket.Chat 的频道名称。 |
-e WATCHTOWER_NOTIFICATION_ROCKET_CHAT_USERNAME | 设置 Rocket.Chat 的用户名。 |
-e WATCHTOWER_NOTIFICATION_ROCKET_CHAT_ICON_URL | 设置 Rocket.Chat 的图标 URL。 |
-e WATCHTOWER_NOTIFICATION_GENERIC_WEBHOOK_URL | 设置 Generic Webhook 的 URL,用于发送自定义 Webhook 消息。 |