

![[16.0.0.3 and later]](../ng_v16003plus.gif)
Dockerfile de ejemplo para una imagen de miembro Node.js
Utilice el ejemplo de Dockerfile para crear una imagen de miembro de colectivo Node.js. La imagen Docker tiene un script joinMember que une al servidor miembro en el contenedor Docker a un controlador colectivo. La imagen Docker también tiene un script removeMember que elimina el servidor miembro del contenedor Docker del colectivo.
Dockerfile
Utilice el ejemplo de Dockerfile siguiente para crear una imagen del miembro de colectivo Node.js. La imagen que está disponible en el hub Docker no puede acceder a las características de Network Deployment como, por ejemplo, scalingMember-1.0. Puede utilizar las últimas dos líneas para instalar una aplicación en la imagen de Docker.
#
# Dockerfile para crear una imagen Node.js
#
# Este Dockerfile presupone los supuestos siguientes:
# - Los colectivos que habilitan scripts (joinMember, removeMember) se colocarán en
# /opt/ibm/docker en el contenedor Docker
# - Los servidores Node.js se crean en /root/wlpn
# - El servidor Node.js será "defaultServer" (por ejemplo, /root/wlpn/defaultServer)
# - La aplicación para instalar ya tendrá sus dependencias resueltas mediante "npm install"
# - El contenedor Docker se ejecutará utilizando --net=host, así que no se exporta ningún puerto explícitamente en este archivo
FROM node:4-slim
#
# Inicio automático del servidor Node.js con el contenedor
#
ENTRYPOINT ["/usr/local/bin/wlpn-server", "run", "defaultServer"]
#
# Añadir colectivos que habilitan 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 OS y JRE
#
RUN apt-get update
#
# Instalar miembro de colectivo APIConnect
#
RUN npm install -g apiconnect-collective-member
#
# Utilizar el código siguiente para instalar una aplicación para su uso en la imagen de Docker
#
COPY express-example-app-1.0.2.tgz /root/wlpn/
RUN wlpn-server unpack defaultServer /root/wlpn/express-example-app-1.0.2.tgz
joinMember script
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 Docker Node.js a un controlador colectivo.
#
# Necesario: <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 - el nombre de host del host de Docker en el que reside este contenedor
#
# Opcional: --clusterName - nombre de clúster para la configuración del miembro. Si se especifica, añade las características de miembro de clúster y de 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 especifica un containerName, bash utiliza el primer parámetro "--" como 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
creación de informes de validación. getops puede ser incorrecto.
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
# Ejecutar la operación de unión
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. El contenedor no se
configurará como un miembro de clúster o de escalado."
wlpn-collective join defaultServer --host=$controllerHost --port=$controllerPort --user=$controllerUser --password=$controllerPassword --keystorePassword=$memberKeystorePassword --autoAcceptCertificates --hostName=$dockerHost --genDeployVars
fi
else
# Como mínimo, falta un parámetro necesario. Proporcione la sintaxis correcta.
printf "Uso: 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
removeMember script
El script de la imagen de Docker removeMember elimina el servidor miembro en el contenedor Docker del colectivo.#!/bin/bash
# Script para eliminar un contenedor de Docker StrongLoop de un
controlador colectivo.
#
# Necesario: <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 - el nombre de host del host Docker en el cual 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 especifica un containerName, bash utiliza el primer
parámetro "--" como 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
creación de informes de validación. getops puede ser incorrecto.
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
wlpn-collective remove defaultServer --host=$controllerHost
--port=$controllerPort --user=$controllerUser --password=$controllerPassword --hostName=$dockerHost --autoAcceptCertificates
else
# Al menos, falta un parámetro necesario. Proporcione la sintaxis
correcta.
printf "Uso: 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