Versions Compared

Key

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

...

  • Download: Dockerfile


    Code Block
    languagebash
    titleDockerfile
    linenumberstrue
    collapsetrue
    FROM openjdk:8
    LABEL maintainer="Software- und Organisations-Service GmbH"
    
    # default us
    eruser 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 jobscheduler_linux-x64.${JS_RELEASE}.tar.gz /usr/local/src/
    RUN test -e /usr/local/src/jobscheduler_linux-x64.${JS_RELEASE}.tar.gz && \
        tar zxvf /usr/local/src/jobscheduler_linux-x64.${JS_RELEASE}.tar.gz -C /usr/local/src/ && \
        rm -f /usr/local/src/jobscheduler_linux-x64.${JS_RELEASE}.tar.gz && \
        ln -s /usr/local/src/jobscheduler.${JS_RELEASE} /usr/local/src/jobscheduler
    
    # 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 jobscheduler_install.xml /usr/local/src/jobscheduler/jobscheduler_install.xml
    RUN /usr/local/src/jobscheduler/setup.sh -u /usr/local/src/jobscheduler/jobscheduler_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_jobscheduler.sh /usr/local/bin/
    RUN chmod +x /usr/local/bin/start_jobscheduler.sh
    
    # create volumes for data persistence
    VOLUME /var/sos-berlin.com/jobscheduler/testsuite/config/live
    
    # allow incoming traffic to port
    EXPOSE 40444
    
    # run-time user, can be overwritten when running the container
    USER jobscheduler
    
    CMD ["/usr/local/bin/start_jobscheduler.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 JobScheduler Master 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 78-69: Adjust the JobScheduler release number as required.
    • Line 15: 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 20: An account and group "jobscheduler" is created that is handed over ownership of installed files.
    • Line 22: The start script is executed, see below chapter Start Script.
    • Line 25: A volume is indicated for later mapping to a mount point at run-time.
    • Line 30: Port 40444 is exposed for mapping. This port is used for the connection between JOC Cockpit and JobScheduler Master.
    • Line 40: 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 intends to mount the exposed volume.

...