• 使用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容器自动更新挺好的,方便,不需要手工更新重启

      

      

      

  • 相关阅读:
    2022CTF培训(五)字符串混淆进阶&代码自解密
    Vue3 使用vite搭建Vue3项目、pinia的使用(笔记)
    深度讲解风险策略的调优|附实操案例
    大数据学习(11)-hive on mapreduce详解
    实战项目【7】MEMS惯性传感器的精度参数和单位换算
    FATFS介绍及相关参数计算
    不用定时器,实现鼠标长悬浮和鼠标长按监听
    MySQL 定时计划任务 事件的使用
    JVM 篇
    DOM—DOM 事件基础知识点总结
  • 原文地址:https://www.cnblogs.com/lucktomato/p/16718829.html