前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Watchtower自动更新Docker镜像与容器

使用Watchtower自动更新Docker镜像与容器

作者头像
Tinywan
发布2024-04-28 11:09:02
1470
发布2024-04-28 11:09:02
举报
文章被收录于专栏:开源技术小栈开源技术小栈

概述

Docker 容器的部署有一种在手机上装 App 的感觉,但 Docker 容器并不会像手机 App 那样会自动更新,而如果我们需要更新容器一般需要以下四个步骤:

  • 停止容器:docker stop
  • 删除容器:docker rm
  • 更新镜像:docker pull
  • 启动容器:docker run

停止容器这个步骤可以在删除容器时使用 -f 参数来代替,即使这样还是需要三个步骤。如果部署了大量的容器需要更新使用这种传统的方式工作量是巨大的。

Watchtower

Watchtower 是一款实现自动化更新 Docker 镜像与容器的实用工具,它本身也是一个 Docker 镜像,主要用来监控运行中的 Docker 容器的镜像是否需要更新。当 Watchtower 检测到容器的镜像有更新时,它会发送 SIGTERM 信号优雅地结束正在运行的容器,然后根据设定的参数自动重新启动容器,包括使用相同的参数和配置。这个过程无需用户介入,可以自动完成,从而实现 Docker 容器的自动更新。

Watchtower 的工作方式是定期轮询 Docker 守护进程,检查容器的镜像是否有新的版本可用。如果有新版本,Watchtower 将自动拉取新镜像,并根据需要重启容器。这个工具对于希望保持容器始终运行最新镜像的用户来说非常有用,特别是在需要持续集成和持续部署的环境中。

官网地址:https://containrrr.dev/watchtower

基本使用

更新宿主机的所有容器

使用以下命令,更新宿主机的所有容器,也包括 Watch?tower 本身。

代码语言:javascript
复制
docker run -d  \
    --name watchtower \
    --volume /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower

指定某个容器进行监视

如果指向监视某一个容器进行自定更新,则在上述命令后面加上容器名即可。

代码语言:javascript
复制
docker run -d \
    --name watchtower \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower \
    miniboard

指定容器的更新频率

Watchtower 默认情况下 24 小时会检查一次镜像更新。设置--interval 选项更新时间,默认单位秒。

代码语言:javascript
复制
docker run -d \
    --name watchtower \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower \
    --interval 6

可以使用--schedule选项, 设定定时更新任务,定时任务为6 字段来表示执行时间,第一个字段表示秒。

代码语言:javascript
复制
docker run -d \
    --name watchtower \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower \
    --schedule "0 30 20 * * 5"

自定清理旧镜像

可以使用--cleanup选项,这样每次更新都会把旧的镜像清理掉。

代码语言:javascript
复制
docker run -d \
    --name watchtower \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower \
    --cleanup

用于清理无用的Docker卷。它会删除所有没有关联到任何容器的卷,以释放磁盘空间。

配置自动更新频率

Watchtower 默认每 5 分钟轮询一次,可以使用以下参数配置更新的频率.

  • --interval,-i配置更新周期,默认300秒.
  • --schedule,-s配置定时更新,使用Cron表达式,例如"0 0 1 * * *".即每天凌晨1点更新.

每2小时更新一次

代码语言:javascript
复制
docker run -d \
    --name watchtower \
    --restart always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower \
    --cleanup \
    -i 7200

每天凌晨3点更新

代码语言:javascript
复制
docker run -d \
    --name watchtower \
    --restart always \
    -e TZ=Asia/Shanghai \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower \
    --cleanup \
    -s "0 0 3 * * *"

手动更新

使用手动更新的方式,运行一次Watch?tower容器来更新所需的容器,更新后会自动删除本次运行的Watch?tower容器.只需要加上--rm--run-once参数即可.同时也可以配合以上指定容器或指定排除容器的参数来使用.

更新所有容器

代码语言:javascript
复制
docker run --rm \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower \
    --cleanup \
    --run-once

更新指定容器

代码语言:javascript
复制
docker run --rm \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower \
    --cleanup \
    --run-once \
    nginx redis
本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-04-24,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • Watchtower
  • 基本使用
    • 更新宿主机的所有容器
      • 指定某个容器进行监视
        • 指定容器的更新频率
          • 自定清理旧镜像
            • 配置自动更新频率
              • 手动更新
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
              http://www.vxiaotou.com