こんにちは、SCSKの坂木です。
本記事では、DockerコンテナでZabbixサーバを構築する手順をお届けします。
コンテナ版は構築が速く、環境の複製や破棄もしやすい反面、「設定ファイルはどこ?」など通常サーバ版とは勝手が違う部分もあります。本記事では、Amazon Linux 2023上にZabbix 7.0 LTSを構築する手順を、「💡Tips:dnfインストール版との違い」を交えながら解説します。
検証環境
| コンポーネント | バージョン/種類 | 備考 |
|---|---|---|
| OS | Amazon Linux 2023 | EC2上に構築 |
| Docker | 25.0.14 | AL2023の標準リポジトリから |
| Docker Compose | v2系 | プラグインとして追加配置 |
| Zabbix | 7.0 LTS | 2026年時点の最新LTS |
| データベース | MySQL | 公式Zabbixコンテナが自動起動 |
| Webサーバ | Nginx | 同上 |
Docker / Docker Composeのインストール
Amazon Linux 2023にDockerを入れます。
Docker Engineとgitをインストール #dnf install docker git Dockerサービスを起動&自動起動設定 #systemctl enable --now docker 動作確認 #docker --version Docker version 25.0.14, build 0bab007
続いてDocker Compose v2をプラグインとして配置します。AL2023の標準リポジトリには含まれていないため、GitHubから直接取得します。
#DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
#mkdir -p $DOCKER_CONFIG/cli-plugins
#curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
#chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
#docker compose version
Docker Compose version v5.3.1
Zabbix公式リポジトリの取得
Zabbix公式が zabbix/zabbix-docker というリポジトリでDocker Compose用のファイル一式を公開しているので、これを git clone するだけです。
#git clone https://github.com/zabbix/zabbix-docker.git #cd zabbix-docker LTS版(7.0)を指定 #git checkout 7.0
ディレクトリの中身を見てみましょう。
#ls -la
主なファイルは以下の通りです。
| ファイル | 役割 |
|---|---|
| compose.yaml | メインのCompose定義 |
| compose_databases.yaml | MySQL定義 |
| compose_zabbix_components.yaml | Zabbix各コンポーネント定義 |
| .env | Zabbixバージョン・OS・ポート等の変数 |
| env_vars/ | 各コンポーネントの環境変数ファイル群 |
コンテナ版のZabbixは、「Zabbix Server」「Web」「DB」「Agent」がすべて別々のコンテナとして起動し、Docker Compose定義でひとまとめに管理されるのが特徴です。今回はZabbix公式が配布しているDocker Composeのファイル一式を利用して構築します。
💡Tips①:dnfインストールとの構成の違い
dnfでの通常インストールでは、
zabbix-server-mysql・zabbix-web-nginx-mysql・mysql-serverなどを1つずつインストールし、それぞれsystemctl startしていく手順が必要でした。コンテナ版では、Zabbix公式が「Server」「Web」「DB」「Agent」を全部セットにしたDocker Compose設定を配布しているため、セットで動かす前提の設計になっています。個別インストールではなく「まとめて起動する」思想に切り替わる点が最大の違いです。
コンテナの起動
以下のコマンドでコンテナを起動します。
起動状況を確認:
#docker compose ps
Up (healthy) のコンテナが並んでいれば成功です。
NAME STATUS
zabbix-docker-mysql-server-1 Up (healthy)
zabbix-docker-zabbix-server-1 Up
zabbix-docker-zabbix-web-nginx-mysql-1 Up (healthy)
💡Tips②:dnfインストールとの手順数の違い
dnfでの通常インストールでは、以下のステップが必要でした:
- Zabbixリポジトリを追加(
rpm -Uvh https://repo.zabbix.com/...)dnf install zabbix-server-mysql zabbix-web-nginx-mysql zabbix-sql-scripts zabbix-agent- MySQLインストール&初期化
- データベース作成&ユーザー作成&権限付与
- スキーマとテンプレートをインポート(
zcat schema.sql | mysql -uzabbix -p zabbix)/etc/zabbix/zabbix_server.confのDBPasswordを編集systemctl start zabbix-server zabbix-agent nginx php-fpmこれがコンテナ版だと、リポジトリの取得と
docker compose up -dコマンドで全部終わります。Zabbixが動く環境を素早く用意したい用途では、圧倒的にコンテナ版が速いです。
Zabbix Web UIへの初回ログイン
ブラウザで以下のURLにアクセスします。
http://<ZabbixサーバのIP>/
初期ログイン情報:
- ユーザー:
Admin(Aは大文字) - パスワード:
zabbix
💡Tips③:dnfインストール時とのURLの違い
dnfインストール(Apache構成)では
http://<IP>/zabbix/のように/zabbixパスを付けるのが定番でしたが、コンテナ版のNginxはルート/で配信しています。パスに/zabbixを付けると404になります。パッケージ版に慣れているとクセで打ってしまいがちなポイントです。
DB(MySQL)接続のパスワードの変更
DBへ接続する際に利用するパスワードの変更方法を紹介します。
MySQLコンテナに入ってパスワードを変更します。
#cd ~/zabbix-docker 現在のrootパスワードで、DBにログイン #docker compose exec mysql-server mysql -uroot -p"$(cat env_vars/.MYSQL_ROOT_PASSWORD)"
MySQLプロンプトで:
日常運用で使う zabbixユーザー(Zabbix ⇔ DB接続用)のパスワード変更 >ALTER USER 'zabbix'@'%' IDENTIFIED BY 'NewZbxPass!'; ヘルスチェック・初期セットアップで使う rootユーザーのパスワード変更 >ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewRootPass!'; >FLUSH PRIVILEGES; >EXIT;
続いて、シークレットファイル(DBパスワードの保存先)を更新します。
ここで注意すべきは、ファイルの末尾に改行が入るとパスワード末尾に改行が付いたと解釈されて認証失敗するため、echo -n を必ず使う点です。
改行を入れないため -n を必ず付ける #echo -n 'NewZbxPass!' > env_vars/.MYSQL_PASSWORD #echo -n 'NewRootPass!' > env_vars/.MYSQL_ROOT_PASSWORD Zabbix Server と Web を再起動 #docker compose restart zabbix-server zabbix-web-nginx-mysql
設定ファイルの変更方法
コンテナ版では設定ファイルの実体が変わるので整理しておきます。
Zabbix Server(zabbix_server.conf 相当)
変更対象:env_vars/.env_srv
コンテナ版では、コンテナ起動時に環境変数を読んでzabbix_server.confを自動生成する仕組みになっています。そのため、zabbix_server.conf を直接編集しても再起動で上書きされてしまいます。永続的な設定は env_vars/.env_srv に定義された環境変数に記載します。
env_vars/.env_srv (真の設定源・永続)
↓ コンテナ起動時
/etc/zabbix/zabbix_server.conf (一時ファイル・使い捨て)
命名ルールはシンプルで、zabbix_server.conf のパラメータ名の頭に ZBX_ を付けたものが環境変数名になります。
(例:CacheSize → ZBX_CACHESIZE)
編集:env_vars/.env_srvを修正してみる
該当行のコメント(#)を外して値を編集:
反映 #docker compose restart zabbix-server
なお、全ての設定値が環境変数として提供されているわけではありません。PidFile、LogFile、AlertScriptsPath などのパス系はコンテナ内で固定されています。もしそれらを変更したい場合は、カスタム zabbix_server.conf を作ってボリュームマウントする必要があります。
💡Tips④:dnfインストール時との設定ファイルの違い
dnfインストール版では
/etc/zabbix/zabbix_server.confをviで直接編集し、systemctl restart zabbix-serverで反映していました。コンテナ版では、編集対象が
.confではなくenv_vars/.env_srv(環境変数ファイル) に変わります。コンテナ内の.confは起動時に毎回自動生成されるため、直接編集しても意味がない点が最大の違いです。パラメータ名もCacheSize→ZBX_CACHESIZEのようにZBX_プレフィックス付きになります。
MySQL(my.cnf 相当)
compose_databases.yaml の mysql-server: にある command: セクションで、mysqld の起動オプションとして直接定義されています。ここには既定で文字コード設定などが記述されており、この既存の記述に追記することでパラメータを変更できます。
command: セクションが現在どうなっているかを確認します。#grep -A 10 'mysql-server:' compose_databases.yaml
mysql-server:
image: "${MYSQL_IMAGE}:${MYSQL_IMAGE_TAG}"
command:
- mysqld
- --skip-mysqlx
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_bin
#docker compose exec mysql-server mysql -uroot -p"$(cat env_vars/.MYSQL_ROOT_PASSWORD)" -e "SHOW VARIABLES WHERE Variable_name IN ('innodb_buffer_pool_size','max_connections','slow_query_log');"
+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
| max_connections | 151 |
| slow_query_log | OFF |
+-------------------------+-----------+
編集:command: に追記してみる
Zabbixの監視データ書き込み性能に効くInnoDBバッファプールを2GBに設定してみます。既存の行の下に、--innodb-buffer-pool-size=2G の1行を追記します。
ファイルを編集
#vi compose_databases.yaml
mysql-server:
image: "${MYSQL_IMAGE}:${MYSQL_IMAGE_TAG}"
command:
- mysqld
- --skip-mysqlx
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_bin
- --innodb-buffer-pool-size=2G #この行を追加
#docker compose up -d mysql-server
編集前と同じコマンドをもう一度実行し、値が変わっていれば成功です。
#docker compose exec mysql-server mysql -uroot -p"$(cat env_vars/.MYSQL_ROOT_PASSWORD)" -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';" +-------------------------+------------+ | Variable_name | Value | +-------------------------+------------+ | innodb_buffer_pool_size | 2147483648 |#2GBに変更| max_connections | 151 | | slow_query_log | OFF | +-------------------------+------------+
💡Tips⑤:dnfインストール時とのMySQL設定の違い
dnfインストール版では
/etc/my.cnf.d/*.cnfに設定を書いていました。コンテナ版では、Zabbix Serverと違って環境変数方式ではなく、通常サーバ版と同じ
my.cnf書式のファイルをボリュームマウントする方式です。書式は完全に同じなので、MySQL設定に関しては通常サーバ版の知識がそのまま流用できるのが嬉しいポイントです。
まとめ
本記事では、DockerでZabbix 7.0 LTSを構築する手順を、通常サーバ版との違いを交えて解説しました。
- 構築は
docker compose up -dの1コマンドで完了し、パッケージ版より圧倒的に速い - 設定の管理元が変わるのが最大の違い。
zabbix_server.confはホスト上になく、env_vars/.env_srv(環境変数)で管理する - MySQLの設定は
compose_databases.yamlのcommand:で調整する
「コンテナは難しそう」と感じていた方も、やっていることは通常サーバ版と本質的に同じで、設定の”置き場所”と”反映方法”が変わっただけ、とお分かりいただけたかと思います。
最後までお読みいただき、ありがとうございました!
▼弊社ではZabbix関連サービスを展開しています。以下ページもご参照ください。
★Zabbixの基礎をまとめたeBookを公開しております!★

★SCSK Plus サポート for Zabbix★

★SCSK Zabbixチャンネル★

★X(旧Twitter)に、SCSK Zabbixアカウントを開設しました!★


