Operations 18 min read

Deploy Zabbix Monitoring with Docker and Docker‑Compose on CentOS

This guide walks through preparing a CentOS 7 host, installing Docker, configuring a Zabbix server and MySQL containers, and optionally using docker‑compose to set up Zabbix components, including the web UI and agent, with detailed commands and volume mappings for persistent monitoring.

Ops Development Stories
Ops Development Stories
Ops Development Stories
Deploy Zabbix Monitoring with Docker and Docker‑Compose on CentOS

Preparation

Server IP: 172.19.204.200 running CentOS Linux release 7.6.1810 (Core).

Install Docker

Disable the firewall and SELinux, install required packages, add the Docker repository, install docker-ce, start and enable the Docker service, verify the version, configure a Docker image accelerator, and restart Docker.

systemctl stop firewalld
systemctl disable firewalld
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce
systemctl start docker
systemctl enable docker
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
systemctl restart docker

Zabbix Server Deployment

Two installation methods are provided; both use Docker images. Method 1 follows the official Zabbix Docker guide, pulling images directly.

1) Start a MySQL container for Zabbix data

docker run --name zabbix-mysql -t \
  -p 3306:3306 \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix" \
  -e MYSQL_ROOT_PASSWORD="zabbix" \
  -v /home/zabbix/data:/var/lib/mysql \
  -d mysql:5.7 \
  --character-set-server=utf8 \
  --collation-server=utf8_bin

This creates a persistent MySQL instance with UTF‑8 settings to store Zabbix data.

2) Launch the Zabbix server container

Prepare a configuration file ( zabbix_server.conf) and mount it into the container along with directories for scripts, modules, TLS files, etc.

docker run --name zabbix-server-mysql -t \
  -e DB_SERVER_HOST="zabbix-mysql" \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix" \
  -e MYSQL_ROOT_PASSWORD="zabbix" \
  --link zabbix-mysql:mysql \
  -v /home/zabbix/zabbixconfig:/etc/zabbix \
  -v /home/zabbix/alertscripts:/usr/lib/zabbix/alertscripts \
  -v /home/zabbix/externalscripts:/usr/lib/zabbix/externalscripts \
  -v /home/zabbix/modules:/var/lib/zabbix/modules \
  -v /home/zabbix/enc:/var/lib/zabbix/enc \
  -v /home/zabbix/ssh_keys:/var/lib/zabbix/ssh_keys \
  -v /home/zabbix/ssl/certs:/var/lib/zabbix/ssl/certs \
  -v /home/zabbix/ssl/keys:/var/lib/zabbix/ssl/keys \
  -v /home/zabbix/ssl/ssl_ca:/var/lib/zabbix/ssl/ssl_ca \
  -v /home/zabbix/snmptraps:/var/lib/zabbix/snmptraps \
  -v /home/zabbix/export:/var/lib/zabbix/export \
  -v /home/zabbix/mibs:/var/lib/zabbix/mibs \
  -p 10051:10051 \
  -d zabbix/zabbix-server-mysql:centos-latest

Key volume mappings:

/usr/lib/zabbix/alertscripts – custom alert scripts (AlertScriptsPath)

/usr/lib/zabbix/externalscripts – external checks (ExternalScripts)

/etc/zabbix – server configuration files

/var/lib/zabbix/modules – loadable modules

/var/lib/zabbix/enc – TLS related files

/var/lib/zabbix/ssh_keys – SSH keys for checks

/var/lib/zabbix/ssl/certs – client SSL certificates

/var/lib/zabbix/ssl/keys – client SSL private keys

/var/lib/zabbix/ssl/ssl_ca – CA certificates for server verification

/var/lib/zabbix/snmptraps – SNMP trap log location

/var/lib/zabbix/mibs – MIB files (no sub‑directories)

3) Start the Zabbix web front‑end

docker run --rm --name zabbix-web-nginx-mysql -t \
  -e DB_SERVER_HOST="zabbix-mysql" \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix" \
  -e MYSQL_ROOT_PASSWORD="zabbix" \
  -e PHP_TZ="Asia/Shanghai" \
  --link zabbix-mysql:mysql \
  --link zabbix-server-mysql:zabbix-server \
  -p 8080:80 \
  -d zabbix/zabbix-web-nginx-mysql:latest

Ensure the --link names match the container names created earlier.

4) Verify all three containers are running

docker ps
# Example output shows zabbix-web-nginx-mysql, zabbix-server-mysql, and mysql containers up and listening on the expected ports.

5) Install Zabbix agent on the host (non‑container)

rpm -ivh https://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-agent-4.4.5-1.el7.x86_64.rpm
yum install -y zabbix-agent
# Edit /etc/zabbix/zabbix_agentd.conf
Server=172.17.0.3
ServerActive=172.17.0.3:10050
Hostname=Zabbix server
systemctl restart zabbix-agent
systemctl enable zabbix-agent

If the host uses Docker’s default bridge network, adjust Server in the agent config to point to the Docker‑host IP.

6) Access the Zabbix web UI

Open http://<em>host‑ip</em>:8080, log in with user Admin and password zabbix. The interface defaults to English with a white background; language and theme can be changed via the user menu.

Alternative: Deploy with docker‑compose

Install docker‑compose

# curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

Prepare configuration files

Create zabbix_server.conf and place it under /opt/docker-zabbix-server/zabbix/zabbixconfig/.

docker‑compose.yml

version: '3'
services:
  zabbix-mysql:
    image: mariadb:latest
    ports:
      - "3309:3306"
    volumes:
      - ./zabbix/data/mysqllib:/var/lib/mysql
    environment:
      - MYSQL_USER=zabbix
      - MYSQL_DATABASE=zabbix
      - MYSQL_PASSWORD=zabbix
      - MYSQL_ROOT_PASSWORD=123321
      - character-set-server=utf8
      - collation-server=utf8_bin
    restart: always
  zabbix-server:
    image: zabbix/zabbix-server-mysql:centos-latest
    ports:
      - "10052:10051"
    environment:
      - DB_SERVER_HOST=zabbix-mysql
      - MYSQL_USER=zabbix
      - MYSQL_DATABASE=zabbix
      - MYSQL_PASSWORD=zabbix
      - DB_SERVER_ROOT_USER=root
      - DB_SERVER_ROOT_PASS=123321
      - TZ='Asia/Shanghai'
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - ./zabbix/zabbixconfig/:/etc/zabbix/
      - ./zabbix/alertscripts:/usr/lib/zabbix/alertscripts
      - ./zabbix/externalscripts:/usr/lib/zabbix/externalscripts
      - ./zabbix/modules:/var/lib/zabbix/modules
      - ./zabbix/enc:/var/lib/zabbix/enc
      - ./zabbix/ssh_keys:/var/lib/zabbix/ssh_keys
      - ./zabbix/ssl/certs:/var/lib/zabbix/ssl/certs
      - ./zabbix/ssl/keys:/var/lib/zabbix/ssl/keys
      - ./zabbix/ssl/ssl_ca:/var/lib/zabbix/ssl/ssl_ca
      - ./zabbix/snmptraps:/var/lib/zabbix/snmptraps
      - ./zabbix/mibs:/var/lib/zabbix/mibs
    depends_on:
      - zabbix-mysql
  zabbix-web-nginx:
    image: zabbix/zabbix-web-nginx-mysql:latest
    ports:
      - "8088:80"
    environment:
      - DB_SERVER_HOST=zabbix-mysql
      - MYSQL_DATABASE=zabbix
      - MYSQL_USER=zabbix
      - MYSQL_PASSWORD=zabbix
      - MYSQL_ROOT_PASSWORD=123321
      - ZBX_SERVER_HOST=zabbix-server
      - PHP_TZ='Asia/Shanghai'
      - TZ='Asia/Shanghai'
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
    links:
      - zabbix-mysql
      - zabbix-server
  zabbix-agent:
    image: zabbix/zabbix-agent:latest
    environment:
      - ZBX_HOSTNAME=Zabbix server
      - ZBX_SERVER_HOST=zabbix-server
      - ZBX_SERVER_PORT=10051
      - TZ='Asia/Shanghai'
    ports:
      - "10053:10050"
    restart: always
    privileged: true
For host‑level monitoring, it is recommended to install the native Zabbix agent via yum or binary rather than the containerized agent.

Deploy with docker‑compose

docker-compose -f docker-compose.yml up -d

Check the status with docker-compose ps; all services should be up and listening on the mapped ports.

Access the web UI

Open the mapped port (e.g., http://<em>host‑ip</em>:8088) and log in with the default credentials.

Zabbix Agent on Another Host

If Docker is available on the target host, use a docker‑compose file similar to the one above to run the agent container, adjusting the IP address in the environment variables.

docker run -d \
  --name zabbix-agent \
  -e ZBX_HOSTNAME=172.19.204.201 \
  -e ZBX_SERVER_HOST=172.19.204.200 \
  -e ZBX_SERVER_PORT=10051 \
  -e TZ='Asia/Shanghai' \
  -p 10050:10050 \
  --privileged zabbix/zabbix-agent:latest

If Docker is not installed, install the Zabbix agent via the RPM package as described earlier.

Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

monitoringDockerCentOSDocker ComposeZabbix
Ops Development Stories
Written by

Ops Development Stories

Maintained by a like‑minded team, covering both operations and development. Topics span Linux ops, DevOps toolchain, Kubernetes containerization, monitoring, log collection, network security, and Python or Go development. Team members: Qiao Ke, wanger, Dong Ge, Su Xin, Hua Zai, Zheng Ge, Teacher Xia.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.