第5章 Red Hat build of Keycloak をコンテナー内で実行する


コンテナーイメージから Red Hat build of Keycloak を実行します。

この章では、コンテナーを実行する際に最適なエクスペリエンスを実現するために、Red Hat build of Keycloak コンテナーイメージを最適化して実行する方法を説明します。

警告

この章は、OpenShift 環境で実行するイメージのビルドにのみ適用されます。このイメージは OpenShift 環境のみをサポートします。他の Kubernetes ディストリビューションで実行する場合はサポートされません。

5.1. カスタマイズおよび最適化されたコンテナーイメージの作成

デフォルトの Red Hat build of Keycloak コンテナーイメージは、すぐに設定および最適化できる状態で出荷されます。

Red Hat build of Keycloak コンテナーを最適に起動するには、コンテナーのビルド中に build ステップを実行してイメージをビルドします。この手順を実行することで、後に続くコンテナーイメージの各起動フェーズで時間を節約できます。

5.1.1. 最適化された Red Hat build of Keycloak Containerfile の記述

次の Containerfile は、ヘルスおよびメトリクスのエンドポイントとトークン交換機能を有効にし、PostgreSQL データベースを使用する、事前設定済みの Red Hat build of Keycloak イメージを作成します。

Containerfile:

FROM registry.redhat.io/rhbk/keycloak-rhel9:26.2 AS builder

# Enable health and metrics support
ENV KC_HEALTH_ENABLED=true
ENV KC_METRICS_ENABLED=true

# Configure a database vendor
ENV KC_DB=postgres

WORKDIR /opt/keycloak
# for demonstration purposes only, please make sure to use proper certificates in production instead
RUN keytool -genkeypair -storepass password -storetype PKCS12 -keyalg RSA -keysize 2048 -dname "CN=server" -alias server -ext "SAN:c=DNS:localhost,IP:127.0.0.1" -keystore conf/server.keystore
RUN /opt/keycloak/bin/kc.sh build

FROM registry.redhat.io/rhbk/keycloak-rhel9:26.2
COPY --from=builder /opt/keycloak/ /opt/keycloak/

# change these values to point to a running postgres instance
ENV KC_DB=postgres
ENV KC_DB_URL=<DBURL>
ENV KC_DB_USERNAME=<DBUSERNAME>
ENV KC_DB_PASSWORD=<DBPASSWORD>
ENV KC_HOSTNAME=localhost
ENTRYPOINT ["/opt/keycloak/bin/kc.sh"]
Copy to Clipboard Toggle word wrap

ビルドプロセスには複数の段階が含まれます。

  • build コマンドを実行してサーバーのビルドオプションを設定し、最適化されたイメージを作成します。
  • build 段階で生成されたファイルが、新しいイメージにコピーされます。
  • 最後のイメージで、ホスト名とデータベースの追加の設定オプションが設定されているため、コンテナーの実行時にそれらを再度設定する必要はありません。
  • エントリーポイントで、kc.sh により、すべてのディストリビューションのサブコマンドがアクセス可能になります。

カスタムプロバイダーは、JAR ファイルを /opt/keycloak/providers ディレクトリーに含めるステップを定義するだけでインストールできます。このステップは、以下のように、build コマンドを RUNs 行の前に配置する必要があります。

# A example build step that downloads a JAR file from a URL and adds it to the providers directory
FROM registry.redhat.io/rhbk/keycloak-rhel9:26.2 as builder

...

# Add the provider JAR file to the providers directory
ADD --chown=keycloak:keycloak --chmod=644 <MY_PROVIDER_JAR_URL> /opt/keycloak/providers/myprovider.jar

...

# Context: RUN the build command
RUN /opt/keycloak/bin/kc.sh build
Copy to Clipboard Toggle word wrap

5.1.2. 追加の RPM パッケージをインストールする

FROM registry.redhat.io/rhbk/keycloak-rhel9 段階で新しいソフトウェアをインストールしようとすると、microdnfdnf、さらには rpm がインストールされていないことがわかります。また、利用できるパッケージは非常に少なく、bash シェルと Red Hat build of Keycloak 自体の実行に必要なものしかありません。これは、Red Hat build of Keycloak の攻撃対象領域を減らすセキュリティー強化対策によるものです。

まず、ユースケースを別の方法で実装できるかどうかを検討し、なるべく最終的なコンテナーへの新規 RPM のインストールを回避します。

  • Containerfile 内の RUN curl 命令は、リモート URL をネイティブにサポートしているため、ADD に置き換えることができます。
  • 一部の一般的な CLI ツールは、Linux ファイルシステムを創造的に使用することで置き換えることができます。たとえば、ip addr show tap0cat /sys/class/net/tap0/address にすることができます。
  • RPM を必要とするタスクはイメージビルドの前の段階に移動し、代わりに結果をコピーできます。

以下は例です。前のビルド段階で update-ca-trust を実行し、後の段階に結果をコピーします。

FROM registry.access.redhat.com/ubi9 AS ubi-micro-build
COPY mycertificate.crt /etc/pki/ca-trust/source/anchors/mycertificate.crt
RUN update-ca-trust

FROM registry.redhat.io/rhbk/keycloak-rhel9
COPY --from=ubi-micro-build /etc/pki /etc/pki
Copy to Clipboard Toggle word wrap

絶対に必要な場合は、ubi-micro で確立された次の 2 段階のパターンに従い、新しい RPM をインストールできます。

FROM registry.access.redhat.com/ubi9 AS ubi-micro-build
RUN mkdir -p /mnt/rootfs
RUN dnf install --installroot /mnt/rootfs <package names go here> --releasever 9 --setopt install_weak_deps=false --nodocs -y && \
    dnf --installroot /mnt/rootfs clean all && \
    rpm --root /mnt/rootfs -e --nodeps setup

FROM registry.redhat.io/rhbk/keycloak-rhel9
COPY --from=ubi-micro-build /mnt/rootfs /
Copy to Clipboard Toggle word wrap

このアプローチでは chroot (/mnt/rootfs) を使用します。これにより、指定したパッケージとその依存関係のみがインストールされるため、当て推量で作業することなく、それらを第 2 段階に簡単にコピーできます。

警告

一部のパッケージには、依存関係の大きなツリーがあります。新しい RPM をインストールすると、コンテナーの攻撃対象領域が意図せず増大する可能性があります。インストールされているパッケージのリストを慎重に確認してください。

5.1.3. カスタム ENTRYPOINT シェルスクリプト

カスタムエントリーポイントスクリプトを使用する場合は、正常なシャットダウンに不可欠な終了シグナルを受信するために、Red Hat build of Keycloak を exec で起動します。

ENTRYPOINT シェルスクリプトの正しいアプローチ

#!/bin/bash

# (add your custom logic here)

# Run the 'exec' command as the last step of the script.
# As it replaces the current shell process, no additional shell commands will run after the 'exec' command.
exec /opt/keycloak/bin/kc.sh start "$@"
Copy to Clipboard Toggle word wrap

警告

exec を使用しない場合、シェルスクリプトはコンテナー内で PID 1 のままとなり、SIGTERM などのシグナルが Red Hat build of Keycloak に到達するのをブロックします。これにより、正常なシャットダウンが妨げられ、キャッシュの不整合やデータの損失が発生する可能性があります。

5.1.4. コンテナーイメージのビルド

実際のコンテナーイメージをビルドするには、Containerfile を含むディレクトリーから次のコマンドを実行します。

podman build . -t mykeycloak
Copy to Clipboard Toggle word wrap
注記

Podman はイメージの作成またはカスタマイズにのみ使用できます。実稼働環境での Red Hat build of Keycloak の実行に Podman はサポートされていません。

5.1.5. 最適化された Red Hat build of Keycloak コンテナーイメージの起動

イメージを起動するには、以下を実行します。

podman run --name mykeycloak -p 8443:8443 -p 9000:9000 \
        -e KC_BOOTSTRAP_ADMIN_USERNAME=admin -e KC_BOOTSTRAP_ADMIN_PASSWORD=change_me \
        mykeycloak \
        start --optimized --hostname=localhost
Copy to Clipboard Toggle word wrap

Red Hat build of Keycloak は、セキュアな HTTPS 通信のみを使用して実稼働モードで開始され、https://localhost:8443 で使用できます。

ヘルスチェックエンドポイントは、https://localhost:9000/healthhttps://localhost:9000/health/readyhttps://localhost:9000/health/live で使用できます。

https://localhost:9000/metrics を開くと、モニタリングソリューションで使用できる運用メトリクスを含むページが表示されます。

5.1.6. Docker の既知の問題

  • RUN dnf install コマンドに時間がかかり過ぎていると思われる場合は、Docker systemd サービスのファイル制限 LimitNOFILE が正しく設定されていない可能性があります。適切な値 (1024000 など) を使用するようにサービス設定を更新するか、RUN コマンドで ulimit を直接使用してください。
...
RUN ulimit -n 1024000 && dnf install --installroot ...
...
Copy to Clipboard Toggle word wrap
  • プロバイダー JAR が含まれており、プロバイダー JAR が変更されたという通知が表示されてコンテナーが start --optimized に失敗する場合、Docker がファイル変更タイムスタンプを切り捨てたか、build コマンドで記録された内容から実行時に表示される内容に変更したことが失敗の原因です。その場合は、build を実行する前に、touch コマンドを使用して選択した既知のタイムスタンプをイメージが使用するように強制する必要があります。
...
# ADD or copy one or more provider jars
ADD --chown=keycloak:keycloak --chmod=644 some-jar.jar /opt/keycloak/providers/
...
RUN touch -m --date=@1743465600 /opt/keycloak/providers/*
RUN /opt/keycloak/bin/kc.sh build
...
Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat