Watchtower自动更新docker容器
基础环境
系统:openEuler 22.03 (LTS-SP4) X86
软件:docker-26.1.3、 docker compose-2.27.0
关于Watchtower
Watchtower 是一个应用程序,监控正在运行的 Docker 容器,并监视这些容器的镜像版本的变化。如果 Watchtower 检测到容器的镜像已更改,它将自动拉取新镜像,关闭现有容器,使用最初部署时的相同选项重新启动它,实现容器的优雅升级。
安装docker
(1)配置yum源下载docker。
1 | yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo |
(2)安装最新版docker和docker compose。
1 | 下载依赖及docker、docker compose |
(3)修改Docker的数据目录为“/data/dockerData”,并配置docker镜像源。
1 | echo '{ |
(4)启动Docker服务,并设置为开机自启动。
1 | systemctl start docker |
安装Watchtower
方式一:通过docker命令安装
1 | docker run -itd --name watchtower \ |
--restart=always
设置容器开机自启
-v /var/run/docker.sock:/var/run/docker.sock
读取docker守护进程的API
-e TZ=Asia/Shanghai
使用本地时区
--interval 60
设置轮询间隔为60秒
--cleanup
更新后删除旧镜像
方式二:使用compose文件安装
1 | services: |
Watchtower更多应用
1.watchtower 监控更新远程 Docker主机
(1)在远程主机上启用远程 API 访问。
1 | 修改docker服务文件 |
(2)在本机创建watchtower,监控远程主机的docker容器
1 | docker run -d --name watchtower-1 \ |
2.按标签筛选
按标签筛选进行容器的更新,需要在创建容器时,给容器打上包含com.centurylinklabs.watchtower.enable
的标签,com.centurylinklabs.watchtower.enable=false
表示禁用对容器的监控和更新,com.centurylinklabs.watchtower.enable=true
表示启用对容器的监控和更新,此类情况只适用于创建新容器时。
1 | 禁用对容器的监控和更新 |
3.禁用容器名称筛选
要禁用特定容器,需要在watchtower创建时加入--disable-containers
参数,并在该参数后加上容器名称,如httpd
,运行时就会不监控名称中含有httpd的容器。
1 | docker run -d \ |
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官方文档。