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 Controllers.
- This article explains options how to create the Controller image.
Dockerfile
Docker images for JS7 Controllers provided by SOS make use of the following Dockerfile:
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:-4444}
ARG JS_HTTPS_PORT=${JS_HTTPS_PORT:-4443}
ARG JS_JAVA_OPTIONS=${JS_JAVA_OPTIONS}
# RUN-TIME SETTINGS
# JS7 Controller ID, ports and Java options
ENV RUN_JS_ID=${RUN_JS_ID:-$JS_ID}
ENV RUN_JS_HTTP_PORT=${RUN_JS_HTTP_PORT:-$JS_HTTP_PORT}
ENV RUN_JS_HTTPS_PORT=${RUN_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
# setup working directory
RUN mkdir -p /var/sos-berlin.com/js7
WORKDIR /var/sos-berlin.com/js7
# add/copy installation tarball
# ADD https://download.sos-berlin.com/JobScheduler.${JS_MAJOR}/js7_controller_unix.${JS_RELEASE}.tar.gz /usr/local/src/
COPY js7_controller_unix.${JS_RELEASE}.tar.gz /usr/local/src/
# INSTALLATION
# extract installation 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_controller_unix.${JS_RELEASE}.tar.gz && \
tar xfvz /usr/local/src/js7_controller_unix.${JS_RELEASE}.tar.gz -C /var/sos-berlin.com/js7/ && \
rm /usr/local/src/js7_controller_unix.${JS_RELEASE}.tar.gz && \
sed -i 's/securerandom.source=file:\/dev\/random/securerandom.source=file:\/dev\/urandom/g' /usr/local/openjdk-8/lib/security/java.security
# CONFIGURATION
# copy configuration
COPY config/ /var/sos-berlin.com/js7/controller/var/config/
# add start script
COPY start-controller.sh /usr/local/bin/
# make default user the owner of directories
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 && \
chown -R jobscheduler:jobscheduler /var/sos-berlin.com && \
chmod +x /usr/local/bin/start-controller.sh
# 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-controller.sh --id=\"$RUN_JS_ID\" --http-port=$RUN_JS_HTTP_PORT --https-port=$RUN_JS_HTTPS_PORT --java-options=\"$RUN_JS_JAVA_OPTIONS\""]
Build Script
The build script offers a number of options to parameterize the Dockerfile:
#!/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 default 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="4444"
JS_HTTPS_PORT_DEFAULT="4443"
JS_JAVA_OPTIONS_DEFAULT="-Xmx500m"
JS_BUILD_ARGS_DEFAULT=""
# ----- modify default settings -----
for option in "$@"
do
case "$option" in
--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_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 \
--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: