Für LINUX-PlattformenFür Windows-Plattformen

Beispieldockerdatei für ein Liberty Network Deployment-Image

Verwenden Sie die Beispieldockerdatei, um ein Liberty Network Deployment-Image zu erstellen. Das Docker-Image enthält ein Script joinMember, das den Member-Server im Docker-Container mit einem Verbundcontroller verknüpft. Das Docker-Image enthält auch ein Script removeMember, das den Member-Server im Docker-Container aus dem Verbund entfernt.

Docker-Datei

Mit der folgenden Beispieldockerdatei können Sie ein Liberty Network Deployment-Image erstellen. Das im Docker-Hub verfügbare Image kann nicht auf Liberty Network Deployment-Features wie scalingMember-1.0 zugreifen. Verwenden Sie diese Datei, um ein Liberty Network Deployment-Image zu erstellen. Sie können die letzte Zeile verwenden, um eine Anwendung in das Docker-Image zu kopieren.

# 
# Docker-Datei zum Erstellen eines Liberty Network Deployment-Image
#
# Diese Docker-Datei geht von folgenden Voraussetzungen aus:
# - Die Scripts für die Verbundaktivierung (joinMember, removeMember) werden in den Pfad
#   /opt/ibm/docker im Docker-Container kopiert.
# - WebSphere Liberty wird in /opt/ibm/wlp installiert.
# - Der WebSphere Liberty-Server ist "defaultServer"
#   (z. B. /opt/ibm/wlp/usr/servers/defaultServer).
# - Der Docker-Container wird mit --net=host ausgeführt, sodass keine Ports
#   explizit in diese Datei exportiert werden.

FROM websphere-liberty

#
# Liberty-Server automatisch mit dem Container starten
#
ENTRYPOINT ["/opt/ibm/wlp/bin/server", "run", "defaultServer"]
#
#

#
# Scripts für Verbundaktivierung hinzufügen
#
ADD joinMember /opt/ibm/docker/
RUN chmod +x /opt/ibm/docker/joinMember
ADD removeMember /opt/ibm/docker/
RUN chmod +x /opt/ibm/docker/removeMember

#
# Betriebssystem aktualisieren
#
RUN apt-get update

#
# Weitere erforderliche Features hinzufügen
#
RUN installUtility install --acceptLicense scalingMember-1.0 clusterMember-1.0
collectiveMember-1.0

ADD server.xml /opt/ibm/wlp/usr/servers/defaultServer/

#
# Dateinamen der Anwendung einfügen. Diese Anweisung kopiert die Anwendung in das
# Docker-Image.
# 
ADD Anwendungsdatei /opt/ibm/wlp/usr/servers/defaultServer/dropins/

Script joinMember

Das Docker-Image-Script joinMember verknüpft den Member-Server im Docker-Container mit einem Verbundcontroller.
#!/bin/bash

#
# Script zum Verknüpfen eines Liberty-Docker-Containers mit einem Verbundcontroller.
#
# Erforderlich: <containerName> - positionsgebundener Parameter, der den Namen
#                             dieses Docker-Containers angibt
#           --host - Hostname des Verbundcontrollers
#           --port - HTTPS-Port des Verbundcontrollers
#           --user - Verbundcontrolleradministrator
#           --password - Kennwort des Verbundcontrolleradministrators
#           --keystorePassword - Kennwort für den Member-Keystore
#           --dockerHost - Hostname des Docker-Hosts, auf dem sich dieser Container befindet
#
# Optional: --clusterName - Clustername für die Memberkonfiguration.
#                           Wenn der Clustername angegeben wird, werden auch die
#                           Skalierungsfeatures für Cluster und Member hinzugefügt.
#

# Anfangswerte festlegen

containerName=$1

# Befehlszeile parsen

failure="false"

if [[ -z $1 ]]; then
    # Keine Werte empfangen
    echo "Error: no parameters specified"
    failure="true"
else
    TEMP=`getopt --long host:,port:,user:,password:,keystorePassword:,dockerHost:,clusterName:: -- "$@"`
    eval set -- "$TEMP"
    OPTIND=-1
    
    while true ; do
        case "$1" in
           --host) controllerHost=$2; shift 2;;
           --port) controllerPort=$2; shift 2;;
           --user) controllerUser=$2; shift 2;;
           --password) controllerPassword=$2; shift 2;;
           --keystorePassword) memberKeystorePassword=$2; shift 2;;
           --dockerHost) dockerHost=$2; shift 2;;
           --clusterName) clusterName=$2; shift 2;;
           *) break;;
        esac
    done

    # Erforderliche Parameter validieren
    if [[ -z "$containerName" ]]; then
        echo "Error: no containerName specified, validation suspended"
        failure="true"
    fi

    # if a containerName is not specified, bash uses the 
    # 1st "--" parameter as the containerName

    if [[ $containerName == --* ]]; then
        echo "Error: no containerName specified, validation suspended"
        failure="true"
    fi
    
    # Tritt ein Fehler in Bezug auf den positionsgebundenen Parameter containerName auf,
    # Validierungsberichte aussetzen
    
    if [[ $failure == false ]]; then
        if [[ -z "${controllerHost// }" ]]; then
            echo "Error: no host specified"
            failure="true"
        fi
        if [[ -z "${controllerPort// }" ]]; then
            echo "Error: no port specified"
            failure="true"
        fi
        if [[ -z "${controllerUser// }" ]]; then
            echo "Error: no user specified"
            failure="true"
        fi
        if [[ -z "${controllerPassword// }" ]]; then
            echo "Error: no password specified"
            failure="true"
        fi
        if [[ -z "${memberKeystorePassword// }" ]]; then
            echo "Error: no keystorePassword specified"
            failure="true"
        fi
        if [[ -z "${dockerHost// }" ]]; then
            echo "Error: no dockerHost specified"
            failure="true"
        fi
    fi
fi

if [[ $failure == false ]]; then
    # Datei env.properties für das Liberty-Docker-Member erstellen

    echo containerName=$containerName > /opt/ibm/docker/env.properties
    echo containerHost=$dockerHost >> /opt/ibm/docker/env.properties


    # Verbunddienstprogramm aufrufen

    /opt/ibm/wlp/bin/collective join defaultServer --host=$controllerHost --port=$controllerPort --user=$controllerUser --password=$controllerPassword --hostName=$dockerHost --createConfigFile --keystorePassword=$memberKeystorePassword --autoAcceptCertificates --genDeployVariables


    # Weitere Konfigurations-Drop-in-Snippets erstellen

    if [[ $clusterName = *[!\ ]* ]]; then
        echo \<?xml version=\"1.0\" encoding=\"UTF-8\" ?\> > /opt/ibm/wlp/usr/servers/defaultServer/cfgfeatures.xml
        echo \<server\> >> /opt/ibm/wlp/usr/servers/defaultServer/cfgfeatures.xml
        echo $'\t'\<featureManager\> >> /opt/ibm/wlp/usr/servers/defaultServer/cfgfeatures.xml
        echo $'\t'$'\t'\<feature\>clusterMember-1.0\</feature\> >>  /opt/ibm/wlp/usr/servers/defaultServer/cfgfeatures.xml
        echo $'\t'$'\t'\<feature\>scalingMember-1.0\</feature\> >>  /opt/ibm/wlp/usr/servers/defaultServer/cfgfeatures.xml
        echo $'\t'\</featureManager\> >> /opt/ibm/wlp/usr/servers/defaultServer/cfgfeatures.xml
        echo \</server\> >> /opt/ibm/wlp/usr/servers/defaultServer/cfgfeatures.xml
        echo \<?xml version=\"1.0\" encoding=\"UTF-8\" ?\> > /opt/ibm/wlp/usr/servers/defaultServer/cluster-config.xml
        echo \<server\> >> /opt/ibm/wlp/usr/servers/defaultServer/cluster-config.xml
        echo $'\t'\<clusterMember name=\"$clusterName\" /\> >> /opt/ibm/wlp/usr/servers/defaultServer/cluster-config.xml
        echo \</server\> >> /opt/ibm/wlp/usr/servers/defaultServer/cluster-config.xml
    else
        echo "No clusterName provided, the container will not be configured as a cluster or scaling member."
    fi


    # Konfigurationssnippets zur Verwendung an die richtige Position verschieben

    mkdir -p /opt/ibm/wlp/usr/servers/defaultServer/configDropins/overrides
    mv /opt/ibm/wlp/usr/servers/defaultServer/c*.xml /opt/ibm/wlp/usr/servers/defaultServer/configDropins/overrides
    if [ -f /opt/ibm/wlp/usr/servers/defaultServer/user-collective-include.xml ]
    then
        cp /opt/ibm/wlp/usr/servers/defaultServer/user-collective-include.xml /opt/ibm/wlp/usr/servers/defaultServer/configDropins/overrides
    fi
else
    # Mindestens ein erforderlicher Parameter fehlt -
    # Benutzer über die richtige Syntax informieren
    printf "Syntax: joinMember <Containername> \n\t--host <Controller-Host> \n\t--port <HTTPS-Port des Controllers> \n\t--user <Controllerbenutzer> \n\t--password <Controllerkennwort> \n\t--keystorePassword <Kennwort für Member-Keystore> \n\t--dockerHost <Hostname des Docker-Hosts> \n\t[--clusterName <Clustername für das Member>]\n"
fi

Script removeMember

Das Docker-Image-Script removeMember entfernt den Member-Server im Docker-Container aus dem Verbund:
#!/bin/bash

# Script zum Entfernen eines Liberty-Docker-Containers aus einem Verbundcontroller.
#
# Erforderlich: <Containername> - positionsgebundener Parameter, der den Namen
#                             dieses Docker-Containers angibt
#           --host - Hostname des Verbundcontrollers
#           --port - HTTPS-Port des Verbundcontrollers
#           --user - Verbundcontrolleradministrator
#           --password - Kennwort des Verbundcontrolleradministrators
#           --dockerHost - Hostname des Docker-Hosts, auf dem sich dieser Container befindet
#
#

# Anfangswerte festlegen

containerName=$1

# Befehlszeile parsen

failure="false"

if [[ -z $1 ]]; then
    # Keine Werte empfangen
    echo "Error: no parameters specified"
    failure="true"
else
    TEMP=`getopt --long host:,port:,user:,password:,dockerHost:: -- "$@"`
    eval set -- "$TEMP"
    OPTIND=-1

    while true ; do
        case "$1" in
           --host) controllerHost=$2; shift 2;;
           --port) controllerPort=$2; shift 2;;
           --user) controllerUser=$2; shift 2;;
           --password) controllerPassword=$2; shift 2;;
           --dockerHost) dockerHost=$2; shift 2;;
           *) break;;
        esac
    done

    # Erforderliche Parameter validieren
    if [[ -z "$containerName" ]]; then
        echo "Error: no containerName specified, validation suspended"
        failure="true"
    fi

    # if a containerName is not specified, bash uses the 
    # 1st "--" parameter as the containerName

    if [[ $containerName == --* ]]; then
        echo "Error: no containerName specified, validation suspended"
        failure="true"
    fi

    # Tritt ein Fehler in Bezug auf den positionsgebundenen Parameter containerName auf,
    # Validierungsberichte aussetzen

    if [[ $failure == false ]]; then
        if [[ -z "${controllerHost// }" ]]; then
            echo "Error: no host specified"
            failure="true"
        fi
        if [[ -z "${controllerPort// }" ]]; then
            echo "Error: no port specified"
            failure="true"
        fi
        if [[ -z "${controllerUser// }" ]]; then
            echo "Error: no user specified"
            failure="true"
        fi
        if [[ -z "${controllerPassword// }" ]]; then
            echo "Error: no password specified"
            failure="true"
        fi
        if [[ -z "${dockerHost// }" ]]; then
            echo "Error: no dockerHost specified"
            failure="true"
        fi
    fi
fi

    # Verbunddienstprogramm aufrufen
if [[ $failure == false ]]; then

    /opt/ibm/wlp/bin/collective remove defaultServer --host=$controllerHost --port=$controllerPort --user=$controllerUser --password=$controllerPassword  --hostName=$dockerHost --autoAcceptCertificates

else
    # Mindestens ein erforderlicher Parameter fehlt -
    # Benutzer über die richtige Syntax informieren
    printf "Syntax:  removeMember <Containername> \n\t--host=<Controller-Host> \n\t--port=<Controller-HTTPS-Port> \n\t--user=<Controllerbenutzer> \n\t--password=<Controllerkennwort> \n\t--dockerHost=<Docker-Host> \n"
fi

Symbol das den Typ des Artikels anzeigt. Referenzartikel

Dateiname: rwlp_deployservice_docker_nd_example.html