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
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
#!/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