AI机器人 统计
  • 文章总数:251 篇
  • 评论总数:36 条
  • 分类总数:11 个
  • 最后更新:昨天 16:23

使用 Watchtower 实现 Docker 容器镜像定时更新

本文阅读 5 分钟

lvhifpdm.png

什么是 Watchtower?

Watchtower 是一个用于自动更新 Docker 容器中镜像的开源工具。它能够定期监测运行中的容器,并在发现镜像有更新时,自动拉取最新的镜像并重启容器。这种自动化的更新过程,可以极大地简化镜像更新的管理,减少手动操作的工作量,同时提高了应用程序的安全性和可靠性。
官方文档https://containrrr.dev/

Watchtower 的工作原理

Watchtower 的工作原理非常简单直观。它通过与 Docker 守护进程进行通信,监测正在运行的容器,检查容器所使用的镜像是否有更新。具体来说,Watchtower 会定期扫描 Docker 守护进程的套接字文件(通常是 /var/run/docker.sock),获取所有正在运行的容器的镜像信息。然后,Watchtower 将这些镜像信息与 Docker Hub 或其他镜像仓库进行比对,以确定是否有新的镜像版本可用。如果发现镜像有更新,Watchtower 将自动拉取最新的镜像,并使用它来替换容器中的旧镜像。最后,Watchtower 会重新启动更新过的容器,使更新生效。

如何使用 Watchtower

使用 Watchtower 非常简单,只需按照以下步骤操作即可:

安装 Watchtower

首先,你需要在 Docker 主机上安装 Watchtower。你可以通过 Docker Hub 上提供的官方镜像进行安装。

docker pull containrrr/watchtower

运行 Watchtower 容器

安装完成后,你可以运行 Watchtower 容器。你需要将 Docker 守护进程的套接字文件挂载到 Watchtower 容器中,以便 Watchtower 能够与 Docker 引擎进行通信。

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

如果从私有 Docker 注册表中提取映像,请使用环境变量REPO_USER和REPO_PASS /或通过将主机的 docker 配置文件安装到容器中(在容器文件系统的根目录下/)来提供注册表身份验证凭据。

docker run -d \
  --name watchtower \
  -e REPO_USER=username \
  -e REPO_PASS=password \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower container_to_watch --debug

默认情况下,watchtower 将监视它所指向的 Docker 守护进程中运行的所有容器,但是,您可以通过在启动瞭望塔时将容器名称指定为参数来将瞭望塔限制为监视正在运行的容器的子集,watchtower 将仅监视名为“nginx”和“redis”的容器的更新 - 所有其他正在运行的容器都将被忽略

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

配置 Watchtower

Watchtower 默认会定期检查正在运行的容器,以查找更新的镜像。你可以通过环境变量或命令行选项来配置 Watchtower 的行为,比如设置镜像更新的时间间隔、要排除的容器等。以下是一些常用的配置选项:
-i 或 --interval:指定镜像检查的时间间隔,默认为 300 秒。
-l 或 --label-enable:启用通过标签来控制更新的功能。
--cleanup:在更新完成后删除旧的镜像。
--run-once:只运行一次检查和更新,然后退出 Watchtower 容器。
-e 或 --environment:设置 Watchtower 的环境变量,可以配置 Watchtower 的各种行为。

示例:

设置镜像检查的时间间隔:

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

在更新完成后删除旧的镜像:

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

只运行一次检查和更新:

docker run --rm \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower \
  --run-once

启用通过标签来控制更新:
添加标签到容器

docker container update --label com.centurylinklabs.watchtower.enable=true my_container

删除标签

docker container update --label-rm com.centurylinklabs.watchtower.enable my_container

确保 Watchtower 容器正确启用了 --label-enable 参数。
添加标签时,键名为 com.centurylinklabs.watchtower.enable,值为 true。
Watchtower 会定期扫描运行中的容器,检查标签以确定哪些容器需要更新。
Watchtower 的日志会显示哪些容器被更新了,以及更新的详细信息。

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

监控更新日志

Watchtower 会生成日志,记录更新过程中的操作和任何错误。你可以定期检查 Watchtower 的日志,以确保更新过程顺利进行。

原创文章,作者:忆秋先生,如若转载,请注明出处:https://www.ycyaw.com/Linux/1216.html
Caddy如何安装
« 上一篇 04-20
Chatgpt-ShareServer的静态资源本地部署方法
下一篇 » 04-28

发表评论

发表评论

作者信息

动态快讯

    请配置好页面缩略名选项

热门文章

标签TAG

热评文章