- Created by Andreas Püschel, last modified on Apr 02, 2021
You are viewing an old version of this page. View the current version.
Compare with Current View Page History
« Previous Version 2 Next »
Introduction
- Users can build their own Docker images for JOC Cockpit.
- This article explains options how to create the JOC Cockpit image.
Dockerfile
Docker images for JS7 JOC Cockpit provided by SOS make use of the following Dockerfile:
Dockerfile for JOC Cockpit Image Expand source
FROM openjdk:8-jre LABEL maintainer="Software- und Organisations-Service GmbH" # BUILD SETTINGS # provide build arguments for release information ARG JS_MAJOR ARG JS_RELEASE # default user id has to match later run-time user ARG JS_USER_ID=${JS_USER_ID:-1001} ARG JS_HTTP_PORT=${JS_HTTP_PORT:-4446} ARG JS_HTTPS_PORT=${JS_HTTPS_PORT:-4443} ARG JS_JAVA_OPTIONS=${JS_JAVA_OPTIONS} # RUN-TIME SETTINGS # JS7 JobScheduler ports and Java options ENV RUN_JS_HTTP_PORT=${RUN_JS_HTTP_PORT:-$JS_HTTP_PORT} ENV RUN_JS_HTTPS_PORT=${RUN_JS_HTTPS_PORT:-$JS_HTTPS_PORT} ENV RUN_JS_JAVA_OPTIONS=${RUN_JS_JAVA_OPTIONS:-$JS_JAVA_OPTIONS} # PREPARATION # install process tools, bash RUN apt-get update && \ apt-get install -y procps && \ apt-get install -y bash # add installer tarball # ADD https://download.sos-berlin.com/JobScheduler.${JS_MAJOR}/js7_joc_linux.${JS_RELEASE}.tar.gz /usr/local/src/ COPY js7_joc_linux.${JS_RELEASE}.tar.gz /usr/local/src/ # INSTALLATION # extract installer tarball # for JDK < 12, /dev/random does not provide sufficient entropy, see https://kb.sos-berlin.com/x/lIM3 RUN test -e /usr/local/src/js7_joc_linux.${JS_RELEASE}.tar.gz && \ tar zxvf /usr/local/src/js7_joc_linux.${JS_RELEASE}.tar.gz -C /usr/local/src/ && \ rm -f /usr/local/src/js7_joc_linux.${JS_RELEASE}.tar.gz && \ ln -s /usr/local/src/joc.${JS_RELEASE} /usr/local/src/joc && \ sed -i 's/securerandom.source=file:\/dev\/random/securerandom.source=file:\/dev\/urandom/g' /usr/local/openjdk-8/lib/security/java.security # copy installer response file, hibernate configuration file and start script COPY joc_install.xml /usr/local/src/joc/ COPY hibernate.cfg.xml /usr/local/src/joc/ COPY start-joc.sh /usr/local/bin/ # perform installation and make default user the owner of directorie RUN groupadd --gid ${JS_USER_ID:-1001} jobscheduler && \ useradd --uid ${JS_USER_ID:-1001} --gid jobscheduler --home-dir /home/jobscheduler --no-create-home --shell /bin/bash jobscheduler && \ cd /usr/local/src/joc && ./setup.sh -u joc_install.xml && \ chown -R jobscheduler:jobscheduler /var/sos-berlin.com && \ chmod +x /usr/local/bin/start-joc.sh # CONFIGURATION # security: https and certificates RUN java -jar "/opt/sos-berlin.com/js7/joc/jetty/start.jar" -Djetty.home="/opt/sos-berlin.com/js7/joc/jetty" -Djetty.base="/var/sos-berlin.com/js7/joc" --add-to-start=https COPY https-keystore.p12 /var/sos-berlin.com/js7/joc/resources/joc/ COPY https-truststore.p12 /var/sos-berlin.com/js7/joc/resources/joc/ COPY start.ini.add /tmp/ COPY joc.properties.add /tmp/ RUN cat /tmp/start.ini.add >> /var/sos-berlin.com/js7/joc/start.ini && \ cat /tmp/joc.properties.add >> /var/sos-berlin.com/js7/joc/resources/joc/joc.properties # copy configuration COPY config/ /var/sos-berlin.com/js7/joc/resources/ RUN chown -R jobscheduler:jobscheduler /var/sos-berlin.com # CODA # allow incoming traffic to port EXPOSE $RUN_JS_HTTP_PORT $RUN_JS_HTTPS_PORT # run-time user, can be overwritten when running the container USER jobscheduler CMD ["sh","-c","/usr/local/bin/start-joc.sh --java-options=\"$RUN_JS_JAVA_OPTIONS\""]
Build Script
The build script offers a number of options to parameterize the Dockerfile:
Build Script for JOC Cockpit Image Expand source
#!/bin/sh set -e SCRIPT_HOME=$(dirname "$0") SCRIPT_HOME="`cd \"${SCRIPT_HOME}\" >/dev/null && pwd`" SCRIPT_FOLDER="`basename $(dirname "$SCRIPT_HOME")`" IMAGE_NAME="$(basename "$SCRIPT_HOME")" REPOSITORY_NAME="sosberlin/js7" # ----- modify defalt settings ----- JS_MAJOR_DEFAULT="2.0" JS_RELEASE_DEFAULT="2.0.0-SNAPSHOT" JS_USER_ID_DEFAULT="$UID" JS_NETWORK_DEFAULT="js7" JS_HTTP_PORT_DEFAULT="4446" JS_HTTPS_PORT_DEFAULT="4443" JS_DBMS_HOST_DEFAULT="dbms_host" JS_DBMS_IP_DEFAULT=`hostname -I | cut -d' ' -f1` JS_JAVA_OPTIONS_DEFAULT="-Xmx128m" JS_BUILD_ARGS_DEFAULT="" # ----- modify default settings ----- for option in "$@" do case "$option" in --dbms-host=*) JS_DBMS_HOST=`echo "$option" | sed 's/--dbms-host=//'` ;; --dbms-ip=*) JS_DBMS_IP=`echo "$option" | sed 's/--dbms-ip=//'` ;; --network=*) JS_NETWORK=`echo "$option" | sed 's/--network=//'` ;; --http-port=*) JS_HTTP_PORT=`echo "$option" | sed 's/--http-port=//'` ;; --https-port=*) JS_HTTPS_PORT=`echo "$option" | sed 's/--https-port=//'` ;; --java-options=*) JS_JAVA_OPTIONS=`echo "$option" | sed 's/--java-options=//'` ;; --build-args=*) JS_BUILD_ARGS=`echo "$option" | sed 's/--build-args=//'` ;; *) echo "unknown argument: $option" exit 1 ;; esac done JS_MAJOR="${JS_MAJOR:-$JS_MAJOR_DEFAULT}" JS_RELEASE="${JS_RELEASE:-$JS_RELEASE_DEFAULT}" JS_USER_ID="${JS_USER_ID:-$JS_USER_ID_DEFAULT}" JS_NETWORK="${JS_NETWORK:-$JS_NETWORK_DEFAULT}" JS_HTTP_PORT="${JS_HTTP_PORT:-$JS_HTTP_PORT_DEFAULT}" JS_HTTPS_PORT="${JS_HTTPS_PORT:-$JS_HTTPS_PORT_DEFAULT}" JS_DBMS_HOST="${JS_DBMS_HOST:-$JS_DBMS_HOST_DEFAULT}" JS_DBMS_IP="${JS_DBMS_IP:-$JS_DBMS_IP_DEFAULT}" JS_JAVA_OPTIONS="${JS_JAVA_OPTIONS:-$JS_JAVA_OPTIONS_DEFAULT}" JS_BUILD_ARGS="${JS_BUILD_ARGS:-$JS_BUILD_ARGS_DEFAULT}" set -x docker build --no-cache --rm \ --tag=$REPOSITORY_NAME:$IMAGE_NAME \ --file=$SCRIPT_HOME/build/Dockerfile \ --network=$JS_NETWORK \ --add-host=$JS_DBMS_HOST:$JS_DBMS_IP \ --build-arg="JS_MAJOR=$JS_MAJOR" \ --build-arg="JS_RELEASE=$JS_RELEASE" \ --build-arg="JS_USER_ID=$JS_USER_ID" \ --build-arg="JS_HTTP_PORT=$JS_HTTP_PORT" \ --build-arg="JS_HTTPS_PORT=$JS_HTTPS_PORT" \ --build-arg="JS_JAVA_OPTIONS=$JS_JAVA_OPTIONS" \ $JS_BUILD_ARGS $SCRIPT_HOME/build set +x
Explanations:
- TBD
- No labels
Overview
Content Tools