The Dockerfile.oraclejava File in the Docker Demonstration for the Enterprise Developer Base Image

This topic lists and describes the Dockerfile.oraclejava file from the Docker demonstration for the Enterprise Developer base image. The Dockerfile is listed in its entirety and a following table describes the various Dockerfile commands. The line numbers in the listings of the Dockerfile have been added to aid readability. They are not present in the supplied Dockerfile.

001  # Copyright (C) Micro Focus 2018. All rights reserved. 
002  
003  ARG BASE_SUFFIX=
004  ARG BASE_TAG=latest
005  FROM microsoft/dotnet-framework${BASE_SUFFIX}:${BASE_TAG}
006  
007  # PRODUCT_VERSION is product version associated with this Dockerfile
008  # MFLICFILE is the build-arg for the license filename
009  # ACCEPT_CONTAINER_EULA is the build-arg for the acceptance of the end user license argument
010  # SETUP_EXE is the build-arg name for installer exe to be used
011  # TOOLS_LOC is build-arg name for installation location of the tools
012  # JAVATARFILE is the build-arg name for on-disk file that contains the oracle server jre
013  # JAVAHOMEDIR is the build-arg name for location of the java installation
014  ARG PRODUCT_VERSION=a.b.cc
015  ARG MFLICFILE
016  ARG ACCEPT_CONTAINER_EULA=no
017  ARG SETUP_EXE=edbt_40.exe
018  ARG TOOLS_LOC=c:\\EDTools
019  ARG JAVATARFILE=server-jre-8u162-windows-x64.tar.gz
020  ARG JAVAHOMEDIR=c:\\jdk1.8.0_162
021  ARG TMP_INST_DIR=c:\\ed40tmp
022  
023  LABEL vendor="Micro Focus" \
024        com.microfocus.name="Enterprise Developer" \
025        com.microfocus.version="$PRODUCT_VERSION" \
026        com.microfocus.eula.url="https://supportline.microfocus.com/licensing/agreements.aspx" \
027        com.microfocus.is-base-image="true" \
028        com.microfocus.third_parties.java="oraclejava8"
029  
030  # transfer build arguments to environment vars
031  ENV TOOLS_LOC=${TOOLS_LOC} \
032      RMT_DIR="C:\\Program Files (x86)\\Common Files\\SafeNet Sentinel\\Sentinel RMS License Manager\\WinNT"
033  
034  # Use cmd.exe, the microsoft/dotnet-framework-build changes this to powershell, so we need to reset
035  SHELL ["cmd", "/S", "/C"]
036  
037  # Copy the setup .exe and license to the image
038  COPY ${SETUP_EXE} "${TMP_INST_DIR}\\"
039  COPY ${MFLICFILE} "${TOOLS_LOC}\\"
040  
041  # Do the actual installation
042  WORKDIR "${TMP_INST_DIR}"
043  RUN set TMP_INST_DIR=${TMP_INST_DIR} && \
044      set SETUP_EXE=${SETUP_EXE} && \
045      set ACCEPT_CONTAINER_EULA=${ACCEPT_CONTAINER_EULA} && \
046      cd %TMP_INST_DIR% && start "" /wait %SETUP_EXE% /q "InstallFolder=%TOOLS_LOC%" /l log.txt accepteula=%ACCEPT_CONTAINER_EULA%
047  
048  # Check log.txt
049  RUN cd %TMP_INST_DIR% && \
050      findstr /ic:"Exit Code: 0x0" log.txt || (echo "Install failed - error messages in log.txt" && findstr /ic:"error" log.txt && findstr /ic:"Exit Code:" log.txt && exit 1)
051  
052  # License the image
053  RUN set TOOLS_LOC=${TOOLS_LOC} && \
054      set MFLICFILE=${MFLICFILE} && \
055      cd %TOOLS_LOC% && \
056      "%RMT_DIR%\\MFLicenseAdmin.exe" -install %MFLICFILE%
057  
058  # Copy java .tar.gz and setup PATH
059  ENV JAVA_HOME=${JAVAHOMEDIR}
060  ADD ${JAVATARFILE} /
061  
062  # Setup ANT on PATH and ANT_HOME
063  RUN set TOOLS_LOC=${TOOLS_LOC} && \
064      setx /M PATH "%PATH%;%JAVA_HOME%\bin;%ANT_HOME%\bin" && \
065      setx /M ANT_HOME "%TOOLS_LOC%\ant"
066  
067  # Cleaup directory
068  RUN set TMP_INST_DIR=${TMP_INST_DIR} && \
069      cd \ && rmdir /S /Q %TMP_INST_DIR%
070  
071  # set the default directory to tools directory
072  WORKDIR "${TOOLS_LOC}"

The commands on the lines in this Dockerfile are as follows:

Lines Description
003 - 005 Specifies that the base image to use is the official Docker image for .NET Framework on Windows Server 2016 Server Core.
014 - 021 Define build arguments passed by the docker build command:
  • PRODUCT_VERSION. Indicates the version of Enterprise Developer that this Dockerfile is supplied with.
  • MFLICFILE. Specifies the name of the license file to use for Enterprise Developer.
  • ACCEPT_CONTAINER_EULA. Indicates acceptance of the terms laid out in the license agreement. The default setting of "no" means that you must modify this in order to indicate that you accept the terms of the license agreement.
  • SETUP_EXE. Specifies the name of the Enterprise Developer installation file. The default setting is the name of the file supplied with Enterprise Developer.
  • TOOLS_LOC. Specifies the folder into which Enterprise Developer will be installed.
  • JAVATARFILE. Specifies the name of the .tar file containing the Oracle JDK files that are required to provide Java support by the Oracle JDK. You must provide this file yourself and ensure that you have the required license to use it.
  • JAVAHOMEDIR. Specifies the name of the folder in the image's filesystem into which the files from the JAVATARFILE .tar file will be extracted.
  • TMP_INST_DIR. Specifies a temporary directory to be used while building the image. It is deleted when it is no longer needed.
023 - 028 Specify the metadata labels for the image that will be created. These labels can be queried using the docker inspect command.
031 - 032 Create environment variables to be used in this Dockerfile:
  • TOOLS_LOC is copied from the build argument defined previously.
  • RMT_DIR specifies the location of the COBOL licensing management software. This is installed when you install Enterprise Developer.
035 Specifies that the shell to be used for subsequent instructions is ["cmd", "/S", "/C"].

This is the default for Dockerfiles on Windows but needs to be specified explicitly here because the base image for this Dockerfile is a Microsoft .NET Framework "-build" image, and using that image causes PowerShell to be used as the shell.

038 - 039 Copies the Enterprise Developer installation file into the temporary folder and the Enterprise Developer license file into the folder where Enterprise Developer is to be installed.
042 Sets the Docker working directory to be the temporary directory.
043 - 046 Run the Enterprise Developer installation file specifying parameters to install it silently, into the required directory, creating a log file, and indicating that you have accepted the terms laid out in the license agreement.
049 - 050 Runs a series of concatenated Windows commands to search the Enterprise Developer installation log file for text indicating that the installation failed. If any such text is found no further processing takes place.
053 - 056 Run a series of concatenated Windows commands to license Enterprise Developer.
059 - 060 Enables Java support in the image by untarring the file specified by the JAVATARFILE build argument into the folder specified by the JAVAHOMEDIR build argument, then updating the PATH environment variable to include the bin subfolder of that folder.
063 - 065 Enables Ant support in the image by setting the ANT_HOME and PATH environment variables to include the relevant folders.
068 - 069 Runs a series of concatenated Windows commands to delete the Enterprise Developer installation file and the temporary directory that was used to contain it.
072 Sets the Docker working directory to be the directory into which Enterprise Developer was installed.