On my previous post, the first part of this series, I've shown to you how to quickly get started with WebLogic on Docker. You've learned how to create a base Docker image with WebLogic and Oracle JDK installed, and then how to create a second image that contains a configured WebLogic domain. Today's post will break down and explain what happens behind the scenes of that process

Note: for the sake of history and keep this blog post useful in the future, I will refer to the commit 7741161 from the docker-images GitHub project, and version 12.2.1 of WebLogic.

Walking through the build process of a WebLogic base image

A base image of WebLogic means an image that contains only the software installed with minimum configuration, to further be extended and customized. It may be based on a Red Hat base Docker image, but preferably, we recommend you to use the Oracle Linux base image.

Samples for how to build a base image are presented in the dockerfiles folder. Files for WebLogic versions 12.1.3 and 12.2.1 are maintained there, as well for two kinds of distributions: Developer, and Generic. Other versions and distributions may be added in the future.

Differences between Developer and Generic distributions

There aren't many differences between them, except these (extracted from the README.txt file inside the Quick Installer for Developer):

WHAT IS NOT INCLUDED IN THE QUICK INSTALLER - Native JNI libraries for unsupported platforms. - Samples, non-english console help (can be added by using the WLS supplemental Quick Install) - Oracle Configuration Manager (OCM) is not included in the Quick installer - SCA is not included in the Quick Installer

Also, the Quick Installer for Developers is compressed using pack200, an optimized compression tool for Java classes and JAR files, to reduce the download size of the installer. Besides these differences, the two distributions work perfectly fine for Java EE development and deployment.

Building the Developer distribution base image

Although we provide a handy shell script to help you in this process, what really matters relies inside 12.2.1 folder and the Dockerfile.developer file. That recipe does a COPY of two packages, the RPM of JDK, and the WebLogic Quick Installer. These files must be present. We've put these .download files as placeholders to remind you of the need to download them. This same approach will apply for the Generic distribution.

The installation of JDK uses rpm tool, which enables us to run Java inside the base image. A very obvious requirement. After JDK is installed, we proceed with the installation of WebLogic by simply calling "java -jar", and later we clean up yum.

An important observation is the use of /dev/urandom in the Dockerfile. WebLogic requires some level of entropy for random bits that are generated during install, and as well domain creation. It is up to customers to decide whether they want to use /dev/random or /dev/urandom. Please configure this as desired.

You can build this image in two ways:

Using buildDockerImage.sh script. Indicate you want developer distribution [-d], and version 12.2.1 [-v 12.2.1].



$ pwd

~/docker-images/OracleWebLogic/dockerfiles

$ sh buildDockerImage.sh -d -v 12.2.1

Manually calling docker build:



$ cd 12.2.1

$ docker build -t oracle/weblogic:12.2.1-dev -f Dockerfile.developer .

Either of these calls result in the following:

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

oracle/weblogic 12.2.1-dev 99a470dd2110 15 secs ago 1.748 GB

oraclelinux 7 bea04efc3319 5 weeks ago 206 MB

oraclelinux latest bea04efc3319 5 weeks ago 206 MB

As you may have know by now, this image contains only WebLogic and JDK installed, and thus does not serve to be executed, only to be extended.

Building the Generic distribution base image

Most of what you've learned from above applies to the Generic distribution. The differences are that you must download, obviously, the Generic installer. The installation process is a little bit different, since it uses the silent install mode, with environment definition coming from install.file and oraInst.loc.

To build this image you either do by:

Call buildDockerImage.sh script. Indicate you want Generic distribution [-g], and version 12.2.1 [-v 12.2.1].



$ pwd

~/docker-images/OracleWebLogic/dockerfiles

$ sh buildDockerImage.sh -g -v 12.2.1

Manually calling docker build:



$ cd 12.2.1

$ docker build -t oracle/weblogic:12.2.1 -f Dockerfile.generic .

Now you have two images you can extend from, either the Developer, or the Generic base image:

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE

oracle/weblogic 12.2.1 ea03630ee95d 18 secs ago 3.289 GB

oracle/weblogic 12.2.1-dev 99a470dd2110 2 mins ago 1.748 GB

oraclelinux 7 bea04efc3319 5 weeks ago 206 MB

oraclelinux latest bea04efc3319 5 weeks ago 206 MB

Note how the Generic image is larger than the developer image. That's because the Developer distribution contains less stuff inside, as described earlier. It will be up to Dev and Ops teams to decide which one to use. And how to build them.

In the next post, I will walk you through the process of building the 1221-domain sample image.

If you have any questions, feel free to comment, or tweet.