什么是 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
,包括我们之前安装的 portainer
、watchtower
,Glances
,Netdata
、lazydocker
等。
什么是 /var/run/docker.sock
?
/var/run/docker.sock
是Docker 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/