コンテナからのインストール

概要

このページでは、DockerまたはDocker Composeを使用してZabbixをデプロイする方法について説明します。

Docker Compose は、Zabbixをデプロイする最も手早い方法です。 設定ファイルを読み取り、完全なZabbix環境を構成するすべてのコンテナを正しい順序で自動的に起動します。

Docker(手動デプロイ) では、各コンポーネントを段階的にデプロイすることで、同じ結果を実現します。

Zabbix 6.0以降では、決定論的トリガーはインストール中に作成する必要があります。 MySQL/MariaDBでバイナリログが有効になっている場合、これにはスーパーユーザー権限、または変数/設定パラメータ log_bin_trust_function_creators = 1 の設定が必要です。 変数の設定方法については、データベース作成スクリプト を参照してください。

コンソールから実行する場合、この変数は一時的にのみ設定され、Dockerが再起動されると失われることに注意してください。 この場合は、SQLサービスは実行したままにし、docker compose down zabbix-server を実行して zabbix-server サービスのみを停止し、その後 docker compose up -d zabbix-server を実行してください。

または、この変数を設定ファイルで設定することもできます。

前提条件

開始する前に、システムにDocker(1.12.0以降)がインストールされていることを確認してください。 インストールされていない場合は、Docker installation guide に従ってください。 Docker Composeによるデプロイでは、Docker Compose(2.24.0以降)も必要です。

一部のZabbixコンポーネントでは、Dockerを実行しているホスト上で特定のポートが開放されている必要があります(例:Zabbixサーバーでは10051/TCP、SNMPトラップでは162/UDP)。 Zabbixコンポーネントで使用されるポートの完全な一覧については、Requirements を参照してください。 Zabbixサーバーおよびエージェントでは、それぞれのコンテナで環境変数 ZBX_LISTENPORT を設定することで、デフォルトのポートを変更できます。

利用可能なDockerイメージ

Zabbixは各Zabbixコンポーネント向けのDockerイメージを提供しており、すべてDocker Hubで公開されています。 各イメージは、そのコンポーネントを実行するコンテナの作成に使用されます。

Zabbixコンポーネント Dockerイメージ
エージェント zabbix/zabbix-agent
エージェント 2 zabbix/zabbix-agent2
サーバー (MySQL) zabbix/zabbix-server-mysql
サーバー (PostgreSQL) zabbix/zabbix-server-pgsql
Webインターフェース (Apache + MySQL) zabbix/zabbix-web-apache-mysql
Webインターフェース (Apache + PostgreSQL) zabbix/zabbix-web-apache-pgsql
Webインターフェース (Nginx + MySQL) zabbix/zabbix-web-nginx-mysql
Webインターフェース (Nginx + PostgreSQL) zabbix/zabbix-web-nginx-pgsql
プロキシ (SQLite3) zabbix/zabbix-proxy-sqlite3
プロキシ (MySQL) zabbix/zabbix-proxy-mysql
Javaゲートウェイ zabbix/zabbix-java-gateway
Webサービス zabbix/zabbix-web-service
SNMPトラップ zabbix/zabbix-snmptraps

SNMPトラップを使用するには、SNMPトラップコンテナが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 エージェントのみ)

サポートされている <version> の値:

  • latest - Alpine Linux上の最新の安定版Zabbixバージョン
  • <os>-latest - 選択したOS上の最新の安定版Zabbixバージョン
  • <os>-trunk - 選択したOS上の最新の開発版(nightly)ビルド
  • <os>-X.X-latest - 選択したOS上の特定のZabbixメジャーバージョンにおける最新のZabbixマイナーリリース
  • <os>-X.X.* - 選択したOS上の特定のZabbixマイナーリリース

例:

# Alpine Linux上の最新の安定版Zabbix プロキシ(SQLite3):
docker pull zabbix/zabbix-proxy-sqlite3:latest

# Ubuntu上の最新の安定版Zabbix プロキシ(SQLite3):
docker pull zabbix/zabbix-proxy-sqlite3:ubuntu-latest

# Ubuntu上のZabbix サーバー(MySQL)の最新の開発版(nightly)ビルド:
docker pull zabbix/zabbix-server-mysql:ubuntu-trunk

# Alpine Linux上のZabbix サーバー(MySQL)の最新の8.0マイナーリリース:
docker pull zabbix/zabbix-server-mysql:alpine-8.0-latest

# Alpine Linux上のZabbix サーバー(MySQL)バージョン8.0.1:
docker pull zabbix/zabbix-server-mysql:alpine-8.0.1

Docker Compose

Docker Composeは、Zabbixをデプロイする最も手早い方法です。
設定ファイル(Composeファイル)を読み取り、Dockerイメージの取得、コンテナ間の内部ネットワークの作成、ストレージの設定、データベースの初期化、そして正しい順序ですべてを起動するといったセットアップ全体を処理します。

official Zabbix Dockerfiles リポジトリでは、すぐに使用できるDocker Composeファイルと、さまざまなオペレーティングシステム、データベースバックエンド、Zabbixコンポーネントの設定に対応した .env ベースの設定システムを提供しています。

1. リポジトリをクローンし、そのディレクトリに移動して、バージョン8.0に切り替えます。

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

2. (任意)環境変数 を使用してデプロイをカスタマイズします。
デフォルト設定を使用する場合、この手順は省略できます。

3. デフォルト構成をデプロイします。Alpine Linux上のそれぞれ独立したコンテナで動作する、Zabbixサーバー、Webインターフェース(Nginx上で動作)、およびデータベースバックエンド(MySQLまたはPostgreSQL)です。

# データベースにMySQLを使用する場合:
docker compose -f ./compose.yaml up -d

# データベースにPostgreSQLを使用する場合:
docker compose -f ./compose_pgsql.yaml up -d

コンテナが起動して実行状態になると(通常は1~3分以内)、Zabbixサーバーが起動し、Webインターフェースは http://localhost で利用可能になります。

コンテナの状態を確認するには docker compose ps を使用してください。
すべてのコンテナ(zabbix-docker-server-db-init-1 コンテナを除く)は、Up ステータスになっている必要があります。
いずれかが Exited と表示される場合は、docker logs <container-name> でログを確認してください。

環境変数

Docker Composeの動作とZabbixコンポーネントの設定は、どちらも環境変数を使用してカスタマイズできます。

Composeレベルの変数.env file で定義)は、使用するDockerイメージ、ポート、ネットワークIP範囲を制御します。
これらの変数は docker compose コマンドの前にインラインで指定することも、.env file を編集することもできます。

たとえば、次のコマンドは、Ubuntuベースのイメージ(デフォルトのAlpine Linuxではなく)を使用し、Nginx経由でWebインターフェースをカスタム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> file を編集してください。

たとえば、次の変数を編集することで、Zabbixサーバーのパッシブポーラー数とキャッシュ設定を調整し、Webインターフェースのタイムゾーンを設定できます。

# 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固有であり、変更できない設定パラメータもあります(例: PIDFile および LogType)。
環境変数を使用する場合は、Docker Hub にある各コンポーネントの Docker image 説明内の 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サーバー、Webインターフェース、MySQL、すべてAlpine Linux上)
make up

# カスタムデプロイメント(Zabbixサーバー、カスタムNginxポートを使用するWebインターフェース、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サーバー、Webインターフェース、データベース)のみを起動します。 これにより、セットアップを軽量に保ち、不要なコンポーネントの起動を回避できます。 追加のコンポーネントを含めるには、次の Compose profiles を使用できます。

# デフォルトのデプロイメント + Zabbixエージェント、Javaゲートウェイ、webサービス、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.0 \
  -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-8.0-latest

このコマンドは次のことを行います。

  • zabbix/zabbix-proxy-sqlite3:alpine-8.0-latestDockerイメージ を取得します。

  • Dockerイメージに基づいて zabbix-proxy-sqlite3 コンテナを作成し、起動します(--init および -d フラグ付き)。

  • ZBX_SERVER_HOST 環境変数を介して、Zabbix プロキシの Server パラメータを設定します。 このパラメータは、プロキシが設定データを取得し、収集したデータを送信する先となる Zabbix サーバーの IP アドレスを指定します。 アクティブプロキシの動作に必要なその他の変数はデフォルト値を使用するため、省略できることに注意してください。

環境変数は、異なる命名スタイルを使用して Zabbix コンポーネントの設定パラメータに対応しています(例: ZBX_SERVER_HOSTServer に対応します)。 一部の変数は Docker 固有であり、一部の設定パラメータは変更できません(例: PIDFile および LogType)。 環境変数を使用する場合は、Docker Hub にある各コンポーネントの Dockerイメージ の説明内の Environment variables セクションを参照してください。

  • Docker によって管理されるストレージ領域(例: /var/lib/docker/volumes/zabbix-proxy-data/)をコンテナの /var/lib/zabbix ディレクトリに接続し、コンテナが削除された場合でも Zabbix プロキシのデータが永続的に保存されるようにします。

各ボリュームの詳細については、Docker Hub にある各コンポーネントの Dockerイメージ の説明内の Allowed volumes セクションを参照してください。

Zabbix プロキシコンテナをデプロイした後は、Zabbix のWebインターフェースで プロキシを追加 し、このプロキシによって監視される ホストを設定 できます。

以下の例では、さらに 3 つのデプロイシナリオを扱います。

  • Javaゲートウェイを使用する Zabbix サーバー(MySQL)
  • SNMP トラップを使用する Zabbix サーバー(PostgreSQL)
  • RHEL 8 上で Javaゲートウェイを使用する Zabbix サーバー(MySQL)

さらに多くの例については、Docker Hub にある各コンポーネントの Dockerイメージ の説明を参照してください。

Javaゲートウェイを使用してZabbixサーバー(MySQL)をデプロイ

この例では、MySQLバックエンド、JMX監視用のJavaゲートウェイ、およびNginxベースのWebインターフェースを備えたZabbixサーバーをデプロイする方法を示します。

1. 専用のDockerネットワークを作成し、すべてのZabbixコンポーネントコンテナがコンテナ名で相互に到達できるようにします。

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.4-oracle \
  --character-set-server=utf8mb4 --collation-server=utf8mb4_bin \
  --authentication-policy=caching_sha2_password

手順4でZabbixサーバーコンテナを実行する前に、MySQLが完全に初期化されている必要があります。そうしないと、Zabbixスキーマが正しく読み込まれない可能性があります。 MySQLの準備完了を確認するには、docker logs mysql-server を実行し、/usr/sbin/mysqld: ready for connections が表示されてから次に進んでください。

3. Zabbix Javaゲートウェイコンテナを実行します。

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

4. Zabbixサーバーコンテナを実行し、MySQLサーバーコンテナにリンクします(zabbix_pwdroot_pwd は手順2で使用したものと同じパスワードに置き換えてください)。

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

Zabbixサーバーコンテナを実行した後、Zabbixサーバーがデータベーススキーマの初期化を完了するまで待ってください。 準備完了を確認するには、docker logs zabbix-server-mysql を実行し、Creating 'zabbix' schema in MySQL が表示されなくなってから次に進んでください。

5. Zabbix Webインターフェースコンテナを実行し、ZabbixサーバーコンテナおよびMySQLサーバーコンテナにリンクします(zabbix_pwdroot_pwd は手順2で使用したものと同じパスワードに置き換えてください)。

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 MYSQL_ROOT_PASSWORD="root_pwd" \
  --network=zabbix-net \
  -p 80:8080 \
  --restart unless-stopped \
  -d zabbix/zabbix-web-nginx-mysql:alpine-8.0-latest

コンテナが起動して実行状態になると(通常は1~3分以内)、Zabbixサーバーが起動し、Webインターフェースは http://localhost で利用可能になります。

SNMPトラップを使用してZabbixサーバー(PostgreSQL)をデプロイ

この例では、PostgreSQLバックエンド、SNMPトラップ、およびNginxベースのWebインターフェースを備えたZabbixサーバーをデプロイする方法を示します。

1. 専用のDockerネットワークを作成し、すべてのZabbixコンポーネントコンテナがコンテナ名で相互に到達できるようにします。

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-8.0-latest

4. Zabbixサーバーコンテナを実行し、PostgreSQLサーバーコンテナおよびSNMPトラップコンテナにリンクします(zabbix_pwd は手順2で使用したものと同じパスワードに置き換えてください)。

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 \
  -d zabbix/zabbix-server-pgsql:alpine-8.0-latest

Zabbixサーバーコンテナを実行した後、Zabbixサーバーがデータベーススキーマの初期化を完了するまで待ってください。 準備完了を確認するには、docker logs zabbix-server-pgsql を実行し、Creating 'zabbix' schema in PostgreSQL が表示されなくなってから次に進んでください。

5. Zabbix Webインターフェースコンテナを実行し、ZabbixサーバーコンテナおよびPostgreSQLサーバーコンテナにリンクします(zabbix_pwd は手順2で使用したものと同じパスワードに置き換えてください)。

docker run --name zabbix-web-nginx-pgsql -t \
  -e ZBX_SERVER_HOST="zabbix-server-pgsql" \
  -e DB_SERVER_HOST="postgres-server" \
  -e POSTGRES_USER="zabbix" \
  -e POSTGRES_PASSWORD="zabbix_pwd" \
  -e POSTGRES_DB="zabbix" \
  --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-8.0-latest

コンテナが起動して実行状態になると(通常は1~3分以内)、Zabbixサーバーが起動し、Webインターフェースは http://localhost で利用可能になります。

RHEL 8–10でJavaゲートウェイを使用してZabbixサーバー(MySQL)をデプロイ

この例では、MySQLバックエンド、JMX監視用のJavaゲートウェイ、およびNginxベースのWebインターフェースを備えたZabbixサーバーを、Red Hat Enterprise Linux 8、9、または10上ですべて実行する方法を示します。

Red Hat Enterprise Linuxでは、Dockerの代わりにPodmanをコンテナランタイムとして使用することが推奨されています。 PodmanはDockerと同様に動作しますが、rootとして実行されるバックグラウンドサービスを必要としないため、Red Hat環境により適しています。

1. zabbix という名前の新しいpodを作成し、Zabbix WebインターフェースおよびZabbixサーバーtrapper用のポートを公開します。

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

2. (任意)zabbix pod内でZabbixエージェントコンテナを実行します。

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-80:latest

3. RHELホスト上に ./mysql/ ディレクトリを作成します。

mkdir -p ./mysql

4. 空のMySQLサーバーコンテナを実行します(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.4 \
  --character-set-server=utf8mb4 --collation-server=utf8mb4_bin \
  --authentication-policy=caching_sha2_password

手順6でZabbixサーバーコンテナを実行する前に、MySQLが完全に初期化されている必要があります。そうしないと、Zabbixスキーマが正しく読み込まれない可能性があります。 MySQLの準備完了を確認するには、podman logs mysql-server を実行し、/usr/sbin/mysqld: ready for connections が表示されてから次に進んでください。

5. Zabbix Javaゲートウェイコンテナを実行します。

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

6. Zabbixサーバーコンテナを実行します(zabbix_pwdroot_pwd は手順4で使用したものと同じパスワードに置き換えてください)。

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 MYSQL_ROOT_PASSWORD="root_pwd" \
  -e ZBX_JAVAGATEWAY="127.0.0.1" \
  --restart=always \
  --pod=zabbix \
  -d registry.connect.redhat.com/zabbix/zabbix-server-mysql-80

7. Zabbix Webインターフェースコンテナを実行します(zabbix_pwdroot_pwd は手順4で使用したものと同じパスワードに置き換えてください)。

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 MYSQL_ROOT_PASSWORD="root_pwd" \
  --restart=always \
  --pod=zabbix \
  -d registry.connect.redhat.com/zabbix/zabbix-web-mysql-80

pod zabbix は、zabbix-web-mysql コンテナの 8080/TCP からホストマシンに 80/TCP ポート(HTTP)を公開します。