🐳

DockerコンテナのKeycloakをAmazon Correttoで起動する

2023/10/22に公開

概要

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 --from=corretto /usr/lib/jvm/java-17-amazon-corretto /usr/lib/jvm/java-17-amazon-corretto
COPY --from=ubi-micro-build /mnt/rootfs /
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=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

参考

https://www.keycloak.org/server/containers

Discussion