For LINUX platformsFor Windows platforms

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

Icono que indica el tipo de tema Tema de referencia

Nombre de archivo: rwlp_deployservice_docker_nd_example.html