Deploying Quarkus Java applications to OpenShift by using a Docker build strategy
As an application developer, you can deploy your applications to OpenShift by using the Docker build strategy as a deployment option.
This stategy builds the artifacts outside the OpenShift cluster, locally or in a CI environment, and provides them to the OpenShift build system together with a Dockerfile. The artifacts include JAR files or a native executable. The OpenShift cluster builds the container and provides it as an image stream.
This functionality is provided by the quarkus-openshift extension.
If you want to use a custom Dockerfile, add the file to the src/main/docker directory or any location inside the module.
Additionally, set the path to your Dockerfile by using the quarkus.openshift.jvm-dockerfile property.
Pré-requisitos
-
You have OpenJDK 17 or 21 installed.
-
You have set the
JAVA_HOMEenvironment variable to the location of the Java SDK. -
You have Apache Maven 3.9.11 installed.
-
You have a Quarkus project that includes the
quarkus-openshiftextension. -
You have access to a OpenShift cluster and the latest compatible version of the
ocCLI tool installed. -
You are working in the correct OpenShift project namespace.
Procedimento
-
Set the Docker build strategy in your
application.propertiesconfiguration file:quarkus.openshift.build-strategy=docker -
Optional: Set the following properties in the
application.propertiesfile, based on your environment:-
If you are using an untrusted certificate, enable certificate trust for the
KubernetesClient:quarkus.kubernetes-client.trust-certs=true -
To expose the service and create an OpenShift route, set the following property:
quarkus.openshift.route.expose=true -
To use a custom Dockerfile instead of the pregenerated Dockerfiles, set the path to your Dockerfile:
quarkus.openshift.jvm-dockerfile=<path_to_your_dockerfile>For example, to specify a custom Dockerfile named
Dockerfile.custom-jvm:quarkus.openshift.jvm-dockerfile=src/main/resources/Dockerfile.custom-jvm
-
-
Package and deploy your application to the current OpenShift project:
./mvnw clean package -Dquarkus.openshift.deploy=true
Verification
The following verification steps use the openshift-helloworld example application.
-
Display the list of pods associated with your current OpenShift project:
oc get podsNAME READY STATUS RESTARTS AGE openshift-helloworld-1-build 0/1 Completed 0 11m openshift-helloworld-1-deploy 0/1 Completed 0 10m openshift-helloworld-1-gzzrx 1/1 Running 0 10m -
To get the log output for your application’s pod, use the
oc logs -fcommand with its name. The following example uses theopenshift-helloworld-1-gzzrxpod name, which corresponds to the latest pod prefixed with the name of your application:oc logs -f openshift-helloworld-1-gzzrxStarting the Java application using /opt/jboss/container/java/run/run-java.sh ... INFO exec -a "java" java -Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager -XX:MaxRAMPercentage=50.0 -XX:+UseParallelGC -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:+ExitOnOutOfMemoryError -cp "." -jar /deployments/quarkus-run.jar __ ____ __ _____ ___ __ ____ ______ --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \ --\___\_\____/_/ |_/_/|_/_/|_|\____/___/ 2024-09-17 10:23:25,254 INFO [io.quarkus] (main) getting-started 1.0.0-SNAPSHOT on JVM (powered by Quarkus {QuarkusCore}) started in 0.653s. Listening on: http://0.0.0.0:8080 2024-09-17 10:23:25,281 INFO [io.quarkus] (main) Profile prod activated. 2024-09-17 10:23:25,281 INFO [io.quarkus] (main) Installed features: [cdi, kubernetes, rest, smallrye-context-propagation, vertx] -
Get a list of services:
oc get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE openshift-helloworld ClusterIP 172.30.64.57 <none> 80/TCP 14m -
Get a URL to test your application. To do so, ensure you have exposed an OpenShift route by setting the
quarkus.openshift.route.expose=trueproperty in theapplication.propertiesfile before building the application.oc get routesNAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD openshift-helloworld openshift-helloworld-username-dev.apps.sandbox-m2.ll9k.p1.openshiftapps.com openshift-helloworld http NoneBe aware that the route is now listening on port 80 and is no longer on port 8080.
You can test the application demonstrated in this example with a web browser or a terminal by using
curland the complete URL output fromoc get routes, that is,http://openshift-helloworld-username-dev.apps.sandbox-m2.ll9k.p1.openshiftapps.com.For example:
curl http://openshift-helloworld-username-dev.apps.sandbox-m2.ll9k.p1.openshiftapps.com.