Deploying JBoss EAP applications on OpenShift

Red Hat provides a container image for JBoss Enterprise Application Platform (JBoss EAP) that is specifically designed for use with OpenShift. In this tutorial we will learn how to pull the image from the registry and use it to deploy an application on OpenShift using S2I.

Setting up an OpenShift project

There are several strategies you can use to create an EAP application: in this example we will show how to use OpenShift Templates. First off, let’s create an openshift project for our example:

oc new-project eap-demo

Next, in order to use Red Hat images on OpenShift you need to access one of its Registries. The recommended registry to use is “registry.redhat.io” which requires authentication using your Red Hat Portal login. To verify that you are capable of authentication, you can log-in to the Registry using either docker or podman (Check this tutorial for an overview of Podman: Getting started with Podman)

docker login registry.redhat.io
Username: username
Password: password

Login Succeeded!

Then, for environments where credentials will be shared, such as deployment systems, it is recommended to create a secret with a Service Account Tokens. A Service Account can be created at the following link: https://access.redhat.com/terms-based-registry/

Click on “New Service Account” and fill the Service account name:

jboss eap on openshift

Next, download it and execute it:

oc create -f 6340056_eapdemo_account.yaml

The secret will be added to your project. Now, you should be able to import the eap74-openjdk11-image-stream:

oc replace --force -f \
https://raw.githubusercontent.com/jboss-container-images/jboss-eap-openshift-templates/eap74/eap74-openjdk11-image-stream.json

The above command should complete with the following output:

imagestream.image.openshift.io/jboss-eap74-openjdk11-openshift replaced
imagestream.image.openshift.io/jboss-eap74-openjdk11-runtime-openshift replaced

Let’s now import the EAP 7.4 basic and https Templates so that we can use it to instantiate our application:

for resource in \
  eap74-basic-s2i.json \
  eap74-https-s2i.json 
do
  oc replace --force -f \
https://raw.githubusercontent.com/jboss-container-images/jboss-eap-openshift-templates/eap74/templates/${resource}
done

Great, now we will add an example application to our project. The application is the well-known kitchensink app, available in the EAP Quickstarts. You can create it as follows:

oc new-app --template=eap74-basic-s2i -p IMAGE_STREAM_NAMESPACE=eap-demo -p EAP_IMAGE_NAME=jboss-eap74-openjdk11-openshift:7.4.0 -p EAP_RUNTIME_IMAGE_NAME=jboss-eap74-openjdk11-runtime-openshift:7.4.0 -p SOURCE_REPOSITORY_URL=https://github.com/jboss-developer/jboss-eap-quickstarts -p SOURCE_REPOSITORY_REF=7.4.x -p CONTEXT_DIR=kitchensink

Verify that the Pod starts up:

$ oc get pods
NAME                              READY     STATUS      RESTARTS   AGE
eap-app-1-deploy                  1/1       Running     0          27s
eap-app-1-hf5sz                   0/1       Running     0          25s

The Route to access the application should be available as well:

oc get routes
NAME      HOST/PORT                           PATH   SERVICES   PORT    TERMINATION     WILDCARD
eap-app   eap-app-eap-demo.apps-crc.testing          eap-app    <all>   edge/Redirect   None

You can reach the application at: eap-app-eap-demo.apps-crc.testing:

jboss eap on openshift

Using a slimmed EAP version

The EAP Project is provisioned through the Galleon project. You can choose to provision specific Galleon layers in your EAP image so that you will have an Image with a smaller footprint. To learn more about Galleon Layers I recommend checking this article: Provisioning WildFly with Galleon

To provision specific Galleon layers on OpenShift, use the Template parameter GALLEON_PROVISION_LAYERS and list your layers separated by a comma. For example, to build up the helloworld application from the quickstarts using just the jaxrs-server layer you can run the following command:

oc new-app --template=eap74-basic-s2i -p IMAGE_STREAM_NAMESPACE=eap-demo -p EAP_IMAGE_NAME=jboss-eap74-openjdk11-openshift:7.4.0 -p EAP_RUNTIME_IMAGE_NAME=jboss-eap74-openjdk11-runtime-openshift:7.4.0 -p SOURCE_REPOSITORY_URL=https://github.com/jboss-developer/jboss-eap-quickstarts -p SOURCE_REPOSITORY_REF=7.4.x -p GALLEON_PROVISION_LAYERS=jaxrs-server -p CONTEXT_DIR=helloworld

Recommended Articles

JBoss EAP 8.1 Top 10 New Features, Changes & Migration Guide

Explore the top 10 new features in Red Hat JBoss EAP 8.1: Java 21 support, Jakarta EE 10, WildFly Channel provisioning, OpenTelemetry tracing, OIDC enhancements, and cloud optimizations.

Windup: Migrate Your JBoss EAP 7 Application to JBoss EAP 8 with Detailed Reports and Migration Steps

Learn how to use Windup for a migration report from JBoss EAP 7 to JBoss EAP 8. #Java #Middleware #CloudNative

Deploying Java Web Start Applications on WildFly/JBoss EAP 8

Learn how to deploy Java Web Start applications on WildFly/JBoss EAP 8 with this step-by-step guide.

JBoss Tutorial for Beginners: JBoss EAP and WildFly quickstart

Discover the basics of JBoss EAP and WildFly in this comprehensive guide. Learn about Jakarta EE compatibility, modular architecture, and more.