

Dockerfile de ejemplo para una imagen de Liberty Network Deployment
Utilice un Dockerfile para crear una imagen de Liberty Network Deployment. La imagen de Docker tiene un script joinMember que une el servidor miembro en el contenedor Docker a un controlador colectivo. La imagen de Docker también tiene un script removeMember que elimina el servidor miembro en el contenedor Docker del colectivo.
Archivo Docker
El siguiente ejemplo de Dockerfile puede crear una imagen de Liberty Network Deployment. La imagen que está disponible en el hub Docker no puede acceder a las características de Liberty Network Deployment como, por ejemplo, scalingMember-1.0. Utilice este archivo para crear una imagen de Liberty Network Deployment. Puede utilizar la última línea para copiar una aplicación para su uso en la imagen de Docker.
#
# Dockerfile para crear una imagen de Liberty Network Deployment
#
# Este Dockerfile presupone que:
# - El colectivo que habilita scripts (joinMember,
removeMember) se colocará en
# /opt/ibm/docker en el contenedor Docker
# - WebSphere Liberty se instalará en /opt/ibm/wlp
# - El servidor WebSphere Liberty será el "defaultServer"
# (por ejemplo, /opt/ibm/wlp/usr/servers/defaultServer)
# - El contenedor Docker se ejecuta utilizando
--net=host, así que ningún puerto se ha
# exportado explícitamente en este archivo
FROM websphere-liberty
#
# Inicio automático del servidor Liberty con el contenedor
#
ENTRYPOINT ["/opt/ibm/wlp/bin/server", "run", "defaultServer"]
#
#
#
# Añadir colectivo que habilita scripts
#
ADD joinMember /opt/ibm/docker/
RUN chmod +x /opt/ibm/docker/joinMember
ADD removeMember /opt/ibm/docker/
RUN chmod +x /opt/ibm/docker/removeMember
#
# Actualizar el sistema operativo
#
RUN apt-get update
#
# Añadir las características adicionales necesarias
#
RUN installUtility install --acceptLicense scalingMember-1.0
clusterMember-1.0
collectiveMember-1.0
ADD server.xml /opt/ibm/wlp/usr/servers/defaultServer/
#
# Insertar el nombre de archivo de aplicación. Esta sentencia copia
la aplicación
# en la imagen de Docker.
#
ADD archivo_aplicación
/opt/ibm/wlp/usr/servers/defaultServer/dropins/
Script joinMember
El script de la imagen de Docker joinMember une el servidor miembro del contenedor Docker a un controlador colectivo:#!/bin/bash
#
# Script para unir un contenedor Liberty Docker a un
controlador colectivo.
#
# Obligatorio: <containerName - parámetro posicional que es el nombre
# de este contenedor Docker
# --host - nombre de host de controlador colectivo
# --port - puerto https de controlador colectivo
# --user - usuario administrativo de controlador colectivo
# --password - contraseña de usuario administrativo de controlador colectivo
# --keystorePassword - para utilizarse para el almacén de claves de miembro.
# --dockerHost - nombre de host del host Docker en el que reside este contenedor
#
# Opcional: --clusterName - nombre de clúster para la configuración del miembro.
# Si se especifica, añade también se añade las características de
# clúster y escalado.
#
# Establecer valores iniciales
containerName=$1
# Analizar la línea de mandatos
failure="false"
if [[ -z $1 ]]; then
# Ningún valor recibido
echo "Error: no se han especificado parámetros"
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
# Validar los parámetros necesarios
if [[ -z "$containerName" ]]; then
echo "Error: no se ha especificado containerName, validación suspendida"
failure="true"
fi
# si no se ha especificado un containerName, bash utiliza el
# primer parámetro "--" como el containerName
if [[ $containerName == --* ]]; then
echo "Error: no se ha especificado containerName, validación suspendida"
failure="true"
fi
# Cuando el parámetro posicional containerName falla,
# suspender informes de validación
if [[ $failure == false ]]; then
if [[ -z "${controllerHost// }" ]]; then
echo "Error: ningún host especificado"
failure="true"
fi
if [[ -z "${controllerPort// }" ]]; then
echo "Error: ningún puerto especificado"
failure="true"
fi
if [[ -z "${controllerUser// }" ]]; then
echo "Error: ningún usuario especificado"
failure="true"
fi
if [[ -z "${controllerPassword// }" ]]; then
echo "Error: ninguna contraseña especificada"
failure="true"
fi
if [[ -z "${memberKeystorePassword// }" ]]; then
echo "Error: ninguna keystorePassword especificada"
failure="true"
fi
if [[ -z "${dockerHost// }" ]]; then
echo "Error: ningún dockerHost especificado"
failure="true"
fi
fi
fi
if [[ $failure == false ]]; then
# Crear el archivo env.properties para el miembro de Liberty Docker
echo containerName=$containerName /opt/ibm/docker/env.properties
echo containerHost=$dockerHost >> /opt/ibm/docker/env.properties
# Invocar el programa de utilidad de colectivo
/opt/ibm/wlp/bin/collective join defaultServer --host=$controllerHost --port=$controllerPort --user=$controllerUser --password=$controllerPassword --hostName=$dockerHost --createConfigFile --keystorePassword=$memberKeystorePassword --autoAcceptCertificates --genDeployVariables
# Crear fragmentos de dropin de config adicionales
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 "Ningún clusterName proporcionado, el contenedor no
se configurará como un miembro de clúster o escalado."
fi
# Mover fragmentos de config a la ubicación correcta para su consumo
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
# Al menos, faltaba un parámetro necesario,
# notificar al usuario la sintaxis correcta
printf "Usage: joinMember <containerName> \n\t--host <controller host> \n\t--port <controller https port> \n\t--user <controller user> \n\t--password <controller password> \n\t--keystorePassword <member keystore password> \n\t--dockerHost <hostname of the Docker host> \n\t[--clusterName <cluster name for the member>]\n"
fi
Script removeMember
El script de la imagen de Docker removeMember elimina el servidor miembro del contenedor Docker de un controlador colectivo:#!/bin/bash
# Script para eliminar un contenedor Liberty Docker de un controlador colectivo.
#
# Obligatorio: <containerName - parámetro posicional que es
# el nombre de este contenedor Docker
# --host - nombre de host de controlador colectivo
# --port - puerto https de controlador colectivo
# --user - usuario administrativo de controlador colectivo
# --password - contraseña de usuario administrativo de controlador colectivo
# --dockerHost - nombre de host del host Docker en el que reside este contenedor
#
#
# Establecer valores iniciales
containerName=$1
# Analizar la línea de mandatos
failure="false"
if [[ -z $1 ]]; then
# Ningún valor recibido
echo "Error: no se han especificado parámetros"
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
# Validar los parámetros necesarios
if [[ -z "$containerName" ]]; then
echo "Error: no se ha especificado containerName, validación suspendida"
failure="true"
fi
# si no se ha especificado un containerName, bash utiliza el
# primer parámetro "--" como el containerName
if [[ $containerName == --* ]]; then
echo "Error: no se ha especificado containerName, validación suspendida"
failure="true"
fi
# Cuando el parámetro posicional containerName falla,
# suspender informes de validación
if [[ $failure == false ]]; then
if [[ -z "${controllerHost// }" ]]; then
echo "Error: ningún host especificado"
failure="true"
fi
if [[ -z "${controllerPort// }" ]]; then
echo "Error: ningún puerto especificado"
failure="true"
fi
if [[ -z "${controllerUser// }" ]]; then
echo "Error: ningún usuario especificado"
failure="true"
fi
if [[ -z "${controllerPassword// }" ]]; then
echo "Error: ninguna contraseña especificada"
failure="true"
fi
if [[ -z "${dockerHost// }" ]]; then
echo "Error: ningún dockerHost especificado"
failure="true"
fi
fi
fi
# Invocar el programa de utilidad de colectivo
if [[ $failure == false ]]; then
/opt/ibm/wlp/bin/collective remove defaultServer --host=$controllerHost --port=$controllerPort --user=$controllerUser --password=$controllerPassword --hostName=$dockerHost --autoAcceptCertificates
else
# Al menos, faltaba un parámetro necesario,
# notificar al usuario la sintaxis correcta
printf "Usage: removeMember <containerName> \n\t--host=<controller host> \n\t--port=<controller https port> \n\t--user=<controller user> \n\t--password=<controller password> \n\t--dockerHost=<docker host> \n"
fi