[JAVA] Création d'image Docker de l'extension Keycloak et test de performances par Gatling

Aperçu

Keycloak est un système d'infrastructure d'authentification OSS qui prend en charge OAuth2.0, OIDC, etc. Keycloak peut également être lié à un compte d'un service qui fournit un fournisseur Open ID (OP). Par exemple, vous pouvez vous connecter depuis votre compte Google ou Facebook.

La description de l'authentification et de Keycloak est décrite en détail dans les articles suivants. https://www.atmarkit.co.jp/ait/articles/1708/31/news011.html

Dans cet article, j'écrirai sur le développement de l'extension de Keycloak.


Keycloak est construit à partir d'un framework appelé SPI, qui vous permet d'étendre les fonctionnalités existantes.

Pour vérifier le fonctionnement de l'extension pendant le développement, il est nécessaire de construire avec Maven, de déployer sur le serveur Keycloak et de modifier le fichier de paramètres.

Cette fois, je vise à faire cette série de travaux lors de la création d'une image Decker.

De plus, avec cette méthode, vous n'avez pas besoin de définir Maven, Java, etc. localement, et vous pouvez développer et tester si seul Docker est installé.

Enfin, l'image d'exemple du résultat du test de performance par Gatling est ajoutée pour référence.

Commençons par créer une image Docker.

Créer une image Docker Keycloak personnalisée

1. Code de développement

Cette fois, nous le baserons sur l'exemple de code suivant de l'extension Keycloak.

https://github.com/keycloak/keycloak/tree/master/examples/providers/domain-extension

Comme vous pouvez le voir dans l'exemple de code README.md, les étapes suivantes sont nécessaires pour vérifier l'opération.

  1. Module de construction (installation propre mvn)
  2. Déployez le module par jboss-cli.sh
  1. Ajoutez le fournisseur au fichier de configuration standalone / configuration / standalone.xml
  2. Démarrez / redémarrez le serveur Keycloak

2. Créez un fichier Dockerfile pour la création d'image

Créez un fichier Dockerfile afin de pouvoir effectuer toutes les étapes ci-dessus lors de la création d'une image.

# Dockerfile
FROM maven:3.6.3-jdk-8 as builder

WORKDIR /usr/src/domain-extension

COPY ./pom.xml /usr/src/domain-extension/
RUN mvn -B package

COPY ./src/ /usr/src/domain-extension/
RUN mvn -B package

FROM jboss/keycloak:8.0.1
USER jboss

WORKDIR /opt/jboss/keycloak
COPY --from=builder /usr/src/domain-extension/target/domain-extension-example.jar /opt/jboss/keycloak/target/
COPY cli/domain-extension-provider.cli /opt/jboss/keycloak/cli/

RUN bin/jboss-cli.sh --command="module add --name=org.keycloak.examples.domain-extension-example --resources=target/domain-extension-example.jar --dependencies=org.keycloak.keycloak-core,org.keycloak.keycloak-services,org.keycloak.keycloak-model-jpa,org.keycloak.keycloak-server-spi,org.keycloak.keycloak-server-spi-private,javax.ws.rs.api,javax.persistence.api,org.hibernate,org.javassist,org.liquibase" && \
    bin/jboss-cli.sh --file=cli/domain-extension-provider.cli && \
    rm -rf /opt/jboss/keycloak/standalone/configuration/standalone_xml_history

(Étant donné que cette version utilise la résolution des dépendances de Maven et le cache de construction en premier, le temps de construction sera beaucoup plus rapide en utilisant le cache pour la deuxième version et les versions suivantes.)

Avant de créer l'image Docker ci-dessus, vous devez ajouter le contenu suivant au fichier de configuration comme indiqué dans README.md.


<providers>
    ...
    <provider>module:org.keycloak.examples.domain-extension-example</provider>
</providers>

Cela peut être fait à partir de jboss-cli.sh.

Commencez par préparer les fichiers suivants.

cli/domain-extension-provider.cli

embed-server --server-config=standalone.xml --std-out=echo
/subsystem=keycloak-server/:write-attribute(name=providers, value=["classpath:${jboss.home.dir}/providers/*","module:org.keycloak.examples.domainextension"])
stop-embedded-server

Vous pouvez voir que le fichier ci-dessus a été ajouté au fichier Dockerfile pour être exécuté à partir de jboss-cli.sh.

3. Créer une image Docker

docker build -t keycloak-domain-extension .

4. Démarrez le serveur Keycloak

docker run -p 8080:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin --name keycloak keycloak-domain-extension

Avec cela, je pense que cela conduira à une amélioration de l'efficacité du développement en effectuant tout le développement et le déploiement à partir de Docker Image.


Test de performance

En ce qui concerne le test de performance, j'ai pu obtenir des informations très détaillées sur le résultat de l'exécution à partir du code source, je vais donc attacher un exemple d'image du résultat. La méthode de test détaillée, etc. peut être référencée à partir de la partie test du code source.

https://gatling.io/ https://github.com/keycloak/keycloak/tree/master/testsuite/performance

Les tests de performance sont effectués à l'aide de gatling afin que vous puissiez voir à partir de l'image des résultats des tests, mais vous pouvez voir que des données de test très détaillées sont disponibles.

Recommended Posts

Création d'image Docker de l'extension Keycloak et test de performances par Gatling
Microservices avec Docker et Cloud Performance
Créer une image Android pour Orange Pi 4 avec Docker
Peut-être que ça marche! Créez une image avec Docker et partagez-la!
Exemple de code pour la simulation de base et les tests avec Mockito 3 + JUnit 5
Image de l'application Spring Boot à l'aide de jib-maven-plugin et lancez-la avec Docker
Créez une image Docker pour redoc-cli et enregistrez-la sur Docker Hub
Construction d'environnement avec Docker pour les débutants
Hello World avec Docker et langage C
2. Créez une image Docker et enregistrez le registre
Redémarrez Apache avec l'image php-apache de Docker
Attendez que PostgreSQL démarre avec Docker, puis démarrez le service WEB