Running any Docker image on Openshift
In this tutorial we will learn how to run a Docker image, built from a Dockerfile, on Openshift.
So our starting point will be a simple Dockerfile definition which pulls the default “WildFly” image and adds some customizations to it. In our case, it simply adds a management user:
FROM jboss/wildfly
RUN /opt/jboss/wildfly/bin/add-user.sh admin Password1! --silent
CMD ["/opt/jboss/wildfly/bin/standalone.sh", "-b", "0.0.0.0", "-bmanagement","0.0.0.0"]
Of course you can replace this Dockerfile with any valid Dockerfile definition. Now start your Openshift cluster.
Next thing will be creating a Binary Build that will hold our Image. You can do it through the “oc new-build” command:
$ oc new-build --binary --name=mywildfly -l app=mywildfly
* A Docker build using binary input will be created
* The resulting image will be pushed to image stream tag "mywildfly:latest"
* A binary build was created, use 'start-build --from-dir' to trigger a new build
--> Creating resources with label app=mywildfly ...
imagestream.image.openshift.io "mywildfly" created
buildconfig.build.openshift.io "mywildfly" created
--> Success
Great. Now verify that the Binary Build has been correctly added:
$ oc get bc
NAME TYPE FROM LATEST
mywildfly Docker Binary 0
As it is, the Binary Build does not contain any reference to a Dockerfile. We can edit its configuration to include, in the dockerfilePath param, the location where our Dockerfile is (in our case, it’s in the current folder):
$ oc patch bc/mywildfly -p '{"spec":{"strategy":{"dockerStrategy":{"dockerfilePath":"Dockerfile"}}}}'
buildconfig.build.openshift.io/mywildfly patched
Now start the Build:
$ oc start-build mywildfly --from-dir=. --follow
Uploading directory "." as binary input for the build ...
Uploading finished
build.build.openshift.io/mywildfly-1 started
Receiving source from STDIN as archive ...
Pulling image jboss/wildfly ...
Pulled 1/5 layers, 21% complete
Pulled 2/5 layers, 62% complete
Pulled 3/5 layers, 71% complete
Pulled 4/5 layers, 88% complete
Pulled 5/5 layers, 100% complete
Extracting
Step 1/5 : FROM jboss/wildfly
---> 5de2811bb236
Step 2/5 : RUN /opt/jboss/wildfly/bin/add-user.sh admin Password1! --silent
---> Running in 4c17b5d59a26
---> 63651cb80af2
Removing intermediate container 4c17b5d59a26
Step 3/5 : CMD /opt/jboss/wildfly/bin/standalone.sh -b 0.0.0.0 -bmanagement 0.0.0.0
---> Running in 3f2043e97715
---> 2edcf0d3758a
Removing intermediate container 3f2043e97715
Step 4/5 : ENV "OPENSHIFT_BUILD_NAME" "mywildfly-1" "OPENSHIFT_BUILD_NAMESPACE" "myproject"
---> Running in 2e1ec757227a
---> 24974e156028
Removing intermediate container 2e1ec757227a
Step 5/5 : LABEL "io.openshift.build.name" "mywildfly-1" "io.openshift.build.namespace" "myproject"
---> Running in c948609a8a5e
---> 57af1ff0bb97
Removing intermediate container c948609a8a5e
Successfully built 57af1ff0bb97
Pushing image 172.30.1.1:5000/myproject/mywildfly:latest ...
Pushed 2/6 layers, 33% complete
Pushed 3/6 layers, 76% complete
Pushed 4/6 layers, 96% complete
Pushed 5/6 layers, 100% complete
Pushed 6/6 layers, 100% complete
Push successful
Well done, the ImageStream has been pushed into the Internal Registry. Check it with:
$ oc get is
NAME DOCKER REPO TAGS UPDATED
mywildfly 172.30.1.1:5000/myproject/mywildfly latest 12 seconds ago
Now that the ImageStream is available, let’s create an application in the current project which uses this ImageStream:
$ oc new-app --image-stream=mywildfly
--> Found image 57af1ff (48 seconds old) in image stream "myproject/mywildfly" under tag "latest" for "mywildfly"
* This image will be deployed in deployment config "mywildfly"
* Port 8080/tcp will be load balanced by service "mywildfly"
* Other containers can access this service through the hostname "mywildfly"
--> Creating resources ...
deploymentconfig.apps.openshift.io "mywildfly" created
service "mywildfly" created
--> Success
Application is not exposed. You can expose services to the outside world by executing one or more of the commands below:
'oc expose svc/mywildfly'
Run 'oc status' to view your app.
We are almost done. We only need to expose the Route to external clients:
$ oc expose svc/mywildfly
route.route.openshift.io/mywildfly exposed
And verify the Route URL with:
$ oc get route
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
mywildfly mywildfly-myproject.192.168.42.5.nip.io mywildfly 8080-tcp None
As you can see from the Web Console, the application is available:

As last step, we will verify that we can actually login with the management user that has been incldued in the Image. For this purpose we need to define a PortForward to reach the port 9990 in the Pod where the Application us running. Let’s check the Pod list:
$ oc get pods
NAME READY STATUS RESTARTS AGE
mywildfly-1-build 0/1 Completed 0 6m
mywildfly-1-mzkmf 1/1 Running 0 4m
Now we will forward the Port 9990 to the equivalent Port on localhost:
$ oc port-forward mywildfly-1-mzkmf 9990:9990
Forwarding from 127.0.0.1:9990 -> 9990
Forwarding from [::1]:9990 -> 9990
Try connecting from a local installation of WildFly, you will be prompted to enter Username and Password:
$ cd wildfly-16.0.0.Final/bin
$ ./jboss-cli.sh -c
Authenticating against security realm: ManagementRealm
Username: admin
Password:
[standalone@localhost:9990 /]
That’s all. In this tutorial we have learned how to run a Docker image, created from a Dockerfile, in your own OpenShift cluster.
Recommended Articles
Deploying Custom Docker Images in OpenShift using Source-to-Image (S2I) - A Step-by-Step Guide
Learn how to build and deploy custom Docker images on OpenShift using S2I. This tutorial covers the process of loading a Docker image from Docker Hub, creating a new Docker image with S2I, and deploying it to OpenShift.
Deploying Enterprise Applications on Openshift using Binary Builds
Learn how to deploy Java EE applications on OpenShift using a binary build, leveraging WildFly 13.0.0.Final. Get started with this step-by-step guide.
Build and Deploy a Jakarta EE Application on OpenShift: A Step-by-Step Guide
Learn how to deploy a Jakarta EE application on OpenShift, including installing Code Ready Containers and setting up the environment.
Deploy Java EE Application on Openshift with Custom Modules and CLI Commands
Learn how to deploy a Java EE application on Openshift, including custom modules and running CLI commands as part of the build process.