Zabbix 为每个组件都提供了 Docker 镜像 ,作为弹性和自给自足的容器,促使加快部署和更新过程。
Zabbix provides Docker images for each Zabbix component as portable and self-sufficient containers to speed up deployment and update procedure.
Zabbix 组件支持 MySQL 和 PostgreSQL 数据库、Apache2 和 Nginx Web 服务器。这些镜像被分成多个不同的镜像。
Zabbix components come with MySQL and PostgreSQL database support, Apache2 and Nginx web server support. These images are separated into different images.
Zabbix 组件提供了 Ubuntu、Alpine Linux 和 CentOS 的基础镜像:
Zabbix components are provided on Ubuntu, Alpine Linux and CentOS base images:
如果基础镜像升级了,所有的镜像被配置为重建成最新版本的镜像。
每个人都可以在 github.com 上使用 Zabbix 官方镜像仓库,并关注其 Docker 文件变更情况。您可以根据官方 Docker 文件复制此项目或制作自己的镜像。
所有 Zabbix 组件都可在以下 Docker 镜像仓库中使用:
此外,对于 SNMP trap 的支持,它仅作为基于 Ubuntu Trusty 的额外镜像仓库 (zabbix/zabbix-snmptraps) 提供。它可以与 Zabbix server 和 Zabbix proxy 关联。
Zabbix 组件的每个镜像仓库都包含了下列标签:
latest
- 基于 Alpine Linux 镜像的最新稳定版的 Zabbix 组件;alpine-latest
- 基于 Alpine Linux 镜像的最新稳定版的 Zabbix 组件;ubuntu-latest
- 基于 Ubuntu 镜像的最新稳定版的 Zabbix 组件;alpine-5.0-latest
- 基于 Alpine Linux 镜像的最新次要版本的 Zabbix 5.0 组件;ubuntu-5.0-latest
- 基于 Unbuntu 镜像的最新次要版本的 Zabbix 5.0 组件;alpine-5.0.*
- 基于 Alpine Linux 镜像的不同次要版本的 Zabbix 5.0 组件,其中 *
代表 Zabbix 组件的次要版本;ubuntu-5.0.*
- 基于 Ubuntu 镜像的不同次要版本的 Zabbix 5.0 组件,其中 *
代表 Zabbix 组件的次要版本所有 Zabbix 组件镜像都提供环境变量来控制配置。 这些环境变量在每个组件镜像仓库中列出。这些环境变量是 Zabbix 配置文件中的选项,但具有不同的命名方法。 例如,ZBX_LOGSLOWQUERIES
等于来自 Zabbix server 和 Zabbix proxy 配置文件的 LogSlowQueries
。
一些配置选项是不允许更改的。例如,PIDFile
和 LogType
。
其中,一些组件有特定的环境变量,而这些环境变量在官方 Zabbix 配置文件并不存在:
变量 * | 组件** **描 | ** |
DB_SERVER_HOST |
Server Proxy Web interface |
这个变量指的是 MySQL 或 PostgreSQL 的 IP 或 DNS。 默认情况下,这个值根据 MySQL 和 PostgreSQL,分别为 mysql-server 或 postgres-server |
DB_SERVER_PORT |
Server Proxy Web interface |
这个变量指的是 MySQL 或 PostgreSQL 的端口。 默认情况下,这个值根据 MySQL 和 PostgreSQL,分别为 '3306' 或 '5432' 。 |
MYSQL_USER |
Server Proxy Web-interface |
MySQL 数据库用户。 默认情况下,这个值为 'zabbix'。 |
MYSQL_PASSWORD |
Server Proxy Web interface |
MySQL 数据库密码。 默认情况下,这个值为 'zabbix'。 |
MYSQL_DATABASE |
Server Proxy Web interface |
Zabbix 数据库库名。 默认情况下,这个值根据 Zabbix server 和 Zabbix proxy,分别为 'zabbix' 和 'zabbix_proxy' 。 |
POSTGRES_USER |
Server Web interface |
PostgreSQL 数据库用户。 默认情况下,这个值为 'zabbix'。 |
POSTGRES_PASSWORD |
Server Web interface |
PostgreSQL 数据库密码。 默认情况下,这个值为 'zabbix'。 |
POSTGRES_DB |
Server Web interface |
Zabbix 数据库库名。 默认情况下,这个值根据 Zabbix server 和 Zabbix proxy,分别为 'zabbix' 和 'zabbix_proxy' 。 |
TZ |
Web-interface | PHP 时区格式。所有支持的时区列表为 php.net. 默认情况下,这个值为 'Europe/Riga' 。 |
ZBX_SERVER_NAME |
Web interface | Web 界面右上角显示的安装名称。 默认情况下,这个值为 'Zabbix Docker' 。 |
ZBX_JAVAGATEWAY_ENABLE |
Server Proxy |
是否启用 Zabbix Java gateway 以采集与 Java 相关的检查数据。 默认情况下,这个值为 "false" 。 |
ZBX_ENABLE_SNMP_TRAPS |
Server Proxy |
是否启用 SNMP trap feature 功能。这要求 zabbix-snmptraps 实例并共享 /var/lib/zabbix/snmptraps 卷到 Zabbix server 或 proxy。 |
镜像中允许使用一些挂载点。根据 Zabbix 组件类型,这些挂载点各不相同:
卷 | *描述** |
Zabbix agent | |
/etc/zabbix/zabbix_agentd.d | 该卷允许包含 *.conf 文件并使用 UserParameter 功能扩展 Zabbix agent。 |
/var/lib/zabbix/modules | 该卷允许通过 LoadModule 功能加载额外的模块以扩展 Zabbix agent。 |
/var/lib/zabbix/enc | 该卷用于存放 TLS 相关的文件。这些文件名指定使用 ZBX_TLSCAFILE 、ZBX_TLSCRLFILE 、ZBX_TLSKEY_FILE 和 ZBX_TLSPSKFILE 环境变量。 |
Zabbix server | |
/usr/lib/zabbix/alertscripts | 该卷用于自定义告警脚本。即 zabbix_server.conf 中的 AlertScriptsPath 参数。 |
/usr/lib/zabbix/externalscripts | 该卷用于 外部检查。即在 zabbix_server.conf 中的 ExternalScripts 参数。 |
/var/lib/zabbix/modules | 该卷允许通过 LoadModule 功能加载额外的模块以扩展 Zabbix agent。 |
/var/lib/zabbix/enc | 该卷用于存放 TLS 相关的文件。这些文件名指定使用 ZBX_TLSCAFILE 、ZBX_TLSCRLFILE 、ZBX_TLSKEY_FILE 和 ZBX_TLSPSKFILE 环境变量。 |
/var/lib/zabbix/ssl/certs | 该卷用于用于存放客户端认证的 SSL 客户端认证文件。即在 zabbix_server.conf 中的 SSLCertLocation 参数。 |
/var/lib/zabbix/ssl/keys | 该卷用于存放客户端认证的 SSL 私钥文件。即在 zabbix_server.conf 中的 SSLKeyLocation 参数。 |
/var/lib/zabbix/ssl/ssl_ca | 该卷用于存放 SSL 服务器证书认证的证书颁发机构(CA)文件。即在 zabbix_server.conf 中的 SSLCALocation 参数。 |
/var/lib/zabbix/snmptraps | 该卷用于存放 snmptraps.log 文件。它可由 zabbix-snmptraps 容器共享,并在创建 Zabbix server 新实例时使用 Docker 的 volumes_from 选项继承。可以通过共享卷,并将 ZBX_ENABLE_SNMP_TRAPS 环境变量切换为 'true' 以启用 SNMP trap 处理功能。 |
/var/lib/zabbix/mibs | 该卷允许添加新的 MIB 文件。它不支持子目录,所有的 MIB 文件必须位于 /var/lib/zabbix/mibs 下。 |
Zabbix proxy | |
/usr/lib/zabbix/externalscripts | 该卷用于使用 外部检查。即在 zabbix_proxy.conf 中的 ExternalScripts 参数。 |
/var/lib/zabbix/modules | 该卷允许通过 LoadModule 功能加载额外的模块以扩展 Zabbix server。 |
/var/lib/zabbix/enc | 该卷用于存放 TLS 相关的文件。这些文件名指定使用 ZBX_TLSCAFILE 、ZBX_TLSCRLFILE 、ZBX_TLSKEY_FILE 和 ZBX_TLSPSKFILE 环境变量。 |
/var/lib/zabbix/ssl/certs | 该卷用于存放客户端认证的 SSL 客户端认证文件。即在 zabbix_proxy.conf 中的 SSLCertLocation 参数。 |
/var/lib/zabbix/ssl/keys | 该卷用于存放客户端认证的 SSL 私钥文件。即在 zabbix_proxy.conf 中的 SSLKeyLocation 参数。 |
/var/lib/zabbix/ssl/ssl_ca | 该卷用于存放 SSL 服务器证书认证的证书颁发机构(CA)文件。即在 zabbix_proxy.conf 中的 SSLCALocation 参数。 |
/var/lib/zabbix/snmptraps | 该卷用于存放 snmptraps.log 文件。它可由 zabbix-snmptraps 容器共享,并在创建 Zabbix server 新实例时使用 Docker的 volumes_from 选项继承。可以通过共享卷,并将 ZBX_ENABLE_SNMP_TRAPS 环境变量切换为 'true' 以启用 SNMP trap 处理功能。 |
/var/lib/zabbix/mibs | 该卷允许添加新的 MIB 文件。它不支持子目录,所有的 MIB 文件必须位于 /var/lib/zabbix/mibs 下。 |
基于 Apache2 Web 服务器的 Zabbix Web 接口 | |
/etc/ssl/apache2 | 该卷允许为 Zabbix Web 接口启用 HTTPS。该卷必须包含为 Apache2 SSL 连接准备的 ssl.crt 和 ssl.key 两个文件。 |
基于 Nginx Web 服务器的 Zabbix Web 接口 | |
/etc/ssl/nginx | 该卷允许为 Zabbix Web 接口启用 HTTPS。该卷必须包含为 Nginx SSL 连接装备的 ssl.crt 和 ssl.key 两个文件。 |
Zabbix snmptraps | |
/var/lib/zabbix/snmptraps | 该卷包含了以接收到的 SNMP traps 命名的 snmptraps.log 日志文件。 |
/var/lib/zabbix/mibs | 该卷允许添加新的 MIB 文件。它不支持子目录,该 MIB 文件必须位于 /var/lib/zabbix/mibs 下。 |
关于更多的信息请在 Docker Hub 的 Zabbix 官方镜像仓库查看。
** 示例 1 **
该示例示范了如何使用内置 MySQL 数据库、Zabbix server、基于 Nginx Web 服务器的 Zabbix Web 界面和 Zabbix Java gateway 来运行 Zabbix 应用。 1.创建专用于Zabbix组件容器的网络:
2.启动空的MySQL服务器实例
# docker run --name mysql-server -t \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
--network=zabbix-net \
-d mysql:8.0 \
--restart unless-stopped \
--character-set-server=utf8 --collation-server=utf8_bin \
--default-authentication-plugin=mysql_native_password
3.启动Zabbix Java gateway实例
# docker run --name zabbix-java-gateway -t \
--network=zabbix-net \
--restart unless-stopped \
-d zabbix/zabbix-java-gateway:alpine-5.0-latest
4.启动Zabbix server实例并将该实例与创建的MySQL服务器实例链接
# docker run --name zabbix-server-mysql -t \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
--network=zabbix-net \
-p 10051:10051 \
--restart unless-stopped \
-d zabbix/zabbix-server-mysql:alpine-5.0-latest
Zabbix服务器实例向主机公开10051 / TCP端口(Zabbix trapper)
5.启动Zabbix Web界面,并将实例与创建的MySQL服务器和Zabbix server实例链接
# docker run --name zabbix-web-nginx-mysql -t \
-e ZBX_SERVER_HOST="zabbix-server-mysql" \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
--network=zabbix-net \
-p 80:8080 \
--restart unless-stopped \
-d zabbix/zabbix-web-nginx-mysql:alpine-5.0-latest
Zabbix Web界面实例向主机公开80 / TCP端口(HTTP)
** 示例 2 **
该示例演示了如何在具有PostgreSQL数据库支持,基于Nginx Web服务器的Zabbix Web界面和SNMP陷阱功能的情况下运行Zabbix服务器。
1.创建专用于Zabbix组件容器的网络:
2.启动空的PostgreSQL服务器实例
# docker run --name postgres-server -t \
-e POSTGRES_USER="zabbix" \
-e POSTGRES_PASSWORD="zabbix_pwd" \
-e POSTGRES_DB="zabbix" \
--network=zabbix-net \
--restart unless-stopped \
-d postgres:latest
3.启动Zabbix snmptraps实例
# docker run --name zabbix-snmptraps -t \
-v /zbx_instance/snmptraps:/var/lib/zabbix/snmptraps:rw \
-v /var/lib/zabbix/mibs:/usr/share/snmp/mibs:ro \
--network=zabbix-net \
-p 162:1162/udp \
--restart unless-stopped \
-d zabbix/zabbix-snmptraps:alpine-5.0-latest
Zabbix snmptrap实例向主机公开162 / UDP端口(SNMP traps)
4.启动Zabbix服务器实例并将该实例与创建的PostgreSQL服务器实例链接
# docker run --name zabbix-server-pgsql -t \
-e DB_SERVER_HOST="postgres-server" \
-e POSTGRES_USER="zabbix" \
-e POSTGRES_PASSWORD="zabbix_pwd" \
-e POSTGRES_DB="zabbix" \
-e ZBX_ENABLE_SNMP_TRAPS="true" \
--network=zabbix-net \
-p 10051:10051 \
--volumes-from zabbix-snmptraps \
--restart unless-stopped \
-d zabbix/zabbix-server-pgsql:alpine-5.0-latest
::: noteclassic Zabbix服务器实例将10051 / TCP端口(Zabbix trapper)公开给主机。 ::: 5.启动Zabbix Web界面,并将实例与创建的PostgreSQL服务器和Zabbix服务器实例链接
# docker run --name zabbix-web-nginx-pgsql -t \
-e ZBX_SERVER_HOST="zabbix-server-pgsql" \
-e DB_SERVER_HOST="postgres-server" \
-e POSTGRES_USER="zabbix" \
-e POSTGRES_PASSWORD="zabbix_pwd" \
-e POSTGRES_DB="zabbix" \
--network=zabbix-net \
-p 443:8443 \
-p 80:8080 \
-v /etc/ssl/nginx:/etc/ssl/nginx:ro \
--restart unless-stopped \
-d zabbix/zabbix-web-nginx-pgsql:alpine-5.0-latest
::: noteclassic Zabbix Web界面实例向主机公开443 / TCP端口(HTTPS)。 目录/ etc / ssl / nginx必须包含具有所需名称的证书。 ::: ** 示例 3 **
该示例演示了如何在Red Hat 8上使用podman运行具有MySQL数据库支持的Zabbix服务器,基于Nginx Web服务器的Zabbix Web界面以及Zabbix Java gateway。
1.使用名称zabbix和公开的端口(Web界面,Zabbix server trapper)创建新的Pod:
2.(可选)在zabbix pod位置启动Zabbix agent容器:
podman run --name zabbix-agent \
-eZBX_SERVER_HOST="127.0.0.1,localhost" \
--restart=always \
--pod=zabbix \
-d registry.connect.redhat.com/zabbix/zabbix-agent-50:latest
3.在主机上创建./mysql/目录,然后启动Oracle MySQL server 8.0:
podman run --name mysql-server -t \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-v ./mysql/:/var/lib/mysql/:Z \
--restart=always \
--pod=zabbix \
-d mysql:8.0 \
--character-set-server=utf8 --collation-server=utf8_bin \
--default-authentication-plugin=mysql_native_password
4.启动Zabbix server容器:
podman run --name zabbix-server-mysql -t \
-e DB_SERVER_HOST="127.0.0.1" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-e ZBX_JAVAGATEWAY="127.0.0.1" \
--restart=always \
--pod=zabbix \
-d registry.connect.redhat.com/zabbix/zabbix-server-mysql-50
5.启动Zabbix Java Gateway容器:
podman run --name zabbix-java-gateway -t \
--restart=always \
--pod=zabbix \
-d registry.connect.redhat.com/zabbix/zabbix-java-gateway-50
Pod zabbix从zabbix-web-mysql容器的8080 / TCP向主机公开80 / TCP端口(HTTP)。
Zabbix 为 Docker 提供了定义和运行复杂 Zabbix 组件的 compose 文件。这些 compose 文件可以在 github.com: https://github.com/zabbix/zabbix-docker 上的 Zabbix docker 官方镜像仓库中找到。这些 compose 文件作为示例添加,并支持广泛。例如,Zabbix proxy 支持 MySQL和 SQLite3。
以下为几个不同版本的 compose 文件:
文件名 ** | 述** |
docker-compose_v3_alpine_mysql_latest.yaml |
该 compose 文件运行基于 Alpine Linux 的 Zabbix 5.0 最新版本的组件,支持 MySQL 数据库。 |
docker-compose_v3_alpine_mysql_local.yaml |
该 compose 文件本地构建和运行基于 Alpine Linux 的 Zabbix 5.0 最新版本的组件,支持 MySQL数据库。 |
docker-compose_v3_alpine_pgsql_latest.yaml |
该 compose 文件运行基于 Alpine Linux 的 Zabbix 5.0 最新版本的组件,支持 PostgreSQL 数据库。 |
docker-compose_v3_alpine_pgsql_local.yaml |
该 compose 文件本地构建和运行基于 Apline Linux 的 Zabbix 5.0 最新版本的组件,支持 PostgreSQL 数据库。 |
docker-compose_v3_centos_mysql_latest.yaml |
该 compose 文件运行基于 CentOS8 的 Zabbix 5.0 最新版本的组件,支持 MySQL 数据库。 |
docker-compose_v3_centos_mysql_local.yaml |
该 compose 文件本地构建和运行基于 CentOS8 的 Zabbix 5.0 最新版本的组件,支持 MySQL 数据库。 |
docker-compose_v3_centos_pgsql_latest.yaml |
该 compose 文件运行基于 CentOS8 的 Zabbix 5.0 最新版本的组件,支持 PostgreSQL 数据库。 |
docker-compose_v3_centos_pgsql_local.yaml |
该 compose 文件本地构建和运行基于 CentOS8 的 Zabbix 5.0 最新版本的组件,支持 PostgreSQL 数据库。 |
docker-compose_v3_ubuntu_mysql_latest.yaml |
该 compose 文件运行基于 Ubuntu 20.04 的 Zabbix 5.0 最新版本的组件,支持 MySQL 数据库。 |
docker-compose_v3_ubuntu_mysq l_local.yaml |
该 compose 文件本地构建和运行基于 Ubuntu 20.04 的 Zabbix 5.0 最新版本的组件,支持 MySQL 数据库。 |
docker-compose_v3_ubuntu_pgsql_latest.yaml |
该 compose 文件运行基于 Ubuntu 20.04 的 Zabbix 5.0 最新版本的组件,支持 PostgreSQL 数据库。 |
docker-compose_v3_ubuntu_pgsql_local.yaml |
该 compose 文件本地构建和运行基于 Ubuntu 20.04 的 Zabbix 5.0 最新版本的组件,支持 PosegreSQL 数据库。 |
可用的Docker compose文件支持Docker Compose的版本3。
撰写文件被配置为支持主机上的本地存储。 当您使用compose文件运行Zabbix组件时,Docker Compose将在文件夹中使用compose文件创建一个zbx_env目录。 该目录将包含与上述“卷”部分中描述的结构相同的目录以及用于数据库存储的目录。
此外,还有卷 /etc/localtime
和 /etc/timezone
下的文件为只读模式。
在 github.com 上与存放 compose 文件的同一目录中,您可以在 compose 文件中找到每个组件的默认环境变量文件,这些环境变量文件的命令与 .env_<type of component>
类似。
** 示例 1 **
该命令将为每个Zabbix组件下载最新的Zabbix 5.0映像,并在分离模式下运行它们。
不要忘记从 github.com 的 Zabbix 官方镜像仓库下载 .env_<type of component>
文件和 compose 文件。
** 示例 2 **
该命令将下载基本映像Ubuntu 20.04(本地),然后在本地构建Zabbix 5.0组件并以分离模式运行它们。