For LINUX platformsFor Windows platforms[16.0.0.3 and later]

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

Icono que indica el tipo de tema Tema de referencia

Nombre de archivo: rwlp_deployservice_docker_nodejs_example.html