🐳
DockerコンテナのKeycloakをAmazon Correttoで起動する
概要
AWS上でDockerコンテナとしてKeycloakを動作させたく、AWSで動かすならJavaはAmazon Correttoを使ってみようということで試してみました。
前提
- Keycloakが接続するPostgreSQLをDockerコンテナとして起動済みです。
% docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e6ec4877d6fe postgresql "docker-entrypoint.s…" 3 hours ago Up 3 hours 0.0.0.0:5432->5432/tcp postgresql
環境
- Keycloak 22.0
Dockerfileの作成
KeycloakのDockerイメージをビルドするためのDockerfileを作成します。
Dockerfile
FROM registry.access.redhat.com/ubi9:9.2-755.1697625012 AS ubi-micro-build
RUN mkdir -p /mnt/rootfs
RUN dnf install --installroot /mnt/rootfs procps --releasever 9 --setopt install_weak_deps=false --nodocs -y && \
dnf --installroot /mnt/rootfs clean all && \
rpm --root /mnt/rootfs -e --nodeps setup
FROM amazoncorretto:17 as corretto
FROM quay.io/keycloak/keycloak:22.0 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
RUN /opt/keycloak/bin/kc.sh build
FROM quay.io/keycloak/keycloak:22.0
COPY /usr/lib/jvm/java-17-amazon-corretto /usr/lib/jvm/java-17-amazon-corretto
COPY /mnt/rootfs /
COPY /opt/keycloak/ /opt/keycloak/
# change these values to point to a running postgres instance
ENV KC_DB=postgres
ENV KC_DB_URL=jdbc:postgresql://host.docker.internal:5432/keycloak
ENV KC_DB_USERNAME=keycloak
ENV KC_DB_PASSWORD=secret
ENV KC_HOSTNAME=localhost
ENTRYPOINT ["/opt/keycloak/bin/kc.sh"]
procpsパッケージのインストール
上のDockerfileではKeycloakがCorrettoで起動していることをpsコマンドを使って確認するために、procpsパッケージをインストールしています。
RUN dnf install --installroot /mnt/rootfs procps --releasever 9 --setopt install_weak_deps=false --nodocs -y && \
Dockerイメージのビルド
作成したDockerfileからDockerイメージをビルドします。
% ls
Dockerfile
% docker build . -t keycloak
% docker images keycloak
REPOSITORY TAG IMAGE ID CREATED SIZE
keycloak latest 6e76a47ee35f 53 minutes ago 964MB
Keycloakコンテナの起動
JAVA_HOME環境変数でDockerfileでコピーしたCorrettoを指定します。
Javaの確認をしたいだけなのでstart-devで簡易的にKeycloakコンテナを起動します。
% docker run -d --name keycloak -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin -e JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto keycloak start-dev
% docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1335e6ed1238 keycloak "/opt/keycloak/bin/k…" 4 seconds ago Up 3 seconds 0.0.0.0:8080->8080/tcp, 8443/tcp keycloak
e6ec4877d6fe postgresql "docker-entrypoint.s…" 6 hours ago Up 6 hours 0.0.0.0:5432->5432/tcp postgresql
使用されたJavaの確認
Keycloakコンテナにログインし、psコマンドでKeycloakがCorrettoで起動されていることを確認します。
% docker exec -it keycloak /bin/bash
$ ps -ef | grep [j]ava
keycloak 1 0 1 12:50 ? 00:00:06 /usr/lib/jvm/java-17-amazon-corretto/bin/java -Dkc.config.built=true -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.err.encoding=UTF-8 -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8 -XX:+ExitOnOutOfMemoryError -Djava.security.egd=file:/dev/urandom -XX:+UseParallelGC -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.security=ALL-UNNAMED -Dkc.home.dir=/opt/keycloak/bin/.. -Djboss.server.config.dir=/opt/keycloak/bin/../conf -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Dquarkus-log-max-startup-records=10000 -cp /opt/keycloak/bin/../lib/quarkus-run.jar io.quarkus.bootstrap.runner.QuarkusEntryPoint --profile=dev start-dev
参考
Discussion