Für LINUX-PlattformenFür Windows-Plattformen[16.0.0.3 und höher]

Beispieldockerdatei für ein Node.js-Image

Verwenden Sie die Beispieldockerdatei, um ein Image mit einem Node.js-Verbundmember 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

Verwenden Sie die folgende Beispieldockerdatei, um ein Image mit einem Node.js-Verbundmember zu erstellen. Das im Docker-Hub verfügbare Image kann nicht auf Network Deployment-Features wie scalingMember-1.0 zugreifen. Sie können die letzten zwei Zeilen verwenden, um eine Anwendung in das Docker-Image zu kopieren.

#
# Docker-Datei zum Erstellen eines Node.js-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.
# - Node.js-Server werden im Verzeichnis /root/wlpn erstellt.
# - Der Node.js-Server ist der "defaultServer" (z. B. /root/wlpn/defaultServer).
# - Die Abhängigkeiten der zu installierenden Anwendung wurden bereits über "npm install" aufgelöst.
# - Der Docker-Container wird mit --net=host ausgeführt, sodass keine Ports explizit in diese Datei exportiert werden.

FROM node:4-slim

#
# Node.js-Server automatisch mit dem Container starten
#
ENTRYPOINT ["/usr/local/bin/wlpn-server", "run", "defaultServer"]

#
# Verbünde 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 und JRE aktualisieren
#
RUN apt-get update

#
# APIConnect-Verbundmember installieren
#
RUN npm install -g apiconnect-collective-member


#
# Verwenden Sie den nachstehenden Code, um eine Anwendung für die Verwendung im Docker-Image zu installieren.
#
COPY express-example-app-1.0.2.tgz /root/wlpn/
RUN wlpn-server unpack defaultServer /root/wlpn/express-example-app-1.0.2.tgz

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 Node.js-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

    # Wird kein Parameter containerName angegeben, verwendet Bash den ersten "--"-Parameter als Containernamen

    if [[ $containerName == --* ]]; then
        echo "Error: no containerName specified, validation suspended"
        failure="true"
    fi
    
    # Tritt ein Fehler in Bezug auf den positionsgebundenen Parameter containerName auf, Validerungsberichte aussetzen. getops ist möglicherweise falsch.
    
    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


    # Joinoperation ausführen

    if [[ $clusterName = *[!\ ]* ]]; then
        wlpn-collective join defaultServer --host=$controllerHost --port=$controllerPort --user=$controllerUser --password=$controllerPassword --keystorePassword=$memberKeystorePassword --autoAcceptCertificates --hostName=$dockerHost --clusterName=$clusterName --genDeployVars
    else
        echo "No clusterName provided. The container will not be configured as a cluster or scaling member."
        wlpn-collective join defaultServer --host=$controllerHost --port=$controllerPort --user=$controllerUser --password=$controllerPassword --keystorePassword=$memberKeystorePassword --autoAcceptCertificates --hostName=$dockerHost --genDeployVars 
    fi
else
    # Mindestens ein erforderlicher Parameter fehlt. Geben Sie die richtige Syntax an.
    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 StrongLoop-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

    # Wird kein Parameter containerName angegeben, verwendet Bash den ersten "--"-Parameter als Containernamen

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

    # Tritt ein Fehler in Bezug auf den positionsgebundenen Parameter containerName auf, Validerungsberichte aussetzen. getops ist möglicherweise falsch.

    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

    wlpn-collective remove defaultServer --host=$controllerHost --port=$controllerPort --user=$controllerUser --password=$controllerPassword --hostName=$dockerHost --autoAcceptCertificates

else
    # Mindestens ein erforderlicher Parameter fehlt. Geben Sie die richtige Syntax an.
    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_nodejs_example.html