1. 最新版本对比
这里选用7.0,具体如下:
操作系统环境:Liunx
Zabbix:7.0.17
MySQL:8.0.39
Zabbix-agent2:7.0.5
2. 安装
2.1 创建目录结构
在当前目录创建docker-compose.yml、.env和Dockerfile.zabbix-server文件,并将2.3.3到2.3.5的相关内容复制进去
创建目录,用来持久化存储一些重要数据
mkdir -p config data/mysql data/zabbix-server data/alertscripts zabbix-web
2.2 初始化zabbix数据库
从 Zabbix 官方源码中获取完整的数据库初始化脚本,包括:
schema.sql(表结构)
images.sql(图标资源)
data.sql(初始数据)
下载并解压源码包
wget https://cdn.zabbix.com/zabbix/sources/stable/7.0/zabbix-7.0.17.tar.gz
tar -xvzf zabbix-7.0.17.tar.gz
cd zabbix-7.0.17/database/mysql
合并SQL 文件为 init.sql,导出位置可自选
cat schema.sql images.sql data.sql > ../../../init.sql
2.3 拷贝初始数据
因为docker的持久化是单向覆盖(宿主机→docker容器),所以需先启动相关容器并拷贝初始数据
2.3.1 创建容器但不启动
docker compose create --build
2.3.2 从容器中拷贝默认配置
docker cp zabbix-server:/etc/zabbix/zabbix_server.conf ./config/zabbix_server.conf
docker cp zabbix-agent:/etc/zabbix/zabbix_agentd2.conf ./config/zabbix_agentd2.conf
docker cp zabbix-web:/usr/share/zabbix/. ./zabbix-web/
2.3.3 docker-compose.yml
拷贝默认配置的时候,需注释掉所有的挂载卷,再创建容器但不启动
Zabbix探针,agent容器已被注释,因docker方式部署探针会有很多弊端,建议宿主机通过二进制文件直接部署,官方链接:Download Zabbix agents
#version: '3.5'
services:
mysql:
image: mysql:8.0.39
container_name: zabbix-mysql
restart: always
environment:
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
volumes:
- ${MYSQL_DATA_PATH}:/var/lib/mysql
- ${MYSQL_INIT_SQL}:/docker-entrypoint-initdb.d/init.sql
ports:
- "${MYSQL_PORT}:3306"
networks:
zbx_net:
ipv4_address: ${MYSQL_IP}
zabbix-server:
build:
context: .
dockerfile: Dockerfile.zabbix-server
container_name: zabbix-server
restart: always
depends_on:
- mysql
environment:
DB_SERVER_HOST: mysql
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
volumes:
- ${ZBX_SERVER_CONF}:/etc/zabbix/zabbix_server.conf
- ${ZBX_SERVER_DATA}:/var/lib/zabbix
- ${ZBX_SERVER_ALERTS}:/usr/lib/zabbix/alertscripts
ports:
- "${ZBX_SERVER_PORT}:10051"
networks:
zbx_net:
ipv4_address: ${ZBX_SERVER_IP}
zabbix-web:
image: zabbix/zabbix-web-nginx-mysql:alpine-7.0.17
container_name: zabbix-web
restart: always
depends_on:
- zabbix-server
- mysql
environment:
DB_SERVER_HOST: mysql
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
ZBX_SERVER_HOST: zabbix-server
PHP_TZ: ${PHP_TZ}
WEB_LISTEN_IP: 0.0.0.0
volumes:
- ${ZBX_WEB_DATA}:/usr/share/zabbix
ports:
- "${ZBX_WEB_PORT}:8080"
networks:
zbx_net:
ipv4_address: ${ZBX_WEB_IP}
# zabbix-agent:
# image: zabbix/zabbix-agent2:alpine-7.0.5
# container_name: zabbix-agent
# restart: always
# depends_on:
# - zabbix-server
# environment:
# ZBX_SERVER_HOST: zabbix-server
# ZBX_HOSTNAME: docker-agent
# volumes:
# - ${ZBX_AGENT_CONF}:/etc/zabbix/zabbix_agentd2.conf
## network_mode: host
# ports:
# - "${ZBX_AGENT_PORT}:10050"
# networks:
# zbx_net:
# ipv4_address: ${ZBX_AGENT_IP}
networks:
zbx_net:
driver: bridge
ipam:
config:
- subnet: 172.225.0.0/16
2.3.4 .env
# 数据库配置
MYSQL_DATABASE=zabbix
MYSQL_USER=zabbix
MYSQL_PASSWORD=
MYSQL_ROOT_PASSWORD=
# MySQL 数据存初始化 SQL挂载路径
MYSQL_DATA_PATH=./data/mysql
MYSQL_INIT_SQL=./init.sql
# 时区
PHP_TZ=Asia/Shanghai
# Zabbix Server 配置挂载路径
ZBX_SERVER_CONF=./config/zabbix_server.conf
ZBX_SERVER_DATA=./data/zabbix-server
ZBX_SERVER_ALERTS=./data/alertscripts
# Zabbix Web 配置挂载路径
ZBX_WEB_DATA=./zabbix-web
# Zabbix Agent 配置挂载路径
#ZBX_AGENT_CONF=./config/zabbix_agentd2.conf
# 容器静态 IP
MYSQL_IP=172.225.0.2
ZBX_SERVER_IP=172.225.0.3
ZBX_WEB_IP=172.225.0.4
#ZBX_AGENT_IP=172.225.0.5
LOG_EXPORTER_IP=172.225.0.6
#容器对外端口
# 数据库端口
MYSQL_PORT=3306
# Zabbix server端口
ZBX_SERVER_PORT=10051
# Zabbix web端口
ZBX_WEB_PORT=8080
# Zabbix agent端口
#ZBX_AGENT_PORT=10050
2.3.5 Dockerfile.zabbix-server
Zabbix执行一些脚本时候,需要一些环境,例如Python,所以初次需要编译zabbix-server容器
FROM zabbix/zabbix-server-mysql:alpine-7.0.17
# 切换到 root 安装
USER root
# 安装 python3 和 pip
# 替换 apk 源为国内镜像(清华为例)
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories \
&& apk update && apk add --no-cache \
python3 \
py3-pip \
py3-requests \
&& rm -rf /var/cache/apk/* \
&& mkdir -p /usr/lib/zabbix/alertscripts \
&& chown -R zabbix:zabbix /usr/lib/zabbix/alertscripts
USER zabbix
2.3.6 取消服务,重新创建再启动服务
暂停并删除当前的容器,取消docker-compose.yml文件中挂载卷的注释,然后重新编译并启动容器
docker compose down
docker compose create --build
docker compose start
等待一段时间,zabbix-web和mysql初始化完成
安装完成后,初次登录
账号:Admin
密码:zabbix
3. 基本配置
待续...