Zabbix组件支持MySQL和PostgreSQL数据库,支持Apache2和Nginx作为Web服务器。这些镜像被分成多个不同的镜像。

Docker base images

Zabbix组件提供了Ubuntu和Alpine Linux的基础镜像:

如果基础镜像升级了,所有的镜像被配置为重建成最新版本的镜像。

Docker源文件

通过github.com上的Zabbix ,任何人都可以跟踪Docker文件的变更记录。基于官方Docker文件,你可以制作分支项目或者你自己的镜像

结构

所有Zabbix组件都下列Docker源码库中提供:

  • Zabbix agent -

  • Zabbix server

  • Zabbix web接口

  • Zabbix proxy

另外,对于SNMP trap的支持,这里只基于Ubuntu Trusty提供额外的源代码库()。 这可以关联Zabbix server和Zabbix proxy使用。

版本

Zabbix组件的每个源码库都包含了下列标签:

  • - 基于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是同一个配置选项。

一些配置选项不允许更改。比如:PIDFileLogType

一些组件存在特定的环境变量,而这些环境变量可能在Zabbix官方的配置文件中不存在:

卷(Volumes)

镜像允许使用一些挂载点。根据Zabbix组件的类型,这些挂载点各不相同:

其他信息可以在Docker Hub上的Zabbix官方源码库查看。

使用方法示例

示例 1

这个示例展现了如何运行支持MySQL数据库的Zabbix server,基于Nginx web服务器运行Zabbix web接口,以及Zabbix Java gateway。

  1. 启动一个空的MySQL服务器实例
  1. 启动Zabbix Java gateway实例
  1. # docker run --name zabbix-java-gateway -t \
  2. -d zabbix/zabbix-java-gateway:latest
  1. 启动Zabbix server实例,并关联这个实例到已创建的MySQL服务器实例
  1. # docker run --name zabbix-server-mysql -t \
  2. -e DB_SERVER_HOST="mysql-server" \
  3. -e MYSQL_DATABASE="zabbix" \
  4. -e MYSQL_USER="zabbix" \
  5. -e MYSQL_PASSWORD="zabbix_pwd" \
  6. -e MYSQL_ROOT_PASSWORD="root_pwd" \
  7. -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
  8. --link mysql-server:mysql \
  9. --link zabbix-java-gateway:zabbix-java-gateway \
  10. -p 10051:10051 \
  11. -d zabbix/zabbix-server-mysql:latest
  1. 启动Zabbix web 接口,并将它与MySQL服务器实例和Zabbix server实例关联

Zabbix web 接口暴露80/TCP端口(HTTP)给主机。

示例 2

这个示例展现了如何运行支持PostgreSQL数据库的Zabbix server,基于Nginx web服务器运行Zabbix web接口,以及SNMP trap功能。

  1. # docker run --name postgres-server -t \
  2. -e POSTGRES_USER="zabbix" \
  3. -e POSTGRES_PASSWORD="zabbix" \
  4. -e POSTGRES_DB="zabbix_pwd" \
  5. -d postgres:latest
  1. 启动Zabbix snmptraps实例
  1. # docker run --name zabbix-snmptraps -t \
  2. -v /zbx_instance/snmptraps:/var/lib/zabbix/snmptraps:rw \
  3. -v /var/lib/zabbix/mibs:/usr/share/snmp/mibs:ro \
  4. -p 162:162/udp \
  5. -d zabbix/zabbix-snmptraps:latest

Zabbix snmptrap实例暴露162/UDP端口(SNMP traps)给主机。

  1. 启动Zabbix server实例并关联这个实例到已创建的PostgreSQL服务器实例

Zabbix server实例暴露10051/TCP端口(Zabbix trapper)给主机。

  1. 启动Zabbix web 接口,并将它与PostgreSQL服务器实例和Zabbix server实例关联
  1. # docker run --name zabbix-web-nginx-pgsql -t \
  2. -e DB_SERVER_HOST="postgres-server" \
  3. -e POSTGRES_USER="zabbix" \
  4. -e POSTGRES_PASSWORD="zabbix" \
  5. -e POSTGRES_DB="zabbix_pwd" \
  6. --link postgres-server:postgres \
  7. --link zabbix-server-pgsql:zabbix-server \
  8. -p 443:443 \
  9. -v /etc/ssl/nginx:/etc/ssl/nginx:ro \
  10. -d zabbix/zabbix-web-nginx-pgsql:latest

Zabbix web 接口暴露443/TCP端口(HTTPS)给主机。/etc/ssl/nginx目录必须包含指定名称的证书。

Zabbix为Docker提供了compose文件用于定义和运行多容器(multi-container)的Zabbix组件。这些compose文件可以在github.com上的Zabbix docker官方代码库中找到:。这些compose文件以示例方式添加,它们有非常多的分支,比如proxy的文件支持MySQL和SQLite3。

这里包含了一些不同版本的compose文件:

Docker compose文件只支持Docker Compose Version 2.

存储

Compose文件已经配置为支持主机的本地存储。当你使用compose文件运行Zabbix组件时,Docker Compose将在compose文件所在的文件夹中创建一个zbx_env目录。这个目录将包含上文一节中提到的相同结构,以用于数据库存储。

/etc/localtime/etc/timezone 卷下的文件为只读模式。

环境变量文件

在github.com上存放compose文件的同一个目录里,你可以在compose文件中找到每个组件的默认环境变量。这些环境变量文件的命名类似于.env_<组件类型>.

示例

示例 1

  1. # docker-compose -f ./docker-compose_v2_alpine_mysql_latest.yaml up -d

这个命令将会为每个Zabbix组件下载最新的Zabbix 3.2镜像,并以detach模式运行。

不要忘记从github.com上的Zabbix官方源码库中,下载文件及相关的compose文件。

示例 2