5 컨테이너를 통한 설치

개요

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

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

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

사전 요구사항

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

일부 Zabbix 구성 요소는 Docker를 실행하는 호스트에서 특정 포트가 열려 있어야 합니다(예: Zabbix 서버의 경우 10051/TCP, SNMP 트랩의 경우 162/UDP). Zabbix 구성 요소가 사용하는 포트의 전체 목록은 요구사항을 참조하세요. Zabbix 서버와 에이전트의 경우 해당 컨테이너에서 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
웹 서비스 zabbix/zabbix-web-service
SNMP traps zabbix/zabbix-snmptraps

SNMP traps을 사용하려면, SNMP traps 컨테이너가 Zabbix 서버 또는 프록시 컨테이너와 볼륨을 공유해야 합니다(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.0 마이너 릴리스:
docker pull zabbix/zabbix-server-mysql:alpine-7.0-latest

# Alpine Linux에서 Zabbix server (MySQL)의 7.0.1 버전:
docker pull zabbix/zabbix-server-mysql:alpine-7.0.1

Docker Compose

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

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

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

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

2. (선택사항) 환경 변수로 배포를 사용자 정의합니다. 기본 설정을 위해서는 이 단계를 건너뛸 수 있습니다.

3. 기본 설정을 배포합니다—Zabbix 서버, 웹 인터페이스(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 서버가 시작되고 웹 인터페이스는 http://localhost에서 사용할 수 있습니다.

컨테이너 상태를 확인하려면 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 파일을 편집하여 사용할 수 있습니다.

예를 들어, 다음 명령어는 Ubuntu 기반 이미지를 사용하고 (기본 Alpine Linux 대신) 사용자 정의 HTTP (8282) 및 HTTPS (8443) 포트에서 Nginx를 통해 웹 인터페이스를 노출하는 완전한 멀티 컨테이너 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 서버의 패시브 폴러 수와 캐시 설정을 조정하고, 웹 인터페이스 시간대를 구성할 수 있습니다:

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

# env_vars/.env_web
PHP_TZ=Europe/Paris

컴포넌트 수준 환경 변수는 다른 명명 스타일을 사용하여 Zabbix 컴포넌트 구성 매개변수에 해당합니다 (예: ZBX_STARTPOLLERSStartPollers에 해당). 일부 변수는 Docker 전용이며, 일부 구성 매개변수는 변경할 수 없습니다 (예: PIDFileLogType). 환경 변수를 사용할 때는 각 컴포넌트의 Docker Hub Docker 이미지 설명에서 Environment variables 섹션을 참조하세요.

볼륨

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

zbx_env/의 내용은 각 구성 요소의 이미지에 대해 미리 정의되어 있습니다. 예를 들어:

각 볼륨에 대한 자세한 정보는 Docker Hub에서 각 구성 요소의 Docker 이미지 설명의 허용된 볼륨 섹션을 참조하세요.

Makefile

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

# 기본 배포 (Zabbix 서버, 웹 인터페이스, MySQL, 모두 Alpine Linux 기반)
make up

# 사용자 정의 배포 (Zabbix 서버, 사용자 정의 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 서버, 웹 인터페이스, 데이터베이스). 이렇게 하면 설정이 가볍게 유지되고 필요하지 않을 수 있는 구성요소를 시작하는 것을 방지합니다. 추가 구성요소를 포함하려면 다음 Compose 프로파일을 사용할 수 있습니다:

# 기본 배포 + Zabbix 에이전트, Java 게이트웨이, 웹 서비스, SNMP 트랩:
make up COMPOSE_PROFILES=full

# COMPOSE_PROFILES=full + Zabbix 프록시 (MySQL 및 SQLite3):
make up COMPOSE_PROFILES=all

Docker (수동 배포)

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

예를 들어, Zabbix 프록시를 배포하려면 다음 명령을 실행하세요:

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.0-latest

Zabbix (7.0.0-7.0.2)는 컨테이너에서 PID1/init 프로세스로 실행되어서는 안 됩니다.

이 명령은:

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

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

  • ZBX_SERVER_HOST 환경 변수를 통해 Zabbix 프록시 Server 매개변수를 구성합니다. 이 매개변수는 프록시가 구성 데이터를 검색하고 수집된 데이터를 전송할 Zabbix 서버의 IP 주소를 지정합니다. 액티브 프록시 작동에 필요한 다른 변수들은 기본값을 사용하므로 생략할 수 있습니다.

환경 변수는 다른 명명 스타일을 사용하여 Zabbix 구성 요소 구성 매개변수에 해당합니다(예: ZBX_SERVER_HOSTServer에 해당). 일부 변수는 Docker 전용이며, 일부 구성 매개변수는 변경할 수 없습니다(예: PIDFileLogType). 환경 변수를 사용할 때는 Docker Hub에서 각 구성 요소의 Docker 이미지 설명에 있는 Environment variables 섹션을 참조하세요.

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

각 볼륨에 대한 자세한 정보는 Docker Hub에서 각 구성 요소의 Docker 이미지 설명에 있는 Allowed volumes 섹션을 참조하세요.

Zabbix 프록시 컨테이너 배포 후, Zabbix 웹 인터페이스에서 프록시를 추가하고 이 프록시에서 모니터링할 호스트를 구성할 수 있습니다.

아래 예제는 3가지 추가 배포 시나리오를 다룹니다:

  • Java 게이트웨이가 있는 Zabbix 서버 (MySQL)
  • SNMP 트랩이 있는 Zabbix 서버 (PostgreSQL)
  • RHEL 8–10에서 Java 게이트웨이가 있는 Zabbix 서버 (MySQL)

더 많은 예제는 Docker Hub에서 각 구성 요소의 Docker 이미지 설명을 참조하세요.

Java 게이트웨이와 함께 Zabbix 서버 (MySQL) 배포

이 예제는 MySQL 백엔드, JMX 모니터링을 위한 Java 게이트웨이, 그리고 Nginx 기반 웹 인터페이스와 함께 Zabbix 서버를 배포하는 방법을 보여줍니다.

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

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

2. 빈 MySQL 서버 컨테이너를 실행합니다 (zabbix_pwdroot_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 게이트웨이 컨테이너를 실행합니다:

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

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

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

6. Zabbix 서버 컨테이너를 실행하고 Java 게이트웨이 및 MySQL 서버 컨테이너에 연결합니다:

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.0-latest

7. Zabbix 서버 로그를 따라가며 Zabbix 서버가 데이터베이스 스키마 초기화를 완료할 때까지 기다립니다 (Ctrl+C를 사용하여 로그를 종료하세요):

docker logs -f zabbix-server-mysql

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

8. MySQL 서버 컨테이너에서 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 서버 및 MySQL 서버 컨테이너에 연결합니다:

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.0-latest

컨테이너가 실행되면 Zabbix 서버가 시작되고 웹 인터페이스는 http://localhost에서 사용할 수 있습니다.

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

SNMP 트랩을 포함한 Zabbix 서버(PostgreSQL) 배포

이 예제는 PostgreSQL 백엔드, SNMP 트랩, 그리고 Nginx 기반 웹 인터페이스를 포함한 Zabbix 서버를 배포하는 방법을 보여줍니다.

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

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

2. 빈 PostgreSQL 서버 컨테이너를 실행합니다 (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.0-latest

4. Zabbix 서버 컨테이너를 실행하고 PostgreSQL 서버 및 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.0-latest

5. Zabbix 서버 로그를 확인하고 Zabbix 서버가 데이터베이스 스키마 초기화를 완료할 때까지 기다립니다 (로그에서 나가려면 Ctrl+C를 사용하세요):

docker logs -f zabbix-server-pgsql

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

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

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.0-latest

컨테이너가 실행되고 나면 Zabbix 서버가 시작되고 웹 인터페이스는 http://localhost에서 접근할 수 있습니다.

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

RHEL 8–10에서 Java gateway와 함께 Zabbix server (MySQL) 배포

이 예제는 MySQL 백엔드, JMX 모니터링을 위한 Java gateway, 그리고 Nginx 기반 웹 인터페이스를 포함한 Zabbix server를 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-70:latest

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

mkdir -p ./mysql

4. 빈 MySQL server 컨테이너를 실행합니다 (zabbix_pwdroot_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-70

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-70

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-70

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

컨테이너들이 실행되면 Zabbix server가 시작되고 웹 인터페이스는 http://localhost에서 사용할 수 있습니다.

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