5 コンテナからのインストール
概要
このページでは、Docker または Docker Compose を使用して Zabbix をデプロイする方法について説明します。
Docker Compose は、Zabbix をデプロイする最も簡単な方法です。 設定ファイルを読み込み、完全な Zabbix 環境を構成するすべてのコンテナを、正しい順序で自動的に起動します。
Docker (manual deployment) では、各コンポーネントを段階的にデプロイすることで同じ結果を実現します。
Zabbix 6.0 以降、決定論的トリガーはインストール時に作成する必要があります。
MySQL/MariaDB でバイナリログが有効になっている場合、これにはスーパーユーザー権限、または変数/設定パラメータ log_bin_trust_function_creators = 1 の設定が必要です。
変数の設定方法については、Database creation scripts を参照してください。
コンソールから実行する場合、この変数は一時的にのみ設定され、Docker を再起動すると解除されることに注意してください。
この場合は SQL サービスを稼働させたままにし、docker compose down zabbix-server を実行して zabbix-server サービスのみを停止し、その後 docker compose up -d zabbix-server を実行してください。
または、この変数を設定ファイルで設定することもできます。
前提条件
開始する前に、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 component | Docker image |
|---|---|
| エージェント | 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 service | zabbix/zabbix-web-service |
| SNMP traps | zabbix/zabbix-snmptraps |
SNMP traps を使用するには、SNMP traps コンテナが Zabbix サーバーまたはプロキシコンテナとボリュームを共有している必要があります(Docker Hub の このイメージの使用方法 と、以下の 例 を参照してください)。
Docker Hub 上のすべての Zabbix コンポーネントイメージは、サポート対象のオペレーティングシステム の最新メジャーバージョンをベースにしています。
これらのイメージは、基盤となる OS イメージが更新されると自動的に再ビルドされます。
イメージタグ
各イメージは、ベースOSとZabbixバージョンを選択するためのタグをサポートしています:
zabbix/<image>:<os>-<version>
サポートされる <os> の値:
alpine- Alpine Linuxubuntu- Ubuntucentos- CentOS Streamol- Oracle Linuxltsc2022- Windows 11 LTSC 2022 (Zabbix エージェントのみ)
サポートされる <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 プロキシ (SQLite3):
docker pull zabbix/zabbix-proxy-sqlite3:latest
# Ubuntu 上の最新の安定版 Zabbix プロキシ (SQLite3):
docker pull zabbix/zabbix-proxy-sqlite3:ubuntu-latest
# Ubuntu 上の最新の開発版 (nightly) ビルドの Zabbix サーバー (MySQL):
docker pull zabbix/zabbix-server-mysql:ubuntu-trunk
# Alpine Linux 上の Zabbix サーバー (MySQL) の最新 7.4 マイナーリリース:
docker pull zabbix/zabbix-server-mysql:alpine-7.4-latest
# Alpine Linux 上の Zabbix サーバー (MySQL) バージョン 7.4.1:
docker pull zabbix/zabbix-server-mysql:alpine-7.4.1
Docker Compose
Docker Compose は、Zabbix を最も手早くデプロイする方法です。 これは設定ファイル(Compose file)を読み込み、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. デフォルト構成をデプロイします。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 ファイルで定義)は、使用する Docker イメージ、ポート、ネットワーク IP 範囲を制御します。
これらの変数は docker compose コマンドの前にインラインで指定することも、.env ファイルを編集することもできます。
たとえば、次のコマンドは、Ubuntu ベースのイメージ(デフォルトの Alpine Linux の代わり)を使用し、Webインターフェースを 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 サーバーの passive poller 数や cache 設定を調整したり、Webインターフェースのタイムゾーンを設定したりできます。
# 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/ の内容は、各コンポーネントのイメージごとにあらかじめ定義されています。たとえば、次のとおりです。
zbx_env/etc/- Zabbix Webインターフェースコンテナ で使用zbx_env/usr/およびzbx_env/var/- Zabbix サーバーコンテナ で使用
各ボリュームの詳細については、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 プロファイル を使用できます:
# デフォルトのデプロイメント + 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.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-latestDocker イメージ を取得します。 -
Docker イメージを基に
zabbix-proxy-sqlite3コンテナを作成して起動します(--initおよび-dフラグを使用)。 -
ZBX_SERVER_HOST環境変数を使用して、Zabbix プロキシのServerパラメータを設定します。 このパラメータは、プロキシが設定データを取得し、収集したデータを送信する Zabbix サーバーの IP アドレスを指定します。 アクティブプロキシの動作に必要な他の変数はデフォルト値を使用するため、省略できます。
環境変数は、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 プロキシのデータが永続的に保存されるようにします。
各ボリュームの詳細については、Docker Hub 上の各コンポーネントの Docker イメージ 説明にある Allowed volumes セクションを参照してください。
Zabbix プロキシコンテナをデプロイした後は、Zabbix の Webインターフェース で プロキシを追加し、このプロキシで監視する ホストを設定 できます。
以下の例では、さらに 3 つのデプロイシナリオを扱います。
- Zabbix サーバー (MySQL) と Javaゲートウェイ
- Zabbix サーバー (PostgreSQL) と SNMP トラップ
- RHEL 8 上の Zabbix サーバー (MySQL) と Javaゲートウェイ
その他の例については、Docker Hub 上の各コンポーネントの Docker イメージ 説明を参照してください。
Javaゲートウェイを使用した Zabbix サーバー (MySQL) のデプロイ
この例では、MySQL バックエンド、JMX monitoring 用の 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_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 \
--default-authentication-plugin=mysql_native_password
MySQL 8.4 以降の Docker イメージを使用している場合は、--default-authentication-plugin=mysql_native_password を --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-7.4-latest
4. Zabbix サーバーコンテナを実行し、MySQL サーバーコンテナに接続します (zabbix_pwd と root_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-7.4-latest
Zabbix サーバーコンテナを実行した後は、Zabbix サーバーがデータベーススキーマの初期化を完了するまで待ちます。
準備完了を確認するには、docker logs zabbix-server-mysql を実行し、Creating 'zabbix' schema in MySQL が表示されなくなってから続行してください。
5. Zabbix Webインターフェースコンテナを実行し、Zabbix サーバーおよび MySQL サーバーコンテナに接続します (zabbix_pwd と root_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-7.4-latest
コンテナが起動して稼働状態になると、通常 1〜3 分以内に Zabbix サーバーが起動し、Webインターフェースは http://localhost で利用できるようになります。
SNMP トラップを使用した Zabbix サーバー (PostgreSQL) のデプロイ
この例では、PostgreSQL バックエンド、SNMP traps、および 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 traps コンテナを実行します。
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 サーバーコンテナを実行し、PostgreSQL サーバーコンテナおよび SNMP traps コンテナに接続します (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-7.4-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-7.4-latest
コンテナが起動して稼働状態になると、通常 1〜3 分以内に Zabbix サーバーが起動し、Webインターフェースは http://localhost で利用できるようになります。
RHEL 8–10 で Javaゲートウェイを使用した Zabbix サーバー (MySQL) のデプロイ
この例では、Red Hat Enterprise Linux 8、9、または 10 上で、MySQL バックエンド、JMX monitoring 用の Javaゲートウェイ、および Nginx ベースの Webインターフェースを備えた Zabbix サーバーをデプロイする方法を示します。
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-74:latest
3. RHEL ホスト上に ./mysql/ ディレクトリを作成します。
mkdir -p ./mysql
4. 空の MySQL サーバーコンテナを実行します (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 \
--default-authentication-plugin=mysql_native_password
MySQL 8.4 以降の Docker イメージを使用している場合は、--default-authentication-plugin=mysql_native_password を --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-74
6. Zabbix サーバーコンテナを実行します (zabbix_pwd と root_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-74
7. Zabbix Webインターフェースコンテナを実行します (zabbix_pwd と root_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-74
pod zabbix は、zabbix-web-mysql コンテナの 8080/TCP ポートからホストマシンへ 80/TCP ポート (HTTP) を公開します。