使用 Watchtower 实现 Docker 容器镜像定时更新
什么是 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 的日志,以确保更新过程顺利进行。
本文系作者 @亦秋先生 原创发布在亦秋先生博客站点。未经许可,禁止转载。
暂无评论数据