...
The following files are required for the build context:
Dockerfile
- JOC Cockpit installer tarball as available from SOS for download.
- Installer Response file
joc_install.xml
with individual installation settings. A template of this file is available when extracting the installer tarball. - Start Script
start_joc.sh
- JOC Cockpit installer tarball as available from SOS for download.
Dockerfile
Download: Dockerfile
Code Block language bash title Dockerfile linenumbers true collapse true FROM openjdk:8 LABEL maintainer="Software- und Organisations-Service GmbH" # default user id has to match later run-time user ARG USER_ID=$UID # provide build arguments for release information ARG JS_MAJOR=1.13 ARG JS_RELEASE=1.13.3-SNAPSHOT # add installer archive file COPY joc_linux.${JS_RELEASE}.tar.gz /usr/local/src/ RUN test -e /usr/local/src/joc_linux.${JS_RELEASE}.tar.gz && \ tar zxvf /usr/local/src/joc_linux.${JS_RELEASE}.tar.gz -C /usr/local/src/ && \ rm -f /usr/local/src/joc_linux.${JS_RELEASE}.tar.gz && \ ln -s /usr/local/src/joc.${JS_RELEASE} /usr/local/src/joc # for JDK < 12, /dev/random does not provide sufficient entropy, see https://kb.sos-berlin.com/x/lIM3 RUN rm /dev/random && ln -s /dev/urandom /dev/random # copy installer response file and run installer COPY joc_install.xml /usr/local/src/joc/ RUN /usr/local/src/joc/setup.sh -u /usr/local/src/joc/joc_install.xml # make default user the owner of directories RUN groupadd --gid ${USER_ID:-1000} jobscheduler && \ useradd --uid ${USER_ID:-1000} --gid jobscheduler --home-dir /home/jobscheduler --no-create-home --shell /bin/bash jobscheduler && \ chown -R jobscheduler:jobscheduler /var/sos-berlin.com # copy and prepare start script COPY start_joc.sh /usr/local/bin/ RUN chmod +x /usr/local/bin/start_joc.sh # create volumes for data persistence # VOLUME /var/sos-berlin.com/joc # allow incoming traffic to port EXPOSE 4446 # run-time user, can be overwritten when running the container USER jobscheduler CMD ["/usr/local/bin/start_joc.sh"]
- Explanations
- Line 1: We start from a CentOS image that includes JDK 8. Newer Java version can be used, see Which Java versions is JobScheduler available for?
- Line 5: Consider that $UID provides the numeric ID of the account that the JOC Cockpit installation inside the Docker container is performed for. This numeric ID typically starts above 1000 and should correspond to the account that is used on the Docker host, i.e. the account on the Docker Host and the account inside the container should use the same numeric ID. This mechanism simplifies exposure of the Docker container's file system.
- Line 8-9: Adjust the JobScheduler release number as required.
- Line 12-16: The installer tarball is copied and extracted to the container.
- Line 22-23: The installer response file is copied to the container, for details of this file see next chapter. Then the installer is executed for the current user.
- Line 26-28: An account and group "jobscheduler" is created that is handed over ownership of installed files.
- Line 31-32: The start script is copied to the container, see below chapter Start Script.
- Line 38: Port 4446 is exposed for later mapping. This port is used for the connection between user browsers and JOC Cockpit.
- Line 41: The account "jobscheduler" that is the owner of the installation is exposed for later mapping. This account should be mapped at run-time to the account in the Docker Host that will mount the exposed volume.
- Line 43: The start script is executed to launch the JOC Cockpit daemon.
...