컨테이너 설치

Zabbix v7.4번역일: 2026-09-09원본 보기

개요

이 페이지에서는 Docker 또는 Docker Compose를 사용하여 Zabbix를 배포하는 방법을 설명합니다.

Docker Compose는 Zabbix를 배포하는 가장 빠른 방법입니다. 설정 파일을 읽어 완전한 Zabbix 구성을 이루는 모든 컨테이너를 올바른 순서로 자동으로 시작합니다.

Docker(수동 배포)는 각 구성 요소를 단계별로 배포하여 동일한 결과를 얻습니다.

사전 요구 사항

시작하기 전에 시스템에 Docker(1.12.0 이상)가 설치되어 있는지 확인하세요. 설치되어 있지 않다면 Docker 설치 가이드를 따르세요. Docker Compose 배포의 경우 Docker Compose(2.24.0 이상)도 필요합니다.

일부 Zabbix 구성 요소는 Docker를 실행하는 호스트에서 특정 포트가 열려 있어야 합니다(예: Zabbix server의 경우 10051/TCP, SNMP 트랩의 경우 162/UDP). Zabbix 구성 요소가 사용하는 전체 포트 목록은 요구 사항을 참고하세요. Zabbix server와 agent의 경우 해당 컨테이너에 ZBX_LISTENPORT 환경 변수를 설정하여 기본 포트를 변경할 수 있습니다.

사용 가능한 Docker 이미지

Zabbix는 각 Zabbix 구성 요소별로 Docker 이미지를 제공하며, 모두 Docker Hub에 게시되어 있습니다. 각 이미지는 해당 구성 요소를 실행하는 컨테이너를 생성하는 데 사용됩니다.

Zabbix 구성 요소 Docker 이미지
Agent zabbix/zabbix-agent
Agent 2 zabbix/zabbix-agent2
Server(MySQL) zabbix/zabbix-server-mysql
Server(PostgreSQL) zabbix/zabbix-server-pgsql
웹 인터페이스(Apache + MySQL) zabbix/zabbix-web-apache-mysql
웹 인터페이스(Apache + PostgreSQL) zabbix/zabbix-web-apache-pgsql
웹 인터페이스(Nginx + MySQL) zabbix/zabbix-web-nginx-mysql
웹 인터페이스(Nginx + PostgreSQL) zabbix/zabbix-web-nginx-pgsql
Proxy(SQLite3) zabbix/zabbix-proxy-sqlite3
Proxy(MySQL) zabbix/zabbix-proxy-mysql
Java gateway zabbix/zabbix-java-gateway
Web service zabbix/zabbix-web-service
SNMP 트랩 zabbix/zabbix-snmptraps

SNMP 트랩을 사용하려면 SNMP 트랩 컨테이너가 Zabbix server 또는 proxy 컨테이너와 볼륨을 공유해야 합니다(Docker Hub의 이 이미지 사용 방법과 아래 예시를 참고하세요).

Docker Hub의 모든 Zabbix 구성 요소 이미지는 지원되는 운영체제의 최신 메이저 버전을 기반으로 합니다. 이러한 이미지는 기반이 되는 OS 이미지가 업데이트될 때 자동으로 다시 빌드됩니다.

이미지 태그

각 이미지는 기본 운영체제와 Zabbix 버전을 선택할 수 있는 태그를 지원합니다:

zabbix/<image>:<os>-<version>

지원되는 <os> 값:

  • alpine - Alpine Linux
  • ubuntu - Ubuntu
  • centos - CentOS Stream
  • ol - Oracle Linux
  • ltsc2022 - Windows 11 LTSC 2022(Zabbix agent 전용)

지원되는 <version> 값:

  • latest - Alpine Linux 기반 최신 안정 Zabbix 버전
  • <os>-latest - 선택한 OS 기반 최신 안정 Zabbix 버전
  • <os>-trunk - 선택한 OS 기반 최신 개발(nightly) 빌드
  • <os>-X.X-latest - 선택한 OS에서 특정 Zabbix 메이저 버전의 최신 마이너 릴리스
  • <os>-X.X.* - 선택한 OS에서 특정 Zabbix 마이너 릴리스

예시:

# Alpine Linux 기반 최신 안정 Zabbix proxy(SQLite3):
docker pull zabbix/zabbix-proxy-sqlite3:latest

# Ubuntu 기반 최신 안정 Zabbix proxy(SQLite3):
docker pull zabbix/zabbix-proxy-sqlite3:ubuntu-latest

# Ubuntu 기반 Zabbix server(MySQL)의 최신 개발(nightly) 빌드:
docker pull zabbix/zabbix-server-mysql:ubuntu-trunk

# Alpine Linux 기반 Zabbix server(MySQL)의 최신 7.4 마이너 릴리스:
docker pull zabbix/zabbix-server-mysql:alpine-7.4-latest

# Alpine Linux 기반 Zabbix server(MySQL) 버전 7.4.1:
docker pull zabbix/zabbix-server-mysql:alpine-7.4.1

Docker Compose

Docker Compose는 Zabbix를 배포하는 가장 빠른 방법입니다. 설정 파일(Compose 파일)을 읽어 Docker 이미지 가져오기, 컨테이너 간 내부 네트워크 생성, 스토리지 설정, 데이터베이스 초기화, 올바른 순서로 전체 시작까지 전체 설정을 처리합니다.

공식 Zabbix Dockerfiles 저장소는 바로 사용할 수 있는 Docker Compose 파일과 다양한 운영체제, 데이터베이스 백엔드, Zabbix 구성 요소 설정을 지원하는 .env 기반 설정 시스템을 제공합니다.

1. 저장소를 클론하고 해당 디렉터리로 이동한 후 버전 7.4로 전환합니다:

git clone https://github.com/zabbix/zabbix-docker.git
cd zabbix-docker
git checkout 7.4

2. (선택 사항) 환경 변수를 사용하여 배포를 커스터마이징합니다. 기본 설정을 사용하려면 이 단계를 건너뛸 수 있습니다.

3. 기본 설정을 배포합니다 - Zabbix server, 웹 인터페이스(Nginx에서 실행), 데이터베이스 백엔드(MySQL 또는 PostgreSQL)가 각각 Alpine Linux에서 별도의 컨테이너로 실행됩니다.

# 데이터베이스로 MySQL을 사용하는 경우:
docker compose -f ./compose.yaml up -d

# 데이터베이스로 PostgreSQL을 사용하는 경우:
docker compose -f ./compose_pgsql.yaml up -d

컨테이너가 실행되면(일반적으로 1~3분 이내) Zabbix server가 시작되고 웹 인터페이스에서 로그인할 수 있게 됩니다.

docker compose ps로 컨테이너 상태를 확인하세요. zabbix-docker-server-db-init-1 컨테이너를 제외한 모든 컨테이너는 Up 상태여야 합니다. Exited로 표시되는 컨테이너가 있다면 docker logs -f <container-name>으로 로그에서 오류를 확인하세요.

환경 변수

Docker Compose 동작과 Zabbix 구성 요소 설정 모두 환경 변수를 사용하여 커스터마이징할 수 있습니다.

Compose 레벨 변수(.env 파일에 정의됨)는 사용할 Docker 이미지, 포트, 네트워크 IP 범위를 제어합니다. 이러한 변수는 docker compose 명령 앞에 인라인으로 사용하거나 .env 파일을 편집하여 사용할 수 있습니다.

예를 들어 다음 명령은 (기본값인 Alpine Linux 대신) Ubuntu 기반 이미지를 사용하고 웹 인터페이스를 Nginx를 통해 커스텀 HTTP(8282)와 HTTPS(8443) 포트로 노출하는 완전한 다중 컨테이너 Zabbix 설정을 배포합니다:

OS=ubuntu \
ZABBIX_WEB_NGINX_HTTP_PORT=8282 \
ZABBIX_WEB_NGINX_HTTPS_PORT=8443 \
docker compose -f ./compose.yaml up -d

구성 요소 레벨 변수(env_vars/.env_<component> 파일에 정의됨)는 Zabbix 구성 요소 설정을 제어합니다. docker compose 명령을 실행하기 전에 해당 .env_<component> 파일을 편집하세요.

예를 들어 다음 변수를 편집하여 Zabbix server의 passive poller 수와 캐시 설정을 조정하고 웹 인터페이스 시간대를 설정할 수 있습니다:

# env_vars/.env_srv
ZBX_STARTPOLLERS=20
ZBX_CACHESIZE=64M
ZBX_HISTORYCACHESIZE=32M

# env_vars/.env_web
PHP_TZ=Europe/Paris

구성 요소 레벨 환경 변수는 다른 명명 방식을 사용하는 Zabbix 구성 요소 설정 매개변수에 대응됩니다(예: ZBX_STARTPOLLERS는 StartPollers에 대응). 일부 변수는 Docker 전용이며, 일부 설정 매개변수는 변경할 수 없습니다(예: PIDFile과 LogType). 환경 변수를 사용할 때는 Docker Hub의 각 구성 요소 Docker 이미지 설명에 있는 Environment variables 섹션을 참고하세요.

볼륨

Docker Compose는 Compose 파일과 함께 생성된 zbx_env/ 디렉터리에 영구 데이터를 저장합니다. 이 디렉터리는 컨테이너 재시작 및 업데이트 시에도 구성 요소 데이터를 보존합니다.

zbx_env/의 내용은 각 구성 요소 이미지별로 미리 정의되어 있습니다. 예:

각 볼륨에 대한 자세한 내용은 Docker Hub의 각 구성 요소 Docker 이미지 설명에 있는 Allowed volumes 섹션을 참고하세요.

Makefile

Zabbix Dockerfiles 저장소는 일반적인 Docker Compose 작업을 위한 단축 수단으로 Makefile도 제공합니다. 전체 docker compose 명령 대신 더 짧은 make 명령을 사용할 수 있습니다(사용 가능한 옵션을 보려면 make help를 실행하세요):

# 기본 배포(Zabbix server, 웹 인터페이스, MySQL, 모두 Alpine Linux에서 실행)
make up

# 커스텀 배포(Zabbix server, 커스텀 Nginx 포트를 사용하는 웹 인터페이스, PostgreSQL, 모두 Ubuntu에서 실행)
make up \
  OS=ubuntu \
  DB=pgsql \
  ZABBIX_WEB_NGINX_HTTP_PORT=8282 \
  ZABBIX_WEB_NGINX_HTTPS_PORT=8443

컨테이너를 중지하거나 제거할 때는 항상 배포에 사용한 것과 동일한 데이터베이스 유형을 지정하세요(예: make down DB=pgsql).

기본적으로 make up은 최소한의 서비스 세트(Zabbix server, 웹 인터페이스, 데이터베이스)만 시작합니다. 이렇게 하면 설정을 가볍게 유지하고 필요하지 않을 수 있는 구성 요소의 시작을 피할 수 있습니다. 추가 구성 요소를 포함하려면 다음 Compose 프로필을 사용할 수 있습니다:

# 기본 배포 + Zabbix agent, Java gateway, web service, SNMP 트랩:
make up COMPOSE_PROFILES=full

# COMPOSE_PROFILES=full + Zabbix proxy(MySQL 및 SQLite3):
make up COMPOSE_PROFILES=all

Docker(수동 배포)

Zabbix를 단계별로 배포하거나 개별 구성 요소를 실행하거나 기존 환경과 통합하거나 Podman과 같은 대체 컨테이너 런타임을 사용하려는 경우 수동 배포를 사용하세요.

예를 들어 Zabbix proxy를 배포하려면 다음 명령을 실행합니다:

docker run --name zabbix-proxy-sqlite3 \
  -e ZBX_SERVER_HOST=192.0.2.1 \
  -e ZBX_PROXYMODE=0 \
  -e ZBX_HOSTNAME=zabbix-proxy-sqlite3 \
  -v zabbix-proxy-data:/var/lib/zabbix/db_data \
  --init \
  -d \
  zabbix/zabbix-proxy-sqlite3:alpine-7.4-latest

이 명령은 다음을 수행합니다:

  • zabbix/zabbix-proxy-sqlite3:alpine-7.4-latest Docker 이미지를 가져옵니다.

  • Docker 이미지를 기반으로 zabbix-proxy-sqlite3 컨테이너를 생성하고 시작합니다(--init 및 -d 플래그 사용).

  • ZBX_SERVER_HOST 환경 변수를 통해 Zabbix proxy의 Server 매개변수를 설정합니다. 이 매개변수는 proxy가 설정 데이터를 가져오고 수집한 데이터를 전송할 Zabbix server의 IP 주소를 지정합니다. active proxy 동작에 필요한 다른 변수는 기본값을 사용하며 생략할 수 있습니다.

환경 변수는 다른 명명 방식을 사용하는 Zabbix 구성 요소 설정 매개변수에 대응됩니다(예: ZBX_SERVER_HOST는 Server에 대응). 일부 변수는 Docker 전용이며, 일부 설정 매개변수는 변경할 수 없습니다(예: PIDFile과 LogType). 환경 변수를 사용할 때는 Docker Hub의 각 구성 요소 Docker 이미지 설명에 있는 Environment variables 섹션을 참고하세요.

  • Docker가 관리하는 스토리지 위치(예: /var/lib/docker/volumes/zabbix-proxy-data/)를 컨테이너의 /var/lib/zabbix 디렉터리에 연결하여 컨테이너가 제거되더라도 Zabbix proxy 데이터가 영구적으로 저장되도록 합니다.

각 볼륨에 대한 자세한 내용은 Docker Hub의 각 구성 요소 Docker 이미지 설명에 있는 Allowed volumes 섹션을 참고하세요.

Zabbix proxy 컨테이너를 배포한 후에는 Zabbix 웹 인터페이스에서 proxy를 추가하고 이 proxy로 모니터링할 호스트를 설정할 수 있습니다.

아래 예시에서는 세 가지 추가 배포 시나리오를 다룹니다:

  • Java gateway를 사용하는 Zabbix server(MySQL)
  • SNMP 트랩을 사용하는 Zabbix server(PostgreSQL)
  • RHEL 8~10에서 Java gateway를 사용하는 Zabbix server(MySQL)

더 많은 예시는 Docker Hub의 각 구성 요소 Docker 이미지 설명을 참고하세요.

Java gateway를 사용하는 Zabbix server(MySQL) 배포

이 예시에서는 MySQL 백엔드를 사용하는 Zabbix server, JMX 모니터링을 위한 Java gateway, Nginx 기반 웹 인터페이스를 배포하는 방법을 보여줍니다.

1. 모든 Zabbix 구성 요소 컨테이너가 컨테이너 이름으로 서로 접근할 수 있도록 전용 Docker 네트워크를 생성합니다:

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

2. 빈 MySQL server 컨테이너를 실행합니다(zabbix_pwd와 root_pwd를 강력한 비밀번호로 바꾸고, 다음 단계에서 그 값을 사용하세요):

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" \
  --network=zabbix-net \
  --restart unless-stopped \
  -d mysql:8.0-oracle \
  --character-set-server=utf8mb4 --collation-server=utf8mb4_bin

3. MySQL 로그를 확인하며 MySQL이 연결을 받을 준비가 될 때까지 기다립니다(로그를 종료하려면 Ctrl+C를 사용하세요):

docker logs -f mysql-server

# ... [Server] /usr/sbin/mysqld: ready for connections. ...

4. Zabbix Java gateway 컨테이너를 실행합니다:

docker run --name zabbix-java-gateway -t \
  --network=zabbix-net \
  --restart unless-stopped \
  -d zabbix/zabbix-java-gateway:alpine-7.4-latest

5. MySQL server 컨테이너에서 log_bin_trust_function_creators를 활성화합니다. 이는 저장 함수에 대한 보안 제한을 일시적으로 완화하는 것이며, 이후 단계에서 다시 비활성화됩니다. 이를 통해 바이너리 로깅이 활성화되어 있을 때(MySQL 8.0부터 기본값) MySQL이 요구하는 SUPER 권한 없이도 Zabbix 데이터베이스 사용자가 저장 함수를 생성할 수 있습니다. 다음 명령을 실행하세요:

docker exec -it mysql-server mysql -u root -p'root_pwd' \
  -e "SET GLOBAL log_bin_trust_function_creators = 1;"

6. Zabbix server 컨테이너를 실행하고 Java Gateway 및 MySQL server 컨테이너와 연결합니다:

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 ZBX_JAVAGATEWAY="zabbix-java-gateway" \
  --network=zabbix-net \
  -p 10051:10051 \
  --restart unless-stopped \
  --init \
  -d zabbix/zabbix-server-mysql:alpine-7.4-latest

7. Zabbix server 로그를 확인하며 Zabbix server가 데이터베이스 스키마 초기화를 마칠 때까지 기다립니다(로그를 종료하려면 Ctrl+C를 사용하세요):

docker logs -f zabbix-server-mysql

# ... [info]: ** Creating 'zabbix' schema in MySQL
# ... [info]: ** Database schema successfully created!

8. MySQL server 컨테이너에서 log_bin_trust_function_creators를 비활성화합니다. 이는 SUPER 권한이 없는 사용자가 저장 함수를 생성하지 못하도록 하는 보안 제한을 다시 적용하는 것입니다. 다음 명령을 실행하세요:

docker exec -it mysql-server mysql -u root -p'root_pwd' \
  -e "SET GLOBAL log_bin_trust_function_creators = 0;"

9. Zabbix 웹 인터페이스 컨테이너를 실행하고 Zabbix server 및 MySQL server 컨테이너와 연결합니다:

docker run --name zabbix-web-nginx-mysql -t \
  -e ZBX_SERVER_HOST="zabbix-server-mysql" \
  -e DB_SERVER_HOST="mysql-server" \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix_pwd" \
  -e PHP_TZ="Europe/Riga" \
  --network=zabbix-net \
  -p 80:8080 \
  --restart unless-stopped \
  -d zabbix/zabbix-web-nginx-mysql:alpine-7.4-latest

컨테이너가 실행되면 Zabbix server가 시작되고 웹 인터페이스에서 로그인할 수 있게 됩니다.

docker ps로 컨테이너 상태를 확인하세요. 모든 컨테이너는 Up 상태여야 합니다. Exited로 표시되는 컨테이너가 있다면 docker logs -f <container-name>으로 로그에서 오류를 확인하세요.

SNMP 트랩을 사용하는 Zabbix server(PostgreSQL) 배포

이 예시에서는 PostgreSQL 백엔드를 사용하는 Zabbix server, SNMP 트랩, Nginx 기반 웹 인터페이스를 배포하는 방법을 보여줍니다.

1. 모든 Zabbix 구성 요소 컨테이너가 컨테이너 이름으로 서로 접근할 수 있도록 전용 Docker 네트워크를 생성합니다:

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

2. 빈 PostgreSQL server 컨테이너를 실행합니다(zabbix_pwd를 강력한 비밀번호로 바꾸고, 다음 단계에서 그 값을 사용하세요):

docker run --name postgres-server -t \
  -e POSTGRES_USER="zabbix" \
  -e POSTGRES_PASSWORD="zabbix_pwd" \
  -e POSTGRES_DB="zabbix" \
  --network=zabbix-net \
  --restart unless-stopped \
  -d postgres:latest

3. Zabbix SNMP 트랩 컨테이너를 실행합니다:

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 \
  --network=zabbix-net \
  -p 162:1162/udp \
  --restart unless-stopped \
  -d zabbix/zabbix-snmptraps:alpine-7.4-latest

4. Zabbix server 컨테이너를 실행하고 PostgreSQL server 및 SNMP 트랩 컨테이너와 연결합니다:

docker run --name zabbix-server-pgsql -t \
  -e DB_SERVER_HOST="postgres-server" \
  -e POSTGRES_USER="zabbix" \
  -e POSTGRES_PASSWORD="zabbix_pwd" \
  -e POSTGRES_DB="zabbix" \
  -e ZBX_ENABLE_SNMP_TRAPS="true" \
  --network=zabbix-net \
  -p 10051:10051 \
  --volumes-from zabbix-snmptraps \
  --restart unless-stopped \
  --init \
  -d zabbix/zabbix-server-pgsql:alpine-7.4-latest

5. Zabbix server 로그를 확인하며 Zabbix server가 데이터베이스 스키마 초기화를 마칠 때까지 기다립니다(로그를 종료하려면 Ctrl+C를 사용하세요):

docker logs -f zabbix-server-pgsql

# ... [info]: ** Creating 'zabbix' schema in PostgreSQL
# ... [info]: ** Database schema successfully created!

6. Zabbix 웹 인터페이스 컨테이너를 실행하고 Zabbix server 및 PostgreSQL server 컨테이너와 연결합니다:

docker run --name zabbix-web-nginx-pgsql -t \
  -e ZBX_SERVER_HOST="zabbix-server-pgsql" \
  -e DB_SERVER_HOST="postgres-server" \
  -e POSTGRES_DB="zabbix" \
  -e POSTGRES_USER="zabbix" \
  -e POSTGRES_PASSWORD="zabbix_pwd" \
  -e PHP_TZ="Europe/Riga" \
  --network=zabbix-net \
  -p 443:8443 \
  -p 80:8080 \
  -v /etc/ssl/nginx:/etc/ssl/nginx:ro \
  --restart unless-stopped \
  -d zabbix/zabbix-web-nginx-pgsql:alpine-7.4-latest

컨테이너가 실행되면 Zabbix server가 시작되고 웹 인터페이스에서 로그인할 수 있게 됩니다.

docker ps로 컨테이너 상태를 확인하세요. 모든 컨테이너는 Up 상태여야 합니다. Exited로 표시되는 컨테이너가 있다면 docker logs -f <container-name>으로 로그에서 오류를 확인하세요.

RHEL 8~10에서 Java gateway를 사용하는 Zabbix server(MySQL) 배포

이 예시에서는 MySQL 백엔드를 사용하는 Zabbix server, JMX 모니터링을 위한 Java gateway, Nginx 기반 웹 인터페이스를 모두 Red Hat Enterprise Linux 8, 9, 10에서 배포하는 방법을 보여줍니다.

Red Hat Enterprise Linux에서는 Docker 대신 Podman을 컨테이너 런타임으로 사용하는 것이 권장됩니다. Podman은 Docker와 유사하게 동작하지만 root로 실행되는 백그라운드 서비스가 필요하지 않아 Red Hat 환경에 더 적합합니다.

1. zabbix라는 이름의 새 pod를 생성하고 Zabbix 웹 인터페이스와 Zabbix server trapper용 포트를 노출합니다:

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

2. (선택 사항) zabbix pod 위치에서 Zabbix agent 컨테이너를 실행합니다:

podman run --name zabbix-agent \
  -e ZBX_SERVER_HOST="127.0.0.1,localhost" \
  --restart=always \
  --pod=zabbix \
  -d registry.connect.redhat.com/zabbix/zabbix-agent-74:latest

3. RHEL 호스트에 ./mysql/ 디렉터리를 생성합니다:

mkdir -p ./mysql

4. 빈 MySQL server 컨테이너를 실행합니다(zabbix_pwd와 root_pwd를 강력한 비밀번호로 바꾸고, 다음 단계에서 그 값을 사용하세요):

podman run --name mysql-server -t \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix_pwd" \
  -e MYSQL_ROOT_PASSWORD="root_pwd" \
  -v ./mysql/:/var/lib/mysql/:Z \
  --restart=always \
  --pod=zabbix \
  -d mysql:8.0 \
  --character-set-server=utf8mb4 --collation-server=utf8mb4_bin

5. MySQL 로그를 확인하며 MySQL이 연결을 받을 준비가 될 때까지 기다립니다(로그를 종료하려면 Ctrl+C를 사용하세요):

podman logs -f mysql-server

# ... [Server] /usr/sbin/mysqld: ready for connections. ...

6. Zabbix Java gateway 컨테이너를 실행합니다:

podman run --name zabbix-java-gateway -t \
  --restart=always \
  --pod=zabbix \
  -d registry.connect.redhat.com/zabbix/zabbix-java-gateway-74

7. MySQL server 컨테이너에서 log_bin_trust_function_creators를 활성화합니다. 이는 저장 함수에 대한 보안 제한을 일시적으로 완화하는 것이며, 이후 단계에서 다시 비활성화됩니다. 이를 통해 바이너리 로깅이 활성화되어 있을 때(MySQL 8.0부터 기본값) MySQL이 요구하는 SUPER 권한 없이도 Zabbix 데이터베이스 사용자가 저장 함수를 생성할 수 있습니다. 다음 명령을 실행하세요:

podman exec -it mysql-server mysql -u root -p'root_pwd' \
  -e "SET GLOBAL log_bin_trust_function_creators = 1;"

8. Zabbix server 컨테이너를 실행하고 Java Gateway 및 MySQL server 컨테이너와 연결합니다:

podman run --name zabbix-server-mysql -t \
  -e DB_SERVER_HOST="127.0.0.1" \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix_pwd" \
  -e ZBX_JAVAGATEWAY="127.0.0.1" \
  --restart=always \
  --init \
  --pod=zabbix \
  -d registry.connect.redhat.com/zabbix/zabbix-server-mysql-74

9. Zabbix server 로그를 확인하며 Zabbix server가 데이터베이스 스키마 초기화를 마칠 때까지 기다립니다(로그를 종료하려면 Ctrl+C를 사용하세요):

podman logs -f zabbix-server-mysql

# ... [info]: ** Creating 'zabbix' schema in MySQL
# ... [info]: ** Database schema successfully created!

10. MySQL server 컨테이너에서 log_bin_trust_function_creators를 비활성화합니다. 이는 SUPER 권한이 없는 사용자가 저장 함수를 생성하지 못하도록 하는 보안 제한을 다시 적용하는 것입니다. 다음 명령을 실행하세요:

podman exec -it mysql-server mysql -u root -p'root_pwd' \
  -e "SET GLOBAL log_bin_trust_function_creators = 0;"

11. Zabbix 웹 인터페이스 컨테이너를 실행하고 Zabbix server 및 MySQL server 컨테이너와 연결합니다:

podman run --name zabbix-web-mysql -t \
  -e ZBX_SERVER_HOST="127.0.0.1" \
  -e DB_SERVER_HOST="127.0.0.1" \
  -e MYSQL_DATABASE="zabbix" \
  -e MYSQL_USER="zabbix" \
  -e MYSQL_PASSWORD="zabbix_pwd" \
  -e PHP_TZ="Europe/Riga" \
  --restart=always \
  --pod=zabbix \
  -d registry.connect.redhat.com/zabbix/zabbix-web-mysql-74

Pod zabbix는 zabbix-web-mysql 컨테이너의 8080/TCP에서 호스트 머신으로 80/TCP 포트(HTTP)를 노출합니다.

컨테이너가 실행되면 Zabbix server가 시작되고 웹 인터페이스에서 로그인할 수 있게 됩니다.

docker ps로 컨테이너 상태를 확인하세요. 모든 컨테이너는 Up 상태여야 합니다. Exited로 표시되는 컨테이너가 있다면 docker logs -f <container-name>으로 로그에서 오류를 확인하세요.