

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