
スポンサーリンク
本記事では、Dockerを利用してKeycloakとRDBを連携させる方法を詳しく解説します。Keycloak はオープンソースのアイデンティティ・アクセス管理ツールであり、認証・認可の仕組みを統合的に提供できるため、企業システムやWebアプリケーションで広く利用されています。
デフォルトでは組み込みのH2データベースが利用されますが、H2はテストや開発用途向けであり、本番環境では PostgreSQL などの堅牢な外部DBを使用することが推奨されます。
本記事では、Docker Composeを活用してKeycloakとPostgreSQL/MySQL/MariaDBそれぞれの連携パターンで構築する方法を紹介します。初心者でもすぐに試せるよう、設定ファイルやコマンド例を具体的に紹介します。
前提条件
構築にあたり、以下を前提とします。
- Docker / Docker Compose がインストールされていること
- ローカルマシンでポート
8080
が空いていること(Keycloak 管理画面用) - Keycloakはバージョン26.0(Quarkus版)で確認
推奨環境としては Linux / macOS / Windows いずれでも問題ない想定です。開発環境や検証環境ではローカル PC上で十分ですが、実運用環境ではサーバーやクラウドインフラ上にデプロイするケースが一般的です。
Docker Composeでkeycloak+RDBを構築する手順
docker-compose.ymlファイルの準備
以下は Keycloak と RDB を連携させるための docker-compose.yml
のサンプルです。
PostgreSQL / MySQL / MariaDB をバックエンドにする場合の例をそれぞれ示します。
(※Quarkus版 Keycloak は環境変数 KC_DB
に応じてDBを切り替えます)
Keycloak + PostgreSQLの場合(クリックして展開)
version: '3.9'
services: postgres: image: postgres:17 container_name: postgres environment: POSTGRES_DB: keycloak POSTGRES_USER: keycloak POSTGRES_PASSWORD: password volumes: - postgres_data:/var/lib/postgresql/data networks: - keycloak_network
keycloak: image: quay.io/keycloak/keycloak:26.0 container_name: keycloak command: ["start-dev"] environment: KC_DB: postgres KC_DB_URL_HOST: postgres KC_DB_URL_PORT: 5432 KC_DB_USERNAME: keycloak KC_DB_PASSWORD: password KC_DB_SCHEMA: public KEYCLOAK_ADMIN: admin KEYCLOAK_ADMIN_PASSWORD: admin ports: - 8080:8080 depends_on: - postgres networks: - keycloak_network
volumes: postgres_data:
networks: keycloak_network:
Keycloak + MySQLの場合(クリックして展開)
version: '3.9'
services: mysql: image: mysql:8.4 container_name: mysql environment: MYSQL_DATABASE: keycloak MYSQL_USER: keycloak MYSQL_PASSWORD: password MYSQL_ROOT_PASSWORD: rootpassword ports: - 3306:3306 networks: - keycloak_network
keycloak: image: quay.io/keycloak/keycloak:26.0 container_name: keycloak command: ["start-dev"] environment: KC_DB: mysql KC_DB_URL: jdbc:mysql://mysql:3306/keycloak KC_DB_USERNAME: keycloak KC_DB_PASSWORD: password KC_HEALTH_ENABLED: "true" KC_METRICS_ENABLED: "true" KEYCLOAK_ADMIN: admin KEYCLOAK_ADMIN_PASSWORD: admin ports: - 8080:8080 depends_on: - mysql networks: - keycloak_network
networks: keycloak_network:
Keycloak + MariaDBの場合(クリックして展開)
version: '3.9'
services: mariadb: image: mariadb:11.4 container_name: mariadb environment: MARIADB_DATABASE: keycloak MARIADB_USER: keycloak MARIADB_PASSWORD: password MARIADB_ROOT_PASSWORD: rootpassword ports: - 3307:3306 networks: - keycloak_network
keycloak: image: quay.io/keycloak/keycloak:26.0 container_name: keycloak command: ["start-dev"] environment: KC_DB: mariadb KC_DB_URL: jdbc:mariadb://mariadb:3306/keycloak KC_DB_USERNAME: keycloak KC_DB_PASSWORD: password
KC_HEALTH_ENABLED: "true" KC_METRICS_ENABLED: "true" KEYCLOAK_ADMIN: admin KEYCLOAK_ADMIN_PASSWORD: admin ports: - 8080:8080 depends_on: - mariadb networks: - keycloak_network
networks: keycloak_network:
Keycloakの起動コマンド
docker-compose.yml
を配置したディレクトリで以下コマンドを実行します。
docker-compose up --build -d --remove-orphans
コマンド説明
-
docker-compose up
docker-compose.yml
に定義されたサービスを起動する。 コンテナが存在しない場合は新規作成、存在する場合は再利用される。
必要に応じて以下オプションを付けて実行してください。
-
--build
コンテナを起動する前に イメージを必ずビルドし直す。Dockerfile
や依存関係を変更した場合に反映させたいときに指定する。
-
-d
(--detach
の短縮形) バックグラウンドで起動する。- 指定しない場合は、ターミナルにログが出続ける(フォアグラウンド実行)。
-
--remove-orphans
docker-compose.yml に書かれていない不要なコンテナを削除する。- 以前の定義にあって現在の
docker-compose.yml
に無いサービスが残っているとき、それを自動的に消してくれる。
- 以前の定義にあって現在の
各オプションを付与する場合でまとめると
「docker-compose.yml の内容に従って、不要な古いコンテナを削除しつつ、イメージを再ビルドし、サービスをバックグラウンドで起動する」
コマンドです。
起動が完了したら、以下の URL にアクセスしてください。
http://localhost:8080/admin
ブラウザに管理画面が表示され、ユーザー名 admin
/ パスワード admin
でログイン可能です。ログイン後は必要に応じて Realm(認証領域)を作成し、クライアントやユーザーを追加して利用を開始できます。
docker-compose.yml解説
PostgreSQL版 (docker-compose.yml
)
このファイルでは PostgreSQL を Keycloak のデータベースとして利用する設定が記載されています。
-
postgres サービス
- イメージ:
postgres:17
- 環境変数でデータベース名(
keycloak
)、ユーザー名(keycloak
)、パスワードを設定。 - ポート
5432
をホストに公開。
- イメージ:
-
keycloak サービス
- イメージ:
quay.io/keycloak/keycloak:26.0
start-dev
モードで起動(開発用途向け)。- 環境変数でデータベース接続を指定(
KC_DB=postgres
、KC_DB_URL=jdbc:postgresql://postgres:5432/keycloak
)。 - 管理者アカウント(
admin / admin
)を定義。 - ポート
8080
を公開。 depends_on
により、Keycloak 起動前に PostgreSQL が立ち上がるよう制御。
- イメージ:
MySQL版 (docker-compose.yml
)
このファイルでは MySQL を利用する設定です。
-
mysql サービス
- イメージ:
mysql:8.4
- データベース名・ユーザー・パスワードを環境変数で設定。
- ルートユーザー用パスワードも指定(
MYSQL_ROOT_PASSWORD
)。 - ポート
3306
を公開。
- イメージ:
-
keycloak サービス
- 同様に
quay.io/keycloak/keycloak:26.0
を利用。 - データベース接続は
KC_DB=mysql
、URLはjdbc:mysql://mysql:3306/keycloak
。 - 管理者アカウントを定義。
depends_on
により、MySQL が起動してから Keycloak が立ち上がる。
- 同様に
MariaDB版 (docker-compose.yml
)
このファイルでは MariaDB を利用します。MySQL と互換性があるため設定が非常に似ています。
-
mariadb サービス
- イメージ:
mariadb:11.4
- 環境変数でデータベース・ユーザー・パスワードを設定。
MARIADB_ROOT_PASSWORD
を指定して管理用の認証も確保。- ポート
3306
を公開。
- イメージ:
-
keycloak サービス
- イメージ:
quay.io/keycloak/keycloak:26.0
KC_DB=mariadb
と指定。- 接続URLは
jdbc:mariadb://mariadb:3306/keycloak
。 - 管理者アカウント
admin / admin
を定義。 depends_on
により MariaDB の起動を待機。
- イメージ:
Docker Keycloak構築まとめ
- PostgreSQL: エンタープライズ用途で広く使われ、Keycloak の推奨DB。
- MySQL: 利用者が多く、セットアップが容易。
- MariaDB: MySQL 互換で軽量・高速、オープンソースとして人気。
本記事では、Docker Composeを使ってKeycloakとRDBを連携して起動する方法を解説しました。 いずれも Keycloak(Quarkus版) で動作確認用に最適化された設定であり、開発環境や検証環境の構築に役立ちます。
Docker を活用すれば、開発環境や検証環境を短時間で立ち上げられるだけでなく、本番環境に近い構成でテストすることも可能です。PostgreSQLを始めとするRDBを利用することで、安定性とスケーラビリティを備えた認証基盤を運用できるようになります。さらに実運用を見据える場合は、クラスタリングや監視、バックアップなどの仕組みを整えることで、より信頼性の高いシステムを構築できるでしょう。
以上で本記事の解説を終わります。
よいITライフを!