5 从容器中安装

    Zabbix officially provides:

    • Separate Docker images for each Zabbix component to run as portable and self-sufficient containers.
    • Compose files for defining and running multi-container Zabbix components in Docker.

    Zabbix 为每个 Zabbix 组件提供 Docker image 作为可移植和自给自足的容器,以加快部署和更新过程。

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

    Tags

    Official Zabbix component images may contain the following tags:

    Docker file 源

    任何人都可以使用位于 上的 官方仓库 来追踪 Docker file 的变化。 您可以 fork 项目,或根据官方 Docker file 制作自己的 image。

    使用方法

    环境变量

    所有 Zabbix 组件 image 都提供环境变量来控制配置。 这些环境变量在每个组件 image 仓库中列出。这些环境变量是 Zabbix 配置文件中的选项,但具有不同的命名方法。 例如,ZBX_LOGSLOWQUERIES 等于来自 Zabbix server 和 Zabbix proxy 配置文件的 LogSlowQueries。

    一些配置选项是不允许更改的。例如,和 LogType

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

    Volumes

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

    关于更多的信息请在 Docker Hub 的 Zabbix 官方仓库查看。

    使用示例

    示例 1

    该示例示范了如何运行 MySQL 数据库支持的 Zabbix Server 、基于 Nginx Web 服务器的 Zabbix Web 界面和 Zabbix Java 网关。

    1. 创建专用于 Zabbix 组件容器的网络:

    2. 启动空的 MySQL 服务器实例:

    1. # docker run --name mysql-server -t \
    2. -e MYSQL_DATABASE="zabbix" \
    3. -e MYSQL_USER="zabbix" \
    4. -e MYSQL_PASSWORD="zabbix_pwd" \
    5. -e MYSQL_ROOT_PASSWORD="root_pwd" \
    6. --network=zabbix-net \
    7. -d mysql:8.0 \
    8. --restart unless-stopped \
    9. --character-set-server=utf8 --collation-server=utf8_bin \
    10. --default-authentication-plugin=mysql_native_password

    3. 启动 Zabbix Java 网关实例:

    1. --network=zabbix-net \
    2. --restart unless-stopped \
    3. -d zabbix/zabbix-java-gateway:alpine-5.4-latest
    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. --network=zabbix-net \
    9. -p 10051:10051 \
    10. -d zabbix/zabbix-server-mysql:alpine-5.4-latest

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

    5. 启动 Zabbix Web 界面,并将其关联到已创建的 MySQL server 和 Zabbix server 实例:

    1. # docker run --name zabbix-web-nginx-mysql -t \
    2. -e ZBX_SERVER_HOST="zabbix-server-mysql" \
    3. -e DB_SERVER_HOST="mysql-server" \
    4. -e MYSQL_DATABASE="zabbix" \
    5. -e MYSQL_USER="zabbix" \
    6. -e MYSQL_PASSWORD="zabbix_pwd" \
    7. -e MYSQL_ROOT_PASSWORD="root_pwd" \
    8. --network=zabbix-net \
    9. -p 80:8080 \
    10. --restart unless-stopped \
    11. -d zabbix/zabbix-web-nginx-mysql:alpine-5.4-latest

    Zabbix web 界面实例将 80/TCP 端口(HTTP)暴露给主机。

    示例 2

    该示例示范了如何运行 PostgreSQL 数据库支持的 Zabbix server、基于 Nginx Web 服务器的 Zabbix Web 界面和 SNMP trap功能。

    1. 创建专用于 Zabbix 组件容器的网络:

    1. # docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net

    2. 启动空的 PostgreSQL server 实例:

    3. 启动 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. --network=zabbix-net \
    5. -p 162:1162/udp \
    6. --restart unless-stopped \
    7. -d zabbix/zabbix-snmptraps:alpine-5.4-latest

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

    4. 启动 Zabbix server 实例,并将其关联到已创建的 PostgreSQL server 实例:

    1. # docker run --name zabbix-server-pgsql -t \
    2. -e DB_SERVER_HOST="postgres-server" \
    3. -e POSTGRES_USER="zabbix" \
    4. -e POSTGRES_PASSWORD="zabbix_pwd" \
    5. -e POSTGRES_DB="zabbix" \
    6. -e ZBX_ENABLE_SNMP_TRAPS="true" \
    7. --network=zabbix-net \
    8. -p 10051:10051 \
    9. --volumes-from zabbix-snmptraps \
    10. --restart unless-stopped \
    11. -d zabbix/zabbix-server-pgsql:alpine-5.4-latest

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

    5. 启动 Zabbix Web 界面,并将其关联到已创建的 PostgreSQL server 和 Zabbix server 实例:

    1. # docker run --name zabbix-web-nginx-pgsql -t \
    2. -e ZBX_SERVER_HOST="zabbix-server-pgsql" \
    3. -e DB_SERVER_HOST="postgres-server" \
    4. -e POSTGRES_USER="zabbix" \
    5. -e POSTGRES_PASSWORD="zabbix_pwd" \
    6. -e POSTGRES_DB="zabbix" \
    7. -p 443:8443 \
    8. -p 80:8080 \
    9. -v /etc/ssl/nginx:/etc/ssl/nginx:ro \
    10. --restart unless-stopped \

    Zabbix web 界面实例将 443/TCP 端口(HTTPS)暴露给主机。
    /etc/ssl/nginx 目录必须包含具有所需名称的证书。

    示例 3

    该示例示范了如何在Red Hat 8上使用 podman 运行 MySQL 数据库支持的 Zabbix Server 、基于 Nginx Web 服务器的 Zabbix Web 界面和 Zabbix Java 网关。

    1. podman pod create --name zabbix -p 80:8080 -p 10051:10051

    2. (可选)在 zabbix pod 中启动 Zabbix agent 容器:

    1. podman run --name zabbix-agent \
    2. -eZBX_SERVER_HOST="127.0.0.1,localhost" \
    3. --restart=always \
    4. --pod=zabbix \
    5. -d registry.connect.redhat.com/zabbix/zabbix-agent-50:latest

    3. 在主机上创建./mysql/ 目录并启动 Oracle MySQL server 8.0:

    3. 启动 Zabbix server 容器:

    1. podman run --name zabbix-server-mysql -t \
    2. -e DB_SERVER_HOST="127.0.0.1" \
    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="127.0.0.1" \
    8. --restart=always \
    9. --pod=zabbix \
    10. -d registry.connect.redhat.com/zabbix/zabbix-server-mysql-50

    4. 启动 Zabbix Java 网关容器:

    1. podman run --name zabbix-java-gateway -t \
    2. --restart=always \
    3. --pod=zabbix \
    4. -d registry.connect.redhat.com/zabbix/zabbix-java-gateway-50

    5. 启动 Zabbix web 界面 容器:

    1. podman run --name zabbix-web-mysql -t \
    2. -e ZBX_SERVER_HOST="127.0.0.1" \
    3. -e DB_SERVER_HOST="127.0.0.1" \
    4. -e MYSQL_DATABASE="zabbix" \
    5. -e MYSQL_USER="zabbix" \
    6. -e MYSQL_PASSWORD="zabbix_pwd" \
    7. -e MYSQL_ROOT_PASSWORD="root_pwd" \
    8. --restart=always \
    9. --pod=zabbix \
    10. -d registry.connect.redhat.com/zabbix/zabbix-web-mysql-50

    zabbix pod 从 zabbix-web-mysql 容器的 8080/TCP 向 主机的 80/TCP port (HTTP) 暴露端口。

    Zabbix 还提供了用于在 Docker 中定义和运行多容器 Zabbix 组件的 compose 文件。 这些 compose 文件可以在 github.com: https://github.com/zabbix/zabbix-docker 上的 Zabbix docker 官方仓库中找到。这些 compose 文件作为示例添加,并支持广泛。例如,Zabbix proxy 支持 MySQL和 SQLite3。

    以下为几个不同版本的 compose 文件:

    Docker compose 文件支持 Docker Compose 3 版本。

    存储

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

    此外,volume 下的文件 /etc/localtime/etc/timezone 为只读模式。

    环境变量文件

    在 github.com 上与存放 compose 文件的同一目录中,您可以在 compose 文件中找到每个组件的默认环境变量文件,这些环境变量文件的命令与 .env_<type of component> 类似。

    示例

    示例 1

    1. # git checkout 5.4
    2. # docker-compose -f ./docker-compose_v3_alpine_mysql_latest.yaml up -d

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

    不要忘记从 github.com 的 Zabbix 官方镜像仓库下载 .env_<type of component> 文件和 compose 文件。

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

    这个命令将会下载基于 Ubuntu 20.04 的 image,并在本地构建 Zabbix 5.4 组件,以 detach 模式运行。