【Docker Compose】Keycloak構築ガイド(postgres連携あり)

【Docker Compose】Keycloak構築ガイド(postgres連携あり)

当ページのリンクには広告が含まれています。

記事の文字数:3533

本記事では、Docker上にKeycloak(Quarkus版)とPostgreSQLをはじめ、MySQL/MariaDBといった主要な RDBを組み合わせて構築する方法を解説します。実際に動作するdocker-compose.ymlのサンプルを提示し、環境変数の設定や管理コンソールへのアクセス手順、各データベース利用時のポイントを詳しく紹介。


スポンサーリンク

本記事では、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の場合(クリックして展開)
docker-compose.yml
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の場合(クリックして展開)
docker-compose.yml
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の場合(クリックして展開)
docker-compose.yml
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 に定義されたサービスを起動する。 コンテナが存在しない場合は新規作成、存在する場合は再利用される。

必要に応じて以下オプションを付けて実行してください。

  1. --build コンテナを起動する前に イメージを必ずビルドし直す

    • Dockerfile や依存関係を変更した場合に反映させたいときに指定する。
  2. -d--detach の短縮形) バックグラウンドで起動する

    • 指定しない場合は、ターミナルにログが出続ける(フォアグラウンド実行)。
  3. --remove-orphans docker-compose.yml に書かれていない不要なコンテナを削除する

    • 以前の定義にあって現在の docker-compose.yml に無いサービスが残っているとき、それを自動的に消してくれる。

各オプションを付与する場合でまとめると

「docker-compose.yml の内容に従って、不要な古いコンテナを削除しつつ、イメージを再ビルドし、サービスをバックグラウンドで起動する」

コマンドです。

起動が完了したら、以下の URL にアクセスしてください。

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=postgresKC_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ライフを!
Scroll to Top