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


    前言:通常情况下我们手动更新容器的步骤比较繁琐,需要四个步骤:
    1
    2
    3
    4
    5
    6
    1.停止容器
    2.删除容器
    3.检查镜像更新情况,更新镜像
    4.重新启动容器
     
    容器少还无所谓,但要是需要更新大量的容器就会工作量巨大。

    一、介绍Watchtower

    Watchtower 是一款自由开源的应用,用来监控运行中的 Docker 容器,并且当它发现基础镜像被更改后,可以自动的更新容器。
    若 Watchtower 发现一个运行中的容器需要更新,它会以发送 SIGTERM 信号的方式,优雅的结束运行中容器的运行。
    它会下载新镜像,然后以最初部署时使用的方式,重启容器。所有文件会在后台自动下载,因此不需要用户的介入。

    二、下载启动watchtower镜像

    1
    docker pull containrrr/watchtower

    启动例子  

    1
    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

    参数介绍

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    账号密码,如果是私域仓,不指定会报错,自动更新是获取不到镜像
    -e REPO_USER=admin 
    -e REPO_PASS=123456
     
    -c 自动清除旧镜像 ,不然很多none的镜像出现
     
    –interval 300(-i 300):设置自动更新检查频率(秒)我这里是设置的5分钟,如果不指定,则默认24小时后执行
     
    nginx02:是需要更新的容器名称
     
    --restart=unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器。

    运行完成之后,查看日志

    1
    docker logs -f watchtower  

    三、Watchtower搭配Harbor实现容器自动更新

    1
    2
    3
    4
    环境:
    Harbor服务器地址是192.168.10.145
    Web01 服务器 192.168.10.145
    Web02 服务器 192.168.10.133

    1、前提需要安装好Harbor

    2、运行Watchtower,监控nginx02容器  

    1
    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

    1
    2
    docker exec -it nginx02 /bin/bash
    echo This is test > /usr/share/nginx/html/index.html

    5、在Web02提交推送修改过的镜像到Harbor仓库  

    1
    2
    3
    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检查是否自动更新

    1
    2
    3
    4
    5
    6
    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容器自动更新挺好的,方便,不需要手工更新重启

      

      

      

  • 相关阅读:
    Design patterns--策略模式
    Java中的集合
    MongoDB - 事务支持
    .npmrc文件,单个项目的npm配置
    mdkarm怎么编程:深度探索与实用指南
    C++对string进行大小写转换的三种方法
    微信小程序连接蓝牙汉印HM-A300L标签打印机
    【router-view】切换组件 深刻理解用法 vue的设计思想
    KINODYNAMIC-路径规划
    一文概览NLP句法分析:从理论到PyTorch实战解读
  • 原文地址:https://www.cnblogs.com/lucktomato/p/16718829.html