Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

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:

Code Block
languagebash
titleDockerfile for Controller Image
linenumberstrue
collapsetrue
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:

...