Deploying Docker compose on Linux on Z

Before you deploy HCL Workload Automation components on Linux on Z, ensure that you have deployed Docker compose, as explained in the following procedure.

To deploy the containers, docker-compose is required on the local workstation. Perform the following steps:
  1. Browse to /usr/local/bin and create a file with name docker-compose with the following contents:
    #
    # This script will attempt to mirror the host paths by using volumes for the
    # following paths:
    #   * $(pwd)
    #   * $(dirname $COMPOSE_FILE) if it's set
    #   * $HOME if it's set
    #
    # You can add additional volumes (or any docker run options) using
    # the $COMPOSE_OPTIONS environment variable.
    #
    
    
    set -e
    
    VERSION="1.27.4"
    IMAGE="ibmcom/dockercompose-s390x:$VERSION"
    
    
    # Setup options for connecting to docker host
    if [ -z "$DOCKER_HOST" ]; then
        DOCKER_HOST='unix:///var/run/docker.sock'
    fi
    if [ -S "${DOCKER_HOST#unix://}" ]; then
        DOCKER_ADDR="-v ${DOCKER_HOST#unix://}:${DOCKER_HOST#unix://} -e DOCKER_HOST"
    else
        DOCKER_ADDR="-e DOCKER_HOST -e DOCKER_TLS_VERIFY -e DOCKER_CERT_PATH"
    fi
    
    
    # Setup volume mounts for compose config and context
    if [ "$(pwd)" != '/' ]; then
        VOLUMES="-v $(pwd):$(pwd)"
    fi
    if [ -n "$COMPOSE_FILE" ]; then
        COMPOSE_OPTIONS="$COMPOSE_OPTIONS -e COMPOSE_FILE=$COMPOSE_FILE"
        compose_dir="$(dirname "$COMPOSE_FILE")"
        # canonicalize dir, do not use realpath or readlink -f
        # since they are not available in some systems (e.g. macOS).
        compose_dir="$(cd "$compose_dir" && pwd)"
    fi
    if [ -n "$COMPOSE_PROJECT_NAME" ]; then
        COMPOSE_OPTIONS="-e COMPOSE_PROJECT_NAME $COMPOSE_OPTIONS"
    fi
    if [ -n "$compose_dir" ]; then
        VOLUMES="$VOLUMES -v $compose_dir:$compose_dir"
    fi
    if [ -n "$HOME" ]; then
        VOLUMES="$VOLUMES -v $HOME:$HOME -e HOME" # Pass in HOME to share docker.config and allow ~/-relative paths to work.
    fi
    i=$#
    while [ $i -gt 0 ]; do
        arg=$1
        i=$((i - 1))
        shift
    
        case "$arg" in
            -f|--file)
                value=$1
                i=$((i - 1))
                shift
                set -- "$@" "$arg" "$value"
    
                file_dir=$(realpath "$(dirname "$value")")
                VOLUMES="$VOLUMES -v $file_dir:$file_dir"
            ;;
            *) set -- "$@" "$arg" ;;
        esac
    done
    
    # Setup environment variables for compose config and context
    ENV_OPTIONS=$(printenv | sed -E "/^PATH=.*/d; s/^/-e /g; s/=.*//g; s/\n/ /g")
    
    # Only allocate tty if we detect one
    if [ -t 0 ] && [ -t 1 ]; then
        DOCKER_RUN_OPTIONS="$DOCKER_RUN_OPTIONS -t"
    fi
    
    # Always set -i to support piped and terminal input in run/exec
    DOCKER_RUN_OPTIONS="$DOCKER_RUN_OPTIONS -i"
    
    
    # Handle userns security
    if docker info --format '{{json .SecurityOptions}}' 2>/dev/null | grep -q 'name=userns'; then
        DOCKER_RUN_OPTIONS="$DOCKER_RUN_OPTIONS --userns=host"
    fi
    
    # shellcheck disable=SC2086
    exec docker run --rm $DOCKER_RUN_OPTIONS $DOCKER_ADDR $COMPOSE_OPTIONS $ENV_OPTIONS $VOLUMES -w "$(pwd)" $IMAGE "$@"
    
    
  2. Run the following command to make the docker-compose file an executable file:
    sudo chmod +x /usr/local/bin/docker-compose
  3. More detailed technical information for each component are available in the sample readme files: