5 コンテナでのインストール

Overview

This page describes how to deploy Zabbix using Docker or Docker Compose.

Docker Compose is the quickest way to deploy Zabbix. It reads a configuration file and automatically starts all the containers that make up a complete Zabbix setup, in the correct order.

Docker (manual deployment) achieves the same result by deploying each component step by step, which may suit users already managing an existing Docker environment.

Since Zabbix 6.0, deterministic triggers need to be created during the installation. If binary logging is enabled for MySQL/MariaDB, this requires superuser privileges or setting the variable/configuration parameter log_bin_trust_function_creators = 1. See Database creation scripts for instructions how to set the variable.

Note that if executing from a console, the variable will only be set temporarily and will be dropped when a Docker is restarted. In this case, keep your SQL service running, only stop zabbix-server service by running docker compose down zabbix-server and then docker compose up -d zabbix-server.

Alternatively, you can set this variable in the configuration file.

Prerequisites

Before you begin, make sure Docker is installed on your system. If it is not, follow the Docker installation guide.

Some Zabbix components require specific ports to be open on the host running Docker (e.g., 10051/TCP for Zabbix server, 162/UDP for SNMP traps). See Requirements for a full list of ports used by Zabbix components. For Zabbix server and agent, the default port can be changed by setting the ZBX_LISTENPORT environment variable on the respective container.

構造

すべてのZabbixコンポーネントは、以下のDockerリポジトリで入手可能です。

さらに、SNMPトラップのサポートもあります。 これはUbuntu Trustyのみに基づく追加リポジトリ(zabbix/zabbix-snmptraps)として提供されます。 ZabbixサーバーやZabbixプロキシと連携することができます。

バージョン

Zabbix コンポーネントの各リポジトリには、次のタグが含まれています。

  • latest - Alpine Linuxイメージに基づくZabbixコンポーネントの最新安定バージョン
  • alpine-latest - Alpine Linuxイメージに基づくZabbixコンポーネントの最新安定バージョン
  • ubuntu-latest - Ubuntuイメージに基づくZabbixコンポーネントの最新安定バージョン
  • alpine-6.0-latest - Alpine Linuxイメージに基づくZabbix 6.0コンポーネントの最新マイナーバージョン
  • ubuntu-6.0-latest - Ubuntuイメージに基づくZabbix 6.0コンポーネントの最新マイナーバージョン
  • alpine-6.0.* - Alpine Linuxイメージに基づくZabbix 6.0コンポーネントのさまざまなマイナーバージョン。*はZabbixコンポーネントのマイナー バージョンです。
  • ubuntu-6.0.* - Ubuntuイメージに基づくZabbix 6.0コンポーネントのさまざまなマイナーバージョン。*はZabbixコンポーネントのマイナー バージョンです。

Docker Compose

Zabbixは、DockerでマルチコンテナZabbixコンポーネントを定義および実行するためのComposeファイルも提供しています。これらのComposeファイルは、github.comのZabbix docker公式リポジトリ(https://github.com/zabbix/zabbix-docker)で入手できます。これらのComposeファイルは例として追加され、オーバーロードされています。 たとえば、MySQLおよびSQLite3をサポートするプロキシが含まれています。

Composeファイルにはいくつかの異なるバージョンがあります。

ファイル名 説明
docker-compose_v3_alpine_mysql_latest.yaml MySQLデータベースをサポートするAlpine Linux上で最新バージョンのZabbix 6.0コンポーネントを実行します。
docker-compose_v3_alpine_mysql_local.yaml Zabbix 6.0の最新バージョンをローカルにビルドし、MySQLデータベースをサポートするAlpine Linux上でZabbixコンポーネントを実行します。
docker-compose_v3_alpine_pgsql_latest.yaml PostgreSQLデータベースをサポートするAlpine Linux上で最新バージョンのZabbix 6.0コンポーネントを実行します。
docker-compose_v3_alpine_pgsql_local.yaml Zabbix 6.0の最新バージョンをローカルにビルドし、PostgreSQLデータベースをサポートするAlpine Linux上でZabbixコンポーネントを実行します。
docker-compose_v3_centos_mysql_latest.yaml MySQLデータベースをサポートするCentOS 8上で最新バージョンのZabbix 6.0コンポーネントを実行します。
docker-compose_v3_centos_mysql_local.yaml Zabbix 6.0の最新バージョンをローカルにビルドし、MySQLデータベースをサポートするCentOS 8上でZabbixコンポーネントを実行します。
docker-compose_v3_centos_pgsql_latest.yaml PostgreSQLデータベースをサポートするCentOS 8上で最新バージョンのZabbix 6.0コンポーネントを実行します。
docker-compose_v3_centos_pgsql_local.yaml Zabbix 6.0の最新バージョンをローカルでビルドし、PostgreSQLデータベースをサポートするCentOS 8上でZabbixコンポーネントを実行します。
docker-compose_v3_ubuntu_mysql_latest.yaml MySQLデータベースをサポートするUbuntu 20.04上で 最新バージョンのZabbix 6.0コンポーネントを実行します。
docker-compose_v3_ubuntu_mysql_local.yaml Zabbix 6.0の最新バージョンをローカルにビルドし、MySQLデータベースをサポートするUbuntu 20.04上でZabbixコンポーネントを実行します。
docker-compose_v3_ubuntu_pgsql_latest.yaml PostgreSQLデータベースをサポートするUbuntu 20.04上で最新バージョンのZabbix 6.0コンポーネントを実行します。
docker-compose_v3_ubuntu_pgsql_local.yaml Zabbix 6.0の最新バージョンをローカルにビルドし、PostgreSQLデータベースをサポートするUbuntu 20.04上でZabbixコンポーネントを実行します。

Docker Composeファイルは、Docker Composeのバージョン3をサポートしています。

環境変数

すべてのZabbixコンポーネントイメージは、構成を制御するための環境変数を提供します。 これらの環境変数は各コンポーネントリポジトリにリストされています。 また、Zabbix設定ファイルのオプションでもありますが命名方法が異なります。 たとえば、ZBX_LOGSLOWQUERIESは、Zabbixサーバーおよび Zabbixプロキシ設定ファイルのLogSlowQueriesと同じです。

一部の設定オプションは変更できません。たとえばPIDFileLogTypeなどです。

一部のコンポーネントには、公式のZabbix設定ファイルには存在しない特定の環境変数があります。

変数 コンポーネント 説明
DB_SERVER_HOST サーバー
プロキシ
Webインターフェース
MySQLまたはPostgreSQLサーバーのIPまたはDNS名。
デフォルトの値: MySQL- mysql-server、PostgreSQL - postgres-server
DB_SERVER_PORT サーバー
プロキシ
Webインターフェース
MySQLまたはPostgreSQLサーバーのポート。
デフォルトの値: MySQL- '3306'、PostgreSQL - '5432'
MYSQL_USER サーバー
プロキシ
Webインターフェース
MySQLデータベースユーザー。
デフォルトの値: 'zabbix'
MYSQL_PASSWORD サーバー
プロキシ
Webインターフェース
MySQLデータベースパスワード。
デフォルトの値: 'zabbix'
MYSQL_DATABASE サーバー
プロキシ
Webインターフェース
Zabbixデータベース名。
デフォルトの値: Zabbixサーバー - 'zabbix'、Zabbixプロキシ - 'zabbix_proxy'
POSTGRES_USER サーバー
Webインターフェース
PostgreSQLデータベースユーザー。
デフォルトの値: 'zabbix'
POSTGRES_PASSWORD サーバー
Webインターフェース
PostgreSQLデータベースパスワード。
デフォルトの値: 'zabbix'
POSTGRES_DB サーバー
Webインターフェース
Zabbixデータベース名。
デフォルトの値: 'zabbix'
PHP_TZ Webインターフェース PHP形式のタイムゾーン。サポートされているタイムゾーンの完全なリストは、php.netで入手できます。
デフォルトの値: 'Europe/Riga'
ZBX_SERVER_NAME Webインターフェース Webインターフェースの右上隅に表示されるZabbixインストール名。
デフォルトの値: 'Zabbix Docker'
ZBX_JAVAGATEWAY_ENABLE サーバー
プロキシ
Zabbix Javaゲートウェイとの通信を有効にして、Java関連のチェックを収集します。
デフォルトの値: "false"
ZBX_ENABLE_SNMP_TRAPS サーバー
プロキシ
SNMPトラップ機能を有効にします。zabbix-snmptrapsインスタンスと、共有ボリューム/var/lib/zabbix/snmptrapsがZabbixサーバーまたはZabbixプロキシに必要です。
ボリューム

イメージでは、いくつかのマウントポイントを使用できます。 これらのマウントポイントはZabbixコンポーネントの種類によって異なります。

ボリューム 説明
Zabbix エージェント
/etc/zabbix/zabbix_agentd.d *.confファイルを組み込み、UserParameter機能を使用してZabbixエージェントを拡張できます。
/var/lib/zabbix/modules LoadModule機能を使用して追加のモジュールをロードし、Zabbixエージェントを拡張できます。
/var/lib/zabbix/enc TLS関連のファイルを格納するために使用されます。これらのファイル名は、ZBX_TLSCAFILEZBX_TLSCRLFILEZBX_TLSKEY_FILEZBX_TLSPSKFILE環境変数を使用して指定されます。
Zabbixサーバー
/usr/lib/zabbix/alertscripts カスタムアラートスクリプトに使用されます。 zabbix_server.confAlertScriptsPathパラメーターです。
/usr/lib/zabbix/externalscripts 外部チェックに使用されます。 zabbix_server.confExternalScriptsパラメーターです。
/var/lib/zabbix/modules LoadModule機能を使用して追加のモジュールをロードし、Zabbixサーバーを拡張できます。
/var/lib/zabbix/enc TLS関連のファイルを格納するために使用されます。 これらのファイル名は、ZBX_TLSCAFILEZBX_TLSCRLFILEZBX_TLSKEY_FILEZBX_TLSPSKFILE環境変数を使用して指定されます。
/var/lib/zabbix/ssl/certs クライアント認証用のSSLクライアント証明書ファイルの格納場所として使用されます。zabbix_server.confのSSLCertLocationパラメーターです。
/var/lib/zabbix/ssl/keys クライアント認証用のSSL秘密鍵ファイルの格納場所として使用されます。 zabbix_server.confSSLKeyLocationパラメーターです。
/var/lib/zabbix/ssl/ssl_ca SSL サーバー証明書検証用の認証局(CA)ファイルの格納場所として使用されます。 zabbix_server.confSSLCALocationパラメーターです。
/var/lib/zabbix/snmptraps snmptraps.logファイルの場所として使用されます。 zabbix-snmptrapsコンテナによって共有され、Zabbixサーバーの新しいインスタンスを作成するときに、volumes_from Dockerオプションを使用して継承される可能性があります。共有ボリュームを使用し、ZBX_ENABLE_SNMP_TRAPS環境変数を'true'に切り替えることで、SNMPトラップ処理機能を有効にすることができます。
/var/lib/zabbix/mibs 新しいMIBファイルを追加できます。サブディレクトリはサポートしていません。すべてのMIBを/var/lib/zabbix/mibsに配置する必要があります。
Zabbixプロキシ
/usr/lib/zabbix/externalscripts 外部チェックによって使用されます。zabbix_proxy.confExternalScriptsパラメーターです。
/var/lib/zabbix/db_data/ 外部デバイスにデータベースファイルを保存できます。SQLite3を使用するZabbixプロキシでのみサポートしています。
/var/lib/zabbix/modules LoadModule機能を使用して追加のモジュールをロードし、Zabbixサーバーを拡張できます。
/var/lib/zabbix/enc TLS関連のファイルを格納するために使用されます。これらのファイル名は、ZBX_TLSCAFILEZBX_TLSCRLFILEZBX_TLSKEY_FILEZBX_TLSPSKFILE環境変数を使用して指定されます。
/var/lib/zabbix/ssl/certs クライアント認証用のSSLクライアント証明書ファイルの格納場所として使用されます。zabbix_proxy.confSSLCertLocationパラメーターです。
/var/lib/zabbix/ssl/keys クライアント認証用のSSL秘密鍵ファイルの格納場所として使用されます。zabbix_proxy.confSSLKeyLocationパラメーターです。
/var/lib/zabbix/ssl/ssl_ca SSLサーバー証明書検証用の認証局(CA)ファイルの格納場所として使用されます。zabbix_proxy.confSSLCALocationパラメーターです。
/var/lib/zabbix/snmptraps snmptraps.logファイルの場所として使用されます。zabbix-snmptrapsコンテナによって共有され、Zabbixサーバーの新しいインスタンスを作成するときに、volumes_from Dockerオプションを使用して継承される可能性があります。共有ボリュームを使用し、ZBX_ENABLE_SNMP_TRAPS環境変数を'true'に切り替えることで、SNMPトラップ処理機能を有効にすることができます。
/var/lib/zabbix/mibs 新しいMIBファイルを追加できます。サブディレクトリはサポートしていません。すべてのMIBを/var/lib/zabbix/mibsに配置する必要があります。
Apache2 Webサーバーに基づくZabbix Webインターフェース
/etc/ssl/apache2 Zabbix WebインターフェースのHTTPSを有効にすることができます。Apache2 SSL接続用に準備されたssl.crtファイルとssl.keyファイルの2つが格納されている必要があります。
Nginx Webサーバーに基づくZabbix Webインターフェース
/etc/ssl/nginx Zabbix WebインターフェースのHTTPSを有効にすることができます。Nginx SSL接続用に準備されたssl.crtssl.keyおよびdhparam.pemが格納されている必要があります。
Zabbix snmpトラップ
/var/lib/zabbix/snmptraps 受信したSNMPトラップで名前が付けられたsnmptraps.logログファイルが格納されます。
/var/lib/zabbix/mibs 新しいMIBファイルを追加できます。サブディレクトリはサポートしていません。すべてのMIBを/var/lib/zabbix/mibsに配置する必要があります。

詳細については、Docker HubのZabbix公式リポジトリを参照してください。

Makefile

The Zabbix Dockerfiles repository also provides a Makefile as a shortcut for common Docker Compose tasks. Instead of using the full docker compose command, you can use shorter make commands (run make help to see the available options):

# Default deployment (Zabbix server, web interface, MySQL, all on Alpine Linux)
make up

# Custom deployment (Zabbix server, web interface with custom Nginx ports, PostgreSQL, all on Ubuntu)
make up \
  OS=ubuntu \
  DB=pgsql \
  ZABBIX_WEB_NGINX_HTTP_PORT=8282 \
  ZABBIX_WEB_NGINX_HTTPS_PORT=8443

When stopping or removing containers, always specify the same database type that was deployed (e.g., make down DB=pgsql).

By default, make up starts only a minimal set of services (Zabbix server, web interface, and database). This keeps the setup lightweight and avoids starting components that may not be needed. To include additional components, you can use the following Compose profiles:

# Default deployment + Zabbix agent, Java gateway, web service, and SNMP traps:
make up COMPOSE_PROFILES=full

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

初期設定

イメージをダウンロードした後、docker runコマンドを実行してコンテナを起動し、その後に必要な環境変数マウントポイントを指定する追加の引数を指定します。 いくつかの設定例を以下に示します。

Zabbixは、コンテナー内のPID1または初期プロセスとして実行しないでください。

例 1

この例では、MySQLデータベースのサポート、Nginx Webサーバーに基づくZabbix Webインターフェース、およびZabbix Javaゲートウェイを備えたZabbixサーバーを実行する方法を示します。

1. Zabbixコンポーネントコンテナ専用のネットワークを作成します。

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

2. 空のMySQLサーバーインスタンスを開始します。

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 \
      --character-set-server=utf8 --collation-server=utf8_bin \
      --default-authentication-plugin=mysql_native_password

3. Zabbix Javaゲートウェイインスタンスを起動します。

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

4. Zabbixサーバーインスタンスを起動し、作成した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 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-6.0-latest

Zabbixサーバーインスタンスは、10051/TCPポート (Zabbixトラッパー)をホストマシンに公開します。

5. Zabbix Webインターフェースを起動し、インスタンスを作成したMySQLサーバーおよびZabbixサーバーインスタンスとリンクします。

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

Zabbix Webインターフェースインスタンスは、80/TCPポート (HTTP)をホストマシンに公開します。

例 2

この例では、PostgreSQLデータベースのサポート、Nginx Webサーバーに基づくZabbix Webインターフェース、およびSNMPトラップ機能を備えたZabbixサーバーを実行する方法を示します。

1. Zabbixコンポーネントコンテナ専用のネットワークを作成します。

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

2. 空のPostgreSQLサーバーインスタンスを起動します。

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

Zabbix SNMPトラップインスタンスは、162/UDPポート (SNMPトラップ)をホストマシンに公開します。

4. Zabbixサーバーインスタンスを起動し、作成したPostgreSQLサーバーインスタンスとリンクします。

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

Zabbixサーバーインスタンスは、10051/TCPポート (Zabbixトラッパー)をホストマシンに公開します。

5. Zabbix Webインターフェースを起動し、インスタンスを作成したPostgreSQLサーバーおよびZabbixサーバーインスタンスとリンクします。

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

Zabbix Webインターフェースインスタンスは、443/TCPポート (HTTPS)をホストマシンに公開します。
/etc/ssl/nginxディレクトリには、必要な名前の証明書が含まれている必要があります。

例 3

この例では、MySQLデータベースのサポート、Nginx Webサーバーに基づくZabbix Webインターフェース、およびRed Hat 8上のpodmanを使用したZabbix Javaゲートウェイを備えたZabbixサーバーを実行する方法を示します。

1. zabbixという名前と公開ポート (Webインターフェース、Zabbixサーバートラッパー)を使用して新しいPodを作成します。

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

3. ホスト上に./mysql/ディレクトリを作成し、Oracle MySQL Server 8.0を起動します。

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=utf8 --collation-server=utf8_bin \
      --default-authentication-plugin=mysql_native_password

4. Zabbixサーバーコンテナを起動します。

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

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

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

6. Zabbix Webインターフェースコンテナを起動します。

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

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