简介:
Docker 用户看过来!通过 Watchtower,一键自动更新容器,轻松管理你的应用环境。无需手动拉取镜像,彻底告别繁琐操作!本文将带你了解如何使用 Watchtower 实现 Docker 的自动更新。
项目地址:https://github.com/containrrr/watchtower
官方文档:https://containrrr.dev/watchtower/

什么是 Watchtower?
Watchtower 是一个简单而强大的工具,专门用于自动更新 Docker 容器中的镜像。通过 Watchtower,你可以定时检查容器的镜像版本,如果有更新,它会自动拉取并更新镜像,确保容器始终运行最新的版本。

Watchtower 的工作原理
Watchtower 通过监控 Docker 容器中的运行镜像,一旦发现镜像有新版本,它会:

Watchtower只检测你运行容器时使用的 tag 的更新变动
自动拉取最新的镜像。
停止正在运行的旧版本容器。
启动新的容器实例,使用最新的镜像。

如何安装和使用 Watchtower?

  1. 安装 Watchtower
    在 Docker 中运行 Watchtower 非常简单。只需运行以下命令:

    docker run -d \
      --name watchtower \
      -v /var/run/docker.sock:/var/run/docker.sock \
      containrrr/watchtower

    -d:后台运行 Watchtower。
    --name watchtower:为容器命名为 Watchtower。
    -v /var/run/docker.sock:/var/run/docker.sock:通过 Docker 套接字与 Docker 引擎通信,监控和更新容器。

  2. 配置更新间隔
    默认情况下,Watchtower 每隔 24 小时检查一次镜像更新。你可以根据需要调整检查的频率。如下选项来控制更新检查的频率,但二者只能选择其一。
    方式一:
    比如,如果你想每小时检查一次更新,可以通过 --interval,-i 参数进行设置,单位为秒:

    docker run -d \
      --name watchtower \
      -v /var/run/docker.sock:/var/run/docker.sock \
      containrrr/watchtower --interval 3600 -c

    这里,--interval 3600 表示每 3600 秒(即 1 小时)检查一次更新。

方式二:

--schedule,-s 设置定时检测更新时间。格式为 6 字段 Cron 表达式,而非传统的 5 字段,即第一位是秒。比如每天凌晨 2 点检查一次更新:

docker run -d \
    --name watchtower \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower -c \
    --schedule "0 0 2 * * *"
  1. 使用 Watchtower 更新特定容器
    如果你只想让 Watchtower 监控特定容器进行更新,可以指定容器名称。例如:

    docker run -d \
      --name watchtower \
      -v /var/run/docker.sock:/var/run/docker.sock \
      containrrr/watchtower -c nginx redis
  2. 使用 Watchtower 手动更新

如果您不希望 Watchtower 作为守护进程运行,您可以传递 --run-once 标志并在执行后删除 Watchtower 容器。例如:

docker run -d \
  --name watchtower \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower --run-once -c nginx redis

--run-once 可以简写为 -R:

docker run -d \
  --name watchtower \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower -Rc nginx redis
  1. 使用 Watchtower 自动清除旧镜像

官方给出的默认启动命令在长期使用后会堆积非常多的标签为 none 的旧镜像,如果放任不管会占用大量的磁盘空间。要避免这种情况可以加入 --cleanup 选项,这样每次更新都会把旧的镜像清理掉。例如:

docker run -d \
  --name watchtower \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower --cleanup

--cleanup 选项可以简写为 -c, 如:

docker run -d \
  --name watchtower \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower -c
  1. 查看 Watchtower 日志

docker logs -f watchtower
Watchtower 的优势
自动化:Watchtower 可以让 Docker 容器的更新全程自动化,免去手动操作的麻烦。
高效:每当镜像有更新时,Watchtower 会立刻为你替换掉旧版本的容器,保证环境始终处于最新状态。
节省时间:无需反复手动更新,每次更新都能自动执行。
轻松配置:只需几行命令即可完成配置,简单易用。
注意事项
资源消耗:Watchtower 会定期扫描所有容器,因此会占用一定的系统资源。对于小型环境,这通常不成问题,但在资源有限的环境中,可能需要谨慎考虑。
版本兼容性:确保 Watchtower 和 Docker 的版本兼容,避免出现意外问题。

最后修改:2025 年 04 月 07 日
如果觉得我的文章对你有用,请随意赞赏