Zabbix为每个Zabbix组件都提供了Docker镜像,以加速便携(portable)和自给自足(self-sufficient)的容器部署和升级过程。
Zabbix组件支持MySQL和PostgreSQL数据库,支持Apache2和Nginx作为Web服务器。这些镜像被分成多个不同的镜像。
通过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 Linux的最新稳定版本的Zabbix组件镜像alpine-3.2-latest
- 基于Alpine Linux的Zabbix 3.2最新次要版本的组件镜像ubuntu-3.2-latest
- 基于Ubuntu Linux的Zabbix 3.2最新次要版本的组件镜像alpine-3.2.*
- 基于Alpine Linux的Zabbix 3.2不同次要版本的组件镜像,*代表具体的次要版本ubuntu-3.2.*
- 基于Ubuntu Linux的Zabbix 3.2不同次要版本的组件镜像,*代表具体的次要版本
所有Zabbix组件的镜像提供了环境变量用以控制配置。这些环境变量在每个组件的源码库中列出。这些环境变量作为Zabbix配置文件的选项,但有不同的命名方法。比如,Zabbix server配置文件中的ZBX_LOGSLOWQUERIES
和Zabbix proxy配置文件中的LogSlowQueries
是同一个配置选项。
PIDFile
和LogType
。
一些组件存在特定的环境变量,而这些环境变量可能在Zabbix官方的配置文件中不存在:
变量 | 组件 | 描述 |
DB_SERVER_HOST | Server Proxy Web 接口 | 这个变量指的是MySQL或者PostgreSQL服务器的IP或者DNS名称。 默认情况下,这个值为 mysql-server 或者postgres-server ,依据使用MySQL或者PostgreSQL而定。 |
DB_SERVER_PORT | Server Proxy Web 接口 | 这个变量指的是MySQL或者PostgreSQL服务器的端口。 默认情况下,这个值为'3306'或者'5432',依据使用MySQL或者PostgreSQL而定。 |
MYSQL_USER | Server Proxy Web 接口 | MySQL数据库用户。 默认情况下,这个值为'zabbix'。 |
MYSQL_PASSWORD | Server Proxy Web 接口 | MySQL数据库密码。 默认情况下,这个值为'zabbix'。 |
MYSQL_DATABASE | Server Proxy Web 接口 | Zabbix数据库名称。 默认情况下,Zabbix server上的这个值为'zabbix',Zabbix proxy上的这个值为'zabbix_proxy'。 |
POSTGRES_USER | Server Web 接口 | PostgreSQL数据库用户。 默认情况下,这个值为'zabbix'。 |
POSTGRES_PASSWORD | Server Web 接口 | PostgreSQL数据库密码。 默认情况下,这个值为'zabbix'。 |
POSTGRES_DB | Server Web 接口 | Zabbix数据库名称。 默认情况下,Zabbix server上的这个值为'zabbix',Zabbix proxy上的这个值为'zabbix_proxy'。 |
TZ | Web 接口 | PHP格式中的时区。所有支持的时区列表,可参见php.net. 默认情况下,这个值为'Europe/Riga'。 |
ZBX_SERVER_NAME | Web 接口 | Web界面右上角显示的Zabbix安装名称。 默认情况下,这个值为'Zabbix Docker'。 |
ZBX_JAVAGATEWAY_ENABLE | Server Proxy | 是否启用Zabbix Java gateway以收集Java相关检查数据。 默认情况下,这个值为“false”。 |
ZBX_ENABLE_SNMP_TRAPS | Server Proxy | 是否启用SNMP trap功能。这要求zabbix-snmptraps实例,并且共享卷/var/lib/zabbix/snmptraps 给Zabbix server或Zabbix 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 server。 |
/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 server实例时,它可以通过zabbix-snmptraps容器被共享,并通过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 | T这个卷用于存放用于SSL服务器证书认证的证书颁发机构(CA)文件。即zabbix_proxy.conf中SSLCALocation 参数。 |
/var/lib/zabbix/snmptraps | 这个卷用于存放snmptraps.log文件。在创建Zabbix server实例时,它可以通过zabbix-snmptraps容器被共享,并通过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 trap命名的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。
1. 启动一个空的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" \ -d mysql:5.7
2. 启动Zabbix Java gateway实例
# docker run --name zabbix-java-gateway -t \ -d zabbix/zabbix-java-gateway:latest
3. 启动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" \ --link mysql-server:mysql \ --link zabbix-java-gateway:zabbix-java-gateway \ -p 10051:10051 \ -d zabbix/zabbix-server-mysql:latest
4. 启动Zabbix web 接口,并将它与MySQL服务器实例和Zabbix server实例关联
# docker run --name zabbix-web-nginx-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" \ --link mysql-server:mysql \ --link zabbix-server-mysql:zabbix-server \ -p 80:80 \ -d zabbix/zabbix-web-nginx-mysql:latest
示例 2
这个示例展现了如何运行支持PostgreSQL数据库的Zabbix server,基于Nginx web服务器运行Zabbix web接口,以及SNMP trap功能。
1. 启动空的PostgreSQL服务器实例
# docker run --name postgres-server -t \ -e POSTGRES_USER="zabbix" \ -e POSTGRES_PASSWORD="zabbix" \ -e POSTGRES_DB="zabbix_pwd" \ -d postgres:latest
2. 启动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 \ -p 162:162/udp \ -d zabbix/zabbix-snmptraps:latest
3. 启动Zabbix server实例并关联这个实例到已创建的PostgreSQL服务器实例
# docker run --name zabbix-server-pgsql -t \ -e DB_SERVER_HOST="postgres-server" \ -e POSTGRES_USER="zabbix" \ -e POSTGRES_PASSWORD="zabbix" \ -e POSTGRES_DB="zabbix_pwd" \ -e ZBX_ENABLE_SNMP_TRAPS="true" \ --link postgres-server:postgres \ -p 10051:10051 \ --volumes-from zabbix-snmptraps \ -d zabbix/zabbix-server-pgsql:latest
4. 启动Zabbix web 接口,并将它与PostgreSQL服务器实例和Zabbix server实例关联
# docker run --name zabbix-web-nginx-pgsql -t \ -e DB_SERVER_HOST="postgres-server" \ -e POSTGRES_USER="zabbix" \ -e POSTGRES_PASSWORD="zabbix" \ -e POSTGRES_DB="zabbix_pwd" \ --link postgres-server:postgres \ --link zabbix-server-pgsql:zabbix-server \ -p 443:443 \ -v /etc/ssl/nginx:/etc/ssl/nginx:ro \ -d zabbix/zabbix-web-nginx-pgsql:latest
Zabbix为Docker提供了compose文件用于定义和运行多容器(multi-container)的Zabbix组件。这些compose文件可以在github.com上的Zabbix docker官方代码库中找到:https://github.com/zabbix/zabbix-docker。这些compose文件以示例方式添加,它们有非常多的分支,比如proxy的文件支持MySQL和SQLite3。
这里包含了一些不同版本的compose文件:
文件名称 | 描述 |
docker-compose_v2_alpine_mysql_latest.yaml | 这个compose文件运行了基于Alpine Linux上的Zabbix 3.2最新版本的组件,支持MySQL数据库。 |
docker-compose_v2_alpine_mysql_local.yaml | 这个compose文件本地构建了基于和运行了Alpine Linux上的Zabbix 3.2最新版本的组件,支持MySQL数据库。 |
docker-compose_v2_alpine_pgsql_latest.yaml | 这个compose文件运行了基于Alpine Linux上的Zabbix 3.2最新版本的组件,支持PostgreSQL数据库。 |
docker-compose_v2_alpine_pgsql_local.yaml | 这个compose文件本地构建了基于和运行了Alpine Linux上的Zabbix 3.2最新版本的组件,支持PostgreSQL数据库。 |
docker-compose_v2_ubuntu_mysql_latest.yaml | 这个compose文件运行了基于Ubuntu 14.04上的Zabbix 3.2最新版本的组件,支持MySQL数据库。 |
docker-compose_v2_ubuntu_mysql_local.yaml | 这个compose文件本地构建了基于和运行了Ubuntu 14.04上的Zabbix 3.2最新版本的组件,支持MySQL数据库。 |
docker-compose_v2_ubuntu_pgsql_latest.yaml | 这个compose文件运行了基于Ubuntu 14.04上的Zabbix 3.2最新版本的组件,支持PostgreSQL数据库。 |
docker-compose_v2_ubuntu_pgsql_local.yaml | 这个compose文件本地构建了基于和运行了Ubuntu 14.04上的Zabbix 3.2最新版本的组件,支持PostgreSQL数据库。 |
Compose文件已经配置为支持主机的本地存储。当你使用compose文件运行Zabbix组件时,Docker Compose将在compose文件所在的文件夹中创建一个zbx_env
目录。这个目录将包含上文卷(Volumes)一节中提到的相同结构,以用于数据库存储。
/etc/localtime
和 /etc/timezone
卷下的文件为只读模式。
在github.com上存放compose文件的同一个目录里,你可以在compose文件中找到每个组件的默认环境变量。这些环境变量文件的命名类似于.env_<组件类型>
.
示例 1
# docker-compose -f ./docker-compose_v2_alpine_mysql_latest.yaml up -d
这个命令将会为每个Zabbix组件下载最新的Zabbix 3.2镜像,并以detach模式运行。
.env_<组件类型>
文件及相关的compose文件。
示例 2
# docker-compose -f ./docker-compose_v2_ubuntu_mysql_local.yaml up -d
这个命令将会下载Ubuntu 14.04的基础镜像,然后在本地构建Zabbix 3.2,并以detach模式运行。