基础环境#
系统:openEuler 22.03 (LTS-SP4) X86
软件:docker-26.1.3、 docker compose-2.27.0
关于 Watchtower#
Watchtower 是一个应用程序,监控正在运行的 Docker 容器,并监视这些容器的镜像版本的变化。如果 Watchtower 检测到容器的镜像已更改,它将自动拉取新镜像,关闭现有容器,使用最初部署时的相同选项重新启动它,实现容器的优雅升级。
安装 docker#
(1) 配置 yum 源下载 docker。
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/\$releasever/7/g' /etc/yum.repos.d/docker-ce.repo
(2)安装最新版 docker 和 docker compose。
# 下载依赖及docker、docker compose
yum install -y container-selinux
yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
(3)修改 Docker 的数据目录为 “/data/dockerData”,并配置 docker 镜像源。
echo '{
"data-root": "/data/dockerData",
"registry-mirrors": ["https://dhub.kubesre.xyzcu"]
}' > /etc/docker/daemon.json
(4)启动 Docker 服务,并设置为开机自启动。
systemctl start docker
systemctl enable docker
安装 Watchtower#
方式一:通过 docker 命令安装#
docker run -itd --name watchtower \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-e TZ=Asia/Shanghai \
containrrr/watchtower \
--interval 60 \
--cleanup
--restart=always
设置容器开机自启
-v /var/run/docker.sock:/var/run/docker.sock
读取 docker 守护进程的 API
-e TZ=Asia/Shanghai
使用本地时区
--interval 60
设置轮询间隔为 60 秒
--cleanup
更新后删除旧镜像
方式二:使用 compose 文件安装#
services:
watchtower:
image: containrrr/watchtower
container_name: watchtower
restart: always
environment:
- TZ=Asia/Shanghai
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --interval 60 --cleanup
user: "0"
networks:
watchtower-net:
ipv4_address: 172.20.17.11
networks:
watchtower-net:
driver: bridge
ipam:
config:
- subnet: 172.20.17.0/24
Watchtower 更多应用#
1.watchtower 监控更新远程 Docker 主机#
(1)在远程主机上启用远程 API 访问。
#修改docker服务文件
vi /usr/lib/systemd/system/docker.service
#在该行后加入 -H tcp://0.0.0.0:2375
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
#重启服务和docker
systemctl daemon-reload
systemctl restart docker
#添加防火墙策略
sudo firewall-cmd --add-port=2375/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
(2)在本机创建 watchtower,监控远程主机的 docker 容器
docker run -d --name watchtower-1 \
-e TZ=Asia/Shanghai \
containrrr/watchtower \
--interval 60 \
--cleanup \
--host "tcp://10.0.1.2:2375"
2. 按标签筛选#
按标签筛选进行容器的更新,需要在创建容器时,给容器打上包含com.centurylinklabs.watchtower.enable
的标签,com.centurylinklabs.watchtower.enable=false
表示禁用对容器的监控和更新,com.centurylinklabs.watchtower.enable=true
表示启用对容器的监控和更新,此类情况只适用于创建新容器时。
#禁用对容器的监控和更新
docker run -itd \
--label=com.centurylinklabs.watchtower.enable=false --name test-httpd httpd
#启用对容器的监控和更新
docker run -d --label=com.centurylinklabs.watchtower.enable=true --name test-httpd httpd
3. 禁用容器名称筛选#
要禁用特定容器,需要在 watchtower 创建时加入--disable-containers
参数,并在该参数后加上容器名称,如httpd
,运行时就会不监控名称中含有 httpd 的容器。
docker run -d \
--name watchtower \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-e TZ=Asia/Shanghai \
containrrr/watchtower \
--interval 60 \
--cleanup \
--disable-containers httpd
4. 常用命令参数#
部分常用参数设置如下表所示。
参数 | 示例 | 说明 |
---|---|---|
--schedule "0 9 * * *" | docker run -itd --name watchtower --restart always -v /var/run/docker.sock:/var/run/docker.sock -e TZ=Asia/Shanghai containrrr/watchtower --cleanup --schedule "0 9 * * *" | 每天九点执行更新调度 |
--run-once | docker run -rm --name watchtower --restart always -v /var/run/docker.sock:/var/run/docker.sock -e TZ=Asia/Shanghai containrrr/watchtower --cleanup --run-once | 手动更新一次,并将 watchtower 删除 |
容器名 | docker run -itd --name watchtower --restart always -v /var/run/docker.sock:/var/run/docker.sock -e TZ=Asia/Shanghai containrrr/watchtower --cleanup nginx httpd | 指定更新容器 nginx、httpd |
--monitor-only | docker run -itd --name watchtower --restart always -v /var/run/docker.sock:/var/run/docker.sock -e TZ=Asia/Shanghai containrrr/watchtower --cleanup --monitor-only | 只检查容器是否需要更新,不应用更新 |
更多参数设置,可查看 watchtower 官方文档。
https://containrrr.dev/watchtower/arguments/