在这里插入图片描述

什么是 DIUN ?

Docker Image Update Notifier 是一个用 Go 编写的 CLI 应用程序,可作为单个可执行文件和 Docker 映像交付,用于当 Docker 映像在 Docker registry中更新时接收通知。

和老苏之前介绍过的 watchtower 不同,DIUN 只是通知,并不会像 watchtower 一样自动更新镜像和容器

文章传送门:watchtower自动化更新docker镜像

准备

原本老苏打算一如既往使用 88邮件来发送消息,但是要么是 554 sender is rejected 错误

diun    | Wed, 24 May 2023 17:17:56 CST ERR Mail notification failed error="gomail: could not send email 1: 554 sender is rejected: 0" image=docker.io/crazymax/diun:latest

要么是 error=EOF 错误,懒得再换邮箱折腾了

diun    | Wed, 24 May 2023 19:14:06 CST ERR Mail notification failed error=EOF image=docker.io/crazymax/diun:latest

DIUN 还支持不少消息类型,老苏最后选择了用 Gotify

在这里插入图片描述

获取 Gotify Token

如果你还不了解、没安装过 Gotify,可以点下面的传送门

文章传送门:Gotify消息推送系统搭建

安装完成后,新建一个应用,获取到Token,我们后面推送消息要用到

在这里插入图片描述

配置文件 diun.yml

Diun 中有两种不同的方式来定义配置

  • 使用环境变量
  • 使用配置文件

老苏采用了配置文件方式,具体的参数可以看官方的说明:https://crazymax.dev/diun/config/

这里我们使用最小配置每 6 小时分析一次本地 Docker 实例的所有正在运行的容器,并使用了 gotify 发送消息

db:
  path: diun.db

watch:
  workers: 10
  schedule: "0 */6 * * *"
  firstCheckNotif: true

notif:
  gotify:
    endpoint: http://192.168.0.197:8385
    token: <你的 Gotify Token >
    priority: 1
    timeout: 10s
    templateTitle: "{{ .Entry.Image }} released"
    templateBody: |
      Docker tag {{ .Entry.Image }} which you subscribed to through {{ .Entry.Provider }} provider has been released.

providers:
  docker:
    watchStopped: true
    watchByDefault: true

上面有两处要修改

  • endpoint:要换成你自己的gotify 的访问地址 ;
  • token:也要换成你上一步从 gotify 获取的 Token

安装

与容器相关的应用,都需要绑定挂载 /var/run/docker.sock ,包括我们之前安装的 portainerwatchtowerGlancesNetdatalazydocker 等。

什么是 /var/run/docker.sock ?

/var/run/docker.sockDocker API 的主要入口,简单地说,它是 Docker 守护进程(Docker daemon)默认监听的 Unix 域套接字(Unix domain socket),容器中的进程可以通过它与 Docker 守护进程进行通信。

在这里插入图片描述

图片来自:https://betterprogramming.pub/about-var-run-docker-sock-3bfd276e12fd

但是群晖的 Docker 管理器并不支持挂载 /var/run/docker.sock 文件,所以这次我们需用命令行来安装

docker cli 安装

如果你熟悉命令行,可能用 docker cli 更快捷

# 新建文件夹 diun 和 子目录
mkdir -p /volume2/docker/diun/data

# 进入 diun 目录
cd /volume2/docker/diun

# 将 diun.yml 放入当前目录

# 运行容器
docker run -d \
   --restart always \
   --name diun \
   -v $(pwd)/data:/data \
   -v $(pwd)/diun.yml:/diun.yml:ro \
   -v /var/run/docker.sock:/var/run/docker.sock \
   -e "TZ=Asia/Shanghai" \
   -e "LOG_LEVEL=info" \
   -e "LOG_JSON=false" \
   crazymax/diun:latest \
   serve

docker-compose 安装

将下面的内容保存为 docker-compose.yml 文件

version: "3.5"

services:
  diun:
    image: crazymax/diun:latest
    container_name: diun
    restart: always
    volumes:
      - "./data:/data"
      - "./diun.yml:/diun.yml:ro"
      - "/var/run/docker.sock:/var/run/docker.sock"
    environment:
      - "TZ=Asia/Shanghai"
      - "LOG_LEVEL=info"
      - "LOG_JSON=false"
    command: serve

然后执行下面的命令

# 新建文件夹 diun 和 子目录
mkdir -p /volume2/docker/diun/data

# 进入 diun 目录
cd /volume2/docker/diun

# 将 diun.yml 和 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

在这里插入图片描述

运行

在浏览器中输入 http://群晖IP:8385 ,查看 Gotify消息,当检测到容器有新版本时,会收到信息

在这里插入图片描述

参考文档

crazy-max/diun: Receive notifications when an image is updated on a Docker registry
地址:https://github.com/crazy-max/diun/

Diun 文档
地址:https://crazymax.dev/diun/

alerting system for the publishing of new docker images with DIUN: how have you configurated it for emails message? Have you some examples to optimize mine? I have got a couple of questions… : selfhosted
地址:https://www.reddit.com/r/selfhosted/comments/qbunu2/alerting_system_for_the_publishing_of_new_docker/

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐