• 使用Watchtower实现Docker容器自动更新


    前言:通常情况下我们手动更新容器的步骤比较繁琐,需要四个步骤:
    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容器自动更新挺好的,方便,不需要手工更新重启

      

      

      

  • 相关阅读:
    基础总结篇之一:Activity生命周期
    浅析Android中的消息机制
    详解Android中AsyncTask的使用
    URLConnection的连接、超时、关闭用法总结
    使用Open Flash Chart(OFC)制作图表(Struts2处理)
    用dTree组件生成无限级导航树
    jQuery插件Jeditable的使用(Struts2处理)
    Python Day 56 Django框架学习、学生管理系统迭代二、前后端交互数据传输方式、前台两种跳转方式、form表单详解
    Python Day 55 Django框架、利用学生管理系统来学习Django框架 (版本一)、数据库封装成类、单表操作新url方式、模态对话框
    Python Day 54 Django框架、web请求流程、状态码、自定义web框架
  • 原文地址:https://www.cnblogs.com/lucktomato/p/16718829.html
Copyright © 2020-2023  润新知