目 录CONTENT

文章目录

在飞牛云NAS或VPS用Docker搭建一个Watchtower项目-自动更新你的Docker应用

yyzq
2025-02-22 / 0 评论 / 0 点赞 / 37 阅读 / 1,902 字

前言

Watchtower 是一个用于自动更新 Docker 容器的开源工具。它会定期检查运行中的容器镜像是否有新版本,如果有新的版本,就会拉取新的镜像并重新启动容器。这个过程是自动化的,无需手动干预,非常适合那些需要持续更新的 Docker 环境。

准备条件

1)一台服务器或者NAS
我们使用飞牛云NAS和VPS来演示

需要vps的可以看下vps官网
2)本项目使用到的github

https://github.com/containrrr/watchtower

①《飞牛NAS上搭建》

直接在docker新增一个compose项目即可
image-1740174105019
项目名称:

watchtower

docker-compose配置如下

services:
  watchtower:
    image: containrrr/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - WATCHTOWER_INTERVAL=3600   # 设置为每小时检查一次(3600秒)
      - WATCHTOWER_CLEANUP=true    # 自动清理未使用的旧镜像
    restart: always

启动成功
image-1740235483340

国内如果无法使用Docker的可以尝试更换Docker镜像仓库

补充docker可用的镜像仓库

https://proxy.1panel.live/
https://docker.1panel.top/
https://mirror.azure.cn/
https://hub.rat.dev/
https://docker.1ms.run

《vps上搭建》

Docker环境部署

在vps安装docker和docker-compose
Docker官方安装文档(英文)
https://duan.yyzq.eu.org/docker-001
Docker-Compose官方安装文档(英文)
https://duan.yyzq.eu.org/docker-002
Centos安装Docker和Docker-compose(中文)
https://duan.yyzq.eu.org//03
Ubuntu安装Docker和Docker-compose(中文)
https://duan.yyzq.eu.org//04

推荐直接用一键脚本

docker安装脚本

bash <(curl -sSL https://cdn.jsdelivr.net/gh/SuperManito/LinuxMirrors@main/DockerInstallation.sh)

docker-compose安装脚本

curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose

创建docker-compose.yml文件

mkdir watchtower;cd watchtower #创建一个目录,并进入此目录
vim docker-compose.yml
services:
  watchtower:
    image: containrrr/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - WATCHTOWER_INTERVAL=3600   # 设置为每小时检查一次(3600秒)
      - WATCHTOWER_CLEANUP=true    # 自动清理未使用的旧镜像
    restart: always

执行容器运行命令

docker-compose up -d #运行容器
docker-compose ps  #查看是否开启成功

正常启动如下所示

 docker-compose ps
NAME                      IMAGE                   COMMAND         SERVICE      CREATED       STATUS                       PORTS
watchtower-watchtower-1   containrrr/watchtower   "/watchtower"   watchtower   2 hours ago   Up About an hour (healthy)   8080/tcp

一、主要功能

1.1自动拉取镜像:

Watchtower 会定期检查镜像的版本,如果发现有新的版本,它会自动拉取更新的镜像。

1.2自动重启容器:

更新镜像后,Watchtower 会自动停止旧容器,并使用新镜像启动一个新容器。这样,容器始终保持最新的镜像版本。

1.3支持多个容器:

你可以将 Watchtower 配置为更新单个容器、多个容器或整个系统上的所有容器。

1.4轻量级:

Watchtower 作为一个 Docker 容器运行,内存和资源消耗非常低,只需要 docker.sock 的访问权限来与 Docker 引擎交互。

1.5灵活的配置:

通过环境变量,你可以控制 Watchtower 的许多行为,比如更新频率、是否通知、更新特定容器等。

二、工作原理

2.1容器监控:

Watchtower 定期扫描宿主机上的容器,检查它们使用的镜像是否有更新。

2.2镜像更新:

如果找到镜像的新版本,Watchtower 会自动拉取该镜像并重新启动容器。

2.3容器重启:

旧的容器会被停止并移除,新的容器会使用更新后的镜像重新启动。这个过程是无缝的,基本不需要人工干预。

三、安装与配置

Watchtower 可以通过 Docker Compose 或直接使用 Docker 命令来启动。最常见的做法是通过 docker-compose.yml 文件来定义 Watchtower 服务。
一个基本的配置示例:

services:
  watchtower:
    image: containrrr/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - WATCHTOWER_INTERVAL=3600   # 设置为每小时检查一次(3600秒)
      - WATCHTOWER_CLEANUP=true    # 自动清理未使用的旧镜像
    restart: always

volumes 配置了 /var/run/docker.sock,使 Watchtower 能够与 Docker 引擎进行通信。
WATCHTOWER_INTERVAL 是设置检查间隔,单位是秒,默认为 24 小时。
WATCHTOWER_CLEANUP 是自动清理未使用的旧镜像
restart: always 使得 Watchtower 在容器停止后会自动重启。

四、主要配置选项

WATCHTOWER_INTERVAL:
控制检查更新的时间间隔,单位是秒。例如,WATCHTOWER_INTERVAL=3600 表示每小时检查一次。
WATCHTOWER_CLEANUP:如果设置为 true,更新后会自动删除旧的镜像,帮助清理无用的磁盘空间。
WATCHTOWER_LABEL_ENABLE:启用容器标签过滤,仅更新具有特定标签的容器。
WATCHTOWER_LABEL_FILTER:通过标签来筛选需要更新的容器,避免更新不必要的容器。
WATCHTOWER_NOTIFICATION:启用通知功能,支持通过 Slack、邮件等方式发送通知。
WATCHTOWER_NO_RESTART:如果设置为 true,更新镜像后不会自动重启容器,需要手动操作。

五、高级功能

5.1通知:Watchtower 支持多种通知方式,包括 Slack、邮件、Webhook 等。你可以在容器更新时接收到通知。
示例(使用 Slack):

environment:
  - WATCHTOWER_NOTIFICATION=slack
  - WATCHTOWER_NOTIFICATION_SLACK_URL="https://hooks.slack.com/services/your/slack/webhook"

5.2指定容器更新:你可以通过标签来限制 Watchtower 只更新特定的容器,而不是系统中所有容器。

示例(只更新 myapp 镜像):

environment:
  - WATCHTOWER_MONITOR_ONLY="myapp"

5.3强制更新:即使镜像没有发生变化,Watchtower 也可以强制拉取并更新容器镜像。

示例:

environment:
  - WATCHTOWER_FORCE_PULL=true

更新指定容器的镜像:通过配置 WATCHTOWER_MONITOR_ONLY 环境变量来指定只更新某些镜像。

示例:

environment:
  - WATCHTOWER_MONITOR_ONLY="myapp,anotherapp"

六、安全性

6.1访问控制:

Watchtower 需要访问 Docker 的 socket(通过 /var/run/docker.sock),这意味着它需要足够的权限与 Docker 引擎进行交互。确保你信任 Watchtower,并了解它所拥有的权限。

6.2自动更新风险:

自动更新可能会带来一些风险,特别是当新版本的容器镜像包含破坏性变化时。如果你有严格的版本控制或测试要求,可以通过配置只更新特定镜像或标签来避免过于频繁的自动更新。

总结

Watchtower 是一个轻量且功能强大的工具,能够帮助 Docker 用户自动化容器的更新过程。它支持定期检查镜像更新、自动拉取新镜像并重启容器,非常适合用于需要自动保持容器镜像最新的场景。通过灵活的配置选项,你可以控制更新频率、通知机制和容器选择等。
如果你希望让你的 Docker 环境更加自动化,Watchtower 是一个非常有用的工具。

有任何问题可以直接留言或者问我
有任何问题可以直接留言或者问我
有任何问题可以直接留言或者问我

欢迎关注我们的微信公众号!
微信公众号

0

评论区