Keycloak の H2 データベースを覗いてみる
Keycloak の内部データベースの中身を覗きたいと思うことがあったので、公式の Docker イメージを使って試してみました。実施した手順をまとめます。
動作環境
Windows 版の Docker Desktop で Keycloak 公式の Docker イメージを動かしました。
- Windows 11 Home version 22H2
- Docker Desktop version 4.18.0
- WSL version 1.2.5.0
- Keycloak version 21.0.2
Keycloak の RDMBS にはデフォルトの H2 データベースを使いました。
手順
Docker 環境が既に整っていることを前提に、以降の手順を記載します。
コンテナを起動する
公式の Docker イメージを使ってコンテナを起動します。
docker run -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin -p 9080:8080 -p 9082:8082 quay.io/keycloak/keycloak start-dev
今回は検証が目的なので、 start-dev
コマンドを指定して開発モードで Keycloak を起動します。
-p
オプション (--publish
オプション) を二つ指定していますが、それぞれホストから Keycloak の管理コンソールとH2コンソールに接続するための設定です。H2コンソールは8082番ポートで立ち上がるので、適当なホストのポート番号にマッピングします。コンテナ側のポート番号と同じでもよいですが、今回は以下の通りとしました。
サービス | ホストのポート番号 | コンテナのポート番号 |
---|---|---|
Keyclaok管理コンソール | 9080 | 8080 |
H2コンソール | 9082 | 8082 |
ホストのブラウザから Keycloak の管理コンソールに接続してみます。
http://localhost:9080/admin
Keycloak 管理コンソールのログイン画面が表示されました。 docker run
のコマンドで指定した管理者ユーザーのユーザー名とパスワード(今回はどちらも admin )でログインできれば成功です。
Keycloak 管理コンソールのログイン画面
H2コンソールを起動する
ホストのブラウザからデータベースを覗けるようにするため、稼働中のコンテナでH2コンソールを起動します。
今回使用した Docker イメージにおいては、 H2 の jar ファイルは /opt/keycloak/lib/lib/main
に格納されていました。これを使ってH2コンソールを起動します。
Docker Desktop から対象のコンテナの Terminal を開いて、以下のコマンドを実行します。
docker exec <container> java -cp /opt/keycloak/lib/lib/main/com.h2database.h2-2.1.214.jar org.h2.tools.Console -webAllowOthers
このとき -webAllowOthers
オプションを指定します。これによって、他のコンピューター(今回はコンテナから見たときのホストマシン)からの接続が可能となります。
起動に成功すると、コンテナの8082番ポートでH2コンソールが立ち上がります。先ほど docker run
した際にコンテナの8082番ポートをホストの9092番ポートにマッピングしたので、ホストのブラウザから9082番ポートに接続します。
http://localhost:9082
H2コンソールの接続画面が表示されました。
H2コンソールの接続画面
H2コンソールからデータベースに接続する
H2コンソールからデータベースに接続します。今回は以下の値を使いました。
パラメータ | 値 |
---|---|
ドライバクラス | org.h2.Driver |
JDBC URL | jdbc:h2:file:~/data/h2/keycloakdb;AUTO_SERVER=TRUE |
ユーザ名 | sa |
パスワード | password |
Keycloakの内部データベースに接続できました。
まとめ
コンテナ環境で Keycloak デフォルトの H2 データベースの中身を覗く手順を説明しました。これで Keycloak の学習が捗る予感。
参考
Discussion