###自动管理docker容器更新的工具Watchtower
Watchtower是一个用于自动管理docker容器更新的工具,它通过监控docker Hub上的镜像更新,自动更新容器中的镜像,保持容器 Always Running。
Watchtower的安装非常简单,只需在docker容器中运行以下命令即可:
1 2 3 4
| $ docker run -d \ --name watchtower \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower
|
docker-compose.yml配置示例:
1 2 3 4 5 6 7 8
| version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock command: --cleanup restart: always
|
指定容器更新
Watchtower默认会自动更新所有容器,如果你想指定容器更新,可以在容器启动时添加--watchtower参数,例如:
1 2 3 4 5 6 7 8 9 10
| version: '3.8'
services: watchtower: image: containrrr/watchtower container_name: watchtower restart: unless-stopped volumes: - /var/run/docker.sock:/var/run/docker.sock command: lobe-chat nginx
|
按更新列表指定(维护灵活)
Watchtower也可以通过配置文件来指定需要更新的容器,配置文件默认在/config/watchtower.yaml,可以通过--override-config参数来指定配置文件路径。
1 2 3 4 5 6 7 8 9 10
| version: '3.8'
services: watchtower: image: containrrr/watchtower container_name: watchtower restart: unless-stopped volumes: - /var/run/docker.sock:/var/run/docker.sock command: $(cat ~/.docker_update.list)
|
注:也可使用容器更新标签进行容器标注的方法,此法麻烦且不灵活,知道就可以
–label com.centurylinklabs.watchtower.enable=true
清除旧容器参数
Watchtower默认不会清理旧容器,如果需要清理旧容器,可以在启动时添加--cleanup参数,例如:
1 2 3 4 5 6 7 8 9 10
| version: '3.8'
services: watchtower: image: containrrr/watchtower container_name: watchtower restart: unless-stopped volumes: - /var/run/docker.sock:/var/run/docker.sock command: -c $(cat ~/.docker_update.list)
|
更新频率
配置文件示例:
1 2 3 4 5 6 7 8 9 10
| version: '3.8'
services: watchtower: image: containrrr/watchtower container_name: watchtower restart: unless-stopped volumes: - /var/run/docker.sock:/var/run/docker.sock command: -c $(cat ~/.docker_update.list) --interval 3600
|
1 2 3 4 5 6 7 8 9 10
| version: '3.8'
services: watchtower: image: containrrr/watchtower container_name: watchtower restart: unless-stopped volumes: - /var/run/docker.sock:/var/run/docker.sock command: -c $(cat ~/.docker_update.list) --schedule "0 40 3 * * *"
|
6字段的表达式,不是传统的5字段,顺序是:秒分时日月周
自动配置docker_update.list文件
脚本虽然自动了!但是列表还是需要自动化一下,有时候部署一个新的docer之后会忘记把docker加入到这个列表里。(生产环境多注意)
创建脚本文件(比如 generate_docker_update_list.sh):
1 2 3 4
|
docker ps --format '{{.Image}}' > ~/.docker_update.list
|
授权和运行脚本:
1 2
| chmod +x ~/generate_docker_update_list.sh ~/generate_docker_update_list.sh
|
定期更新脚本:
1 2
| crontab -e */0 1 * * * ~/generate_docker_update_list.sh
|