

![[16.0.0.3 und höher]](../ng_v16003plus.gif)
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