ããã¯ããªã«ãããããŠæžãããã®ïŒ
ãããŸã§WildFly Maven Pluginãã¡ããã¡ãããšäœ¿ã£ãŠããŠããã®ã§ãããããããã°ããã䜿ã£ãŠã³ã³ããã€ã¡ãŒãžãäœã£ãããšããªããªãš
æããŸããŠã
æ å ±ãç¥ããªãã®ã§ã確èªããŠã詊ããŠã¿ãããšã«ããŸããã
wildfly:imageãŽãŒã«
WildFly Maven Pluginã§ã³ã³ããã€ã¡ãŒãžãäœæããã«ã¯ãwildfly:imageãŽãŒã«ã䜿ããŸãã
WildFly Maven Plugin – wildfly:image
ããã¯WildFly Maven Pluginã§ããããžã§ãã³ã°ããWildFlyãšãããã€ã¡ã³ããããã³ã³ããã€ã¡ãŒãžãäœæããã³pushãããŽãŒã«ã§ãã
wildfly:imageãŽãŒã«ã¯packageãŽãŒã«ãæ¡åŒµãããã®ã§ãWildFlyãããããžã§ãã³ã°ãããããã€ã¡ã³ãã®ãããã€åŸã«
ã³ã³ããã€ã¡ãŒãžã®ãã«ããpushãè¡ãããŸãã
The image goal extends the package goal, building and pushing the image occurs after the server is provisioned and the deployment deployed in it.
å®è¡ã¯Dockerã®ãã€ããªãŒã«äŸåããŠãããšãããŠããŸããã€ãŸããå®è¡ã«ã¯dockerã³ãã³ããå¿
èŠã ãšããããšã§ããã
The image goal relies on a Docker binary to execute all image commands (build, login, push).
ããã¯dockerBinaryãšãããã©ã¡ãŒã¿ãŒã§podmanãªã©ã«ä»£æ¿ããããšãã§ããŸãã
ãªããBootable JARã§ããã±ãŒãžã³ã°ããŠãç¡èŠãããããã§ãã
Note that if a WildFly Bootable JAR is packaged, it is ignored when building the image.
èšå®ã®ãµã³ãã«ã¯ãã¡ãã§ãã
WildFly Maven Plugin – Build and push your application in a container image
ããã§ã¯ãç°¡åãªJakarta EEã¢ããªã±ãŒã·ã§ã³ãäœæããŠè©ŠããŠã¿ãŸãããã
ç°å¢
ä»åã®ç°å¢ã¯ãã¡ãã
$ java --version openjdk 21.0.5 2024-10-15 OpenJDK Runtime Environment (build 21.0.5+11-Ubuntu-1ubuntu124.04) OpenJDK 64-Bit Server VM (build 21.0.5+11-Ubuntu-1ubuntu124.04, mixed mode, sharing) $ mvn --version Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937) Maven home: $HOME/.sdkman/candidates/maven/current Java version: 21.0.5, vendor: Ubuntu, runtime: /usr/lib/jvm/java-21-openjdk-amd64 Default locale: ja_JP, platform encoding: UTF-8 OS name: "linux", version: "6.8.0-51-generic", arch: "amd64", family: "unix"
ã¢ããªã±ãŒã·ã§ã³ãäœæãã
ä»åã¯Jakarta RESTful Web ServicesïŒä»¥éJAX-RSïŒã䜿ã£ãç°¡åãªã¢ããªã±ãŒã·ã§ã³ãäœæããããšã«ããŸãã
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.littlewings</groupId> <artifactId>wildfly-maven-plugin-container-image</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <properties> <maven.compiler.release>21</maven.compiler.release> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.wildfly.bom</groupId> <artifactId>wildfly-ee-with-tools</artifactId> <version>35.0.0.Final</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>jakarta.ws.rs</groupId> <artifactId>jakarta.ws.rs-api</artifactId> <scope>provided</scope> </dependency> </dependencies> <build> <finalName>ROOT</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.4.0</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> <plugin> <groupId>org.wildfly.plugins</groupId> <artifactId>wildfly-maven-plugin</artifactId> <version>5.1.1.Final</version> <executions> <execution> <goals> <goal>image</goal> </goals> </execution> </executions> <configuration> <overwrite-provisioned-server>true</overwrite-provisioned-server> <discover-provisioning-info> <version>35.0.0.Final</version> </discover-provisioning-info> <!-- ããšã§ --> </configuration> </plugin> </plugins> </build> </project>
WildFly Maven Pluginã远å ããwildfly:imageãŽãŒã«ãå®è¡ããããã«èšå®ããŠããŸããããã§mvn packageæã«ã³ã³ããã€ã¡ãŒãžã
äœæããããã«ãªããŸãã
<executions> <execution> <goals> <goal>image</goal> </goals> </execution> </executions>
ãã¡ãã¯WildFly Glowã䜿ãããã«ããŠããã ãã§ããããã®æç¹ã§ã¯ãã®ãŸãŸãããŸãã
<configuration> <overwrite-provisioned-server>true</overwrite-provisioned-server> <discover-provisioning-info> <version>35.0.0.Final</version> </discover-provisioning-info> <!-- ããšã§ --> </configuration>
JAX-RSã®æå¹åã
src/main/java/org/littlewings/wildfly/RestApplication.java
package org.littlewings.wildfly; import jakarta.ws.rs.ApplicationPath; import jakarta.ws.rs.core.Application; @ApplicationPath("/") public class RestApplication extends Application { }
JAX-RSãªãœãŒã¹ã¯ã©ã¹ã
src/main/java/org/littlewings/wildfly/HelloResource.java
package org.littlewings.wildfly; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; @Path("/hello") public class HelloResource { @GET @Produces(MediaType.TEXT_PLAIN) public String message() { return "Hello World"; } }
åäœç¢ºèªããŠãããŸãã
$ mvn compile wildfly:dev
OKã§ããã
$ curl localhost:8080/hello Hello World
ããã§æºåã¯å®äºã§ãã
WildFly Maven Pluginã§ã³ã³ããã€ã¡ãŒãžãäœæãã
ã§ã¯ãã³ã³ããã€ã¡ãŒãžãäœæããŸãããã
以äžã®ããã«èšå®ããŠããã®ã§
<executions> <execution> <goals> <goal>image</goal> </goals> </execution> </executions>
mvn packageã§ã³ã³ããã€ã¡ãŒãžãäœæã§ããŸãã
$ mvn package
èšå®ããªãå Žåã¯ãpackageã«ç¶ããŠwildfly:imageãå®è¡ãããšããã§ãããã
$ mvn package wildfly:image
å®è¡ãããšãéäžã§ãããªè¡šç€ºãåºãŠããŸããã
[INFO] Generating Dockerfile /path/to/wildfly-maven-plugin-container-image/target/Dockerfile from base image quay.io/wildfly/wildfly-runtime:latest [INFO] Building application image wildfly-maven-plugin-container-image:latest using docker. [INFO] Executing the following command to build application image: 'docker build -t wildfly-maven-plugin-container-image:latest .'
quay.io/wildfly/wildfly-runtime:latestãšããã®ãããŒã¹ã€ã¡ãŒãžã®ããã§ãã
Dockerfileãäœæãããããã§ãã
target/Dockerfile
FROM quay.io/wildfly/wildfly-runtime:latest COPY --chown=jboss:root server $JBOSS_HOME RUN chmod -R ug+rwX $JBOSS_HOME COPY --chown=jboss:root ROOT.war $JBOSS_HOME/standalone/deployments/ROOT.war
ã³ã³ããã€ã¡ãŒãžãã§ããŸãããããã©ã«ãã®ã€ã¡ãŒãžåã¯ã¢ãŒãã£ãã¡ã¯ãåã§ãã¿ã°ã¯latestã¿ããã§ããã
[INFO] Successfully built application image wildfly-maven-plugin-container-image:latest
å®è¡ã
$ docker container run -it --rm -p 8080:8080 wildfly-maven-plugin-container-image:latest
確èªã
$ curl localhost:8080/hello Hello World
OKã§ãã
ã³ã³ããã®äžèº«ãèŠãŠã¿ã
å°ãã³ã³ããã®äžèº«ãèŠãŠã¿ãŸãããã
$ docker container run -it --rm -p 8080:8080 --entrypoint bash wildfly-maven-plugin-container-image:latest
/etc/os-releaseã
$ cat /etc/os-release NAME="Red Hat Enterprise Linux" VERSION="9.5 (Plow)" ID="rhel" ID_LIKE="fedora" VERSION_ID="9.5" PLATFORM_ID="platform:el9" PRETTY_NAME="Red Hat Enterprise Linux 9.5 (Plow)" ANSI_COLOR="0;31" LOGO="fedora-logo-icon" CPE_NAME="cpe:/o:redhat:enterprise_linux:9::baseos" HOME_URL="https://www.redhat.com/" DOCUMENTATION_URL="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9" BUG_REPORT_URL="https://issues.redhat.com/" REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 9" REDHAT_BUGZILLA_PRODUCT_VERSION=9.5 REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux" REDHAT_SUPPORT_PRODUCT_VERSION="9.5"
Javaã¯ãçŸæç¹ã§ã¯21ã§ããã
$ java --version openjdk 21.0.5 2024-10-15 LTS OpenJDK Runtime Environment (Red_Hat-21.0.5.0.11-1) (build 21.0.5+11-LTS) OpenJDK 64-Bit Server VM (Red_Hat-21.0.5.0.11-1) (build 21.0.5+11-LTS, mixed mode, sharing)
èšå®ã倿ŽããŠã¿ã
ããããã¯å°ãWildFly Maven Pluginã®èšå®ãå€ããŠã¿ãŸãã
ã€ã¡ãŒãžåãšã¿ã°ãæå®ããŠã¿ãŸããããimage-nameãštagã§æå®ã§ããŸãã
<configuration> <overwrite-provisioned-server>true</overwrite-provisioned-server> <discover-provisioning-info> <version>35.0.0.Final</version> </discover-provisioning-info> <image-name>my-image</image-name> <tag>0.0.1</tag> </configuration>
ããã±ãŒãžã³ã°ã
$ mvn package
ãã®ããã«ãªããŸããã
[INFO] Successfully built application image my-image:0.0.1
JDKã®ããŒãžã§ã³ãæå®ãã
jdk-versionã§JDKã®ããŒãžã§ã³ãæå®ã§ããŸããä»åã¯21ãæå®ã
<configuration> <overwrite-provisioned-server>true</overwrite-provisioned-server> <discover-provisioning-info> <version>35.0.0.Final</version> </discover-provisioning-info> <jdk-version>21</jdk-version> </configuration>
ããã±ãŒãžã³ã°ã
$ mvn package
éäžã®æ§åã
[INFO] Generating Dockerfile /path/to/wildfly-maven-plugin-container-image/target/Dockerfile from base image quay.io/wildfly/wildfly-runtime:latest-jdk21 [INFO] Building application image wildfly-maven-plugin-container-image:latest using docker. [INFO] Executing the following command to build application image: 'docker build -t wildfly-maven-plugin-container-image:latest .'
ããŒã¹ã€ã¡ãŒãžãquay.io/wildfly/wildfly-runtime:latest-jdk21ã«ãªããŸããã
ãã®ä»
å®éã«äœ¿ãæã¯ãããªãšããã§ããããã
<configuration> <overwrite-provisioned-server>true</overwrite-provisioned-server> <discover-provisioning-info> <version>35.0.0.Final</version> </discover-provisioning-info> <image-name>${project.artifactId}</image-name> <tag>${project.version}</tag> <jdk-version>21</jdk-version> </configuration>
ã¬ãžã¹ããªãŒã«pushããå Žåã¯ãpushãtrueã«ããŠãã¬ãžã¹ããªãŒãæå®ããå Žåã¯registryãæå®ããããã§ãã
<configuration> <overwrite-provisioned-server>true</overwrite-provisioned-server> <discover-provisioning-info> <version>35.0.0.Final</version> </discover-provisioning-info> <push>true</push> <registry>my-registry</registry> </configuration>
registryãèšå®ããå Žåãã€ã¡ãŒãžåã«ã¬ãžã¹ããªãŒåãå
¥ãããã§ãã
ããŒã¹ã€ã¡ãŒãžã«ã€ããŠ
èšå®ãèŠãŠããã®ã§ãããããŒã¹ã€ã¡ãŒãžã¯å€æŽã§ããªãããã§ãã
以äžã§åºå®ãããŠããããã§ããã
å ã»ã©å°ãäžèº«ãèŠãŸããããããã¯UBIã®ããã§ãã
ãããŠjdk-versionãæå®ããæã«ã¯ãquay.io/wildfly/wildfly-runtime:latest-${jdk-version}ãããŒã¹ã€ã¡ãŒãžã«ãªããŸãã
çŸæç¹ã§ã¯ã11ã17ã21ãæå®ã§ããããã§ããããããããŒãžã§ã³ãŸã§æå®ã§ããŠããããšæãã®ã§ããâŠlatest-ã®éšåã¯å€ããããŸãããã
ãã®ã€ã¡ãŒãžã®ããšã¯ããUBI9 runtime imageããšããŠç޹ä»ãããŠããŸãã
New WildFly S2I and Runtime Multi-arch Images
WildFly S2I (Source to Image) builder and runtime images documentation
ãwildfly-runtimeããšããååãªã®ã§æåã¯ã©ãããååšãªã®ãããããããªãã£ãã®ã§ãããWildFlyã¯ãããŸã§ããããžã§ãã³ã°ãããã®ã
䜿çšãããã¡ãã¯UBIãšOpenJDKãå«ãŸããã€ã¡ãŒãžã ãšããããšã§ããã
wildfly-runtimeèªäœã®å®çŸ©ã«ã€ããŠã¯ããã¡ããèŠããšãããšæããŸãã
ããŒã¹ã€ã¡ãŒãžã¯registry.access.redhat.com/ubi9/ubi-minimalã®ããã§ãã
https://github.com/wildfly/wildfly-s2i/blob/main/wildfly-runtime-image/image.yaml
ãããã«
WildFly Maven Pluginã§ã³ã³ããã€ã¡ãŒãžãäœæããŠã¿ãŸããã
ã³ã³ããã€ã¡ãŒãžã®äœæèªäœã¯ç°¡åã§ãããã䜿ãããŠããããŒã¹ã€ã¡ãŒãžãããããããªãã£ãã®ã§ãããã調ã¹ããããŠã¿ãŸããã
ã ãããå 容ã¯ããã£ãã®ã§ãä»åŸWildFlyã§ã³ã³ããã€ã¡ãŒãžãäœãå Žåã«ã¯äœ¿ã£ãŠãããŸãããã