1.停止容器 2.删除容器 3.检查镜像更新情况,更新镜像 4.重新启动容器 容器少还无所谓,但要是需要更新大量的容器就会工作量巨大。
一、介绍Watchtower
Watchtower 是一款自由开源的应用,用来监控运行中的 Docker 容器,并且当它发现基础镜像被更改后,可以自动的更新容器。
若 Watchtower 发现一个运行中的容器需要更新,它会以发送 SIGTERM 信号的方式,优雅的结束运行中容器的运行。
它会下载新镜像,然后以最初部署时使用的方式,重启容器。所有文件会在后台自动下载,因此不需要用户的介入。
二、下载启动watchtower镜像
docker pull containrrr/watchtower
启动例子
docker run -d --name watchtower -e REPO_USER=admin -e REPO_PASS=123456 --restart unless-stopped -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower:latest -c nginx02 --interval 100
参数介绍
账号密码,如果是私域仓,不指定会报错,自动更新是获取不到镜像 -e REPO_USER=admin -e REPO_PASS=123456 -c 自动清除旧镜像 ,不然很多none的镜像出现 –interval 300(-i 300):设置自动更新检查频率(秒)我这里是设置的5分钟,如果不指定,则默认24小时后执行 nginx02:是需要更新的容器名称 --restart=unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器。
运行完成之后,查看日志
docker logs -f watchtower
三、Watchtower搭配Harbor实现容器自动更新
环境: Harbor服务器地址是192.168.10.145 Web01 服务器 192.168.10.145 Web02 服务器 192.168.10.133
1、前提需要安装好Harbor
2、运行Watchtower,监控nginx02容器
docker run -d --name watchtower -e REPO_USER=admin -e REPO_PASS=123456 --restart unless-stopped -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower:latest -c nginx02 --interval 100
3、在Web01上启动nginx02容器
4、在Web02上面,假如修改nginx02容器内容,比如修改html
docker exec -it nginx02 /bin/bash echo This is test > /usr/share/nginx/html/index.html
5、在Web02提交推送修改过的镜像到Harbor仓库
docker commit CONTAINER_ID 192.168.10.145:80/work/nginx:latest docker push 192.168.10.145:80/work/nginx:latest
6、查看Harbor仓库
7、在Web01检查是否自动更新
docker logs -f watchtower # 以下是输出 time="2022-09-18T12:22:50Z" level=info msg="Found new 192.168.10.145:80/work/nginx image (afff575eb240)" # 这里看到新的镜像 time="2022-09-18T12:22:50Z" level=info msg="Stopping /nginx02 (0d4a3e0334db) with SIGTERM" time="2022-09-18T12:22:51Z" level=info msg="Creating /nginx02" time="2022-09-18T12:22:52Z" level=info msg="Removing image 6f2aa1c0705c"
8、检查网页内容
用浏览器或者curl访问curl nginx01
总结:实现Docker容器自动更新挺好的,方便,不需要手工更新重启