La plataforma de código abierto Docker cuenta con una excelente documentación que debe leer y comprender.
Docker es una plataforma basada en contenedores que permite desarrollar, distribuir y ejecutar aplicaciones dentro de un contenedor. La aplicación, además de las dependencias que esta necesite, como archivos binarios y bibliotecas, y la información de configuración se guardan en el contenedor. Puede distribuir varios contenedores, que se ejecutan en Docker y sobre el sistema operativo.
Con Docker, puede ampliar las aplicaciones verticalmente, lo que significa que puede haber varias instancias del servidor de sesión en un servidor y cada una de ellas presentará exactamente el mismo rendimiento que cuando se creó y probó.
La organización en contenedores ofrece muchas ventajas:
Rendimiento
Las máquinas virtuales son una alternativa a los contenedores. Sin embargo, los contenedores no contienen un sistema operativo (a diferencia de las máquinas virtuales). Esto significa que los contenedores se pueden crear e iniciar de forma más rápida y presentan un formato más pequeño.
Agilidad
Debido a que los contenedores son más portátiles y ofrecen un mayor rendimiento, puede aprovechar los procedimientos de desarrollo más ágiles y con mayor capacidad de respuesta.
Aislamiento
Los contenedores de Docker son independientes entre sí. Esto es importante porque un contenedor de Docker que contenga una aplicación, incluidas las versiones necesarias del software compatible, no interferirá con otro contenedor de la misma aplicación que requiera un software compatible diferente. Puede tener total confianza de que, en cada etapa del proceso de desarrollo y distribución, la imagen que cree presentará el rendimiento esperado.
Capacidad de ampliación
La creación de nuevos contenedores es un proceso rápido y sencillo. La documentación de Docker proporciona información sobre cómo gestionar varios contenedores.
Existen términos básicos con los que debe familiarizarse al trabajar con Docker. Para obtener más información, consulte el sitio de documentación de Docker.
Si decide utilizar Docker durante la instalación de HACloud, el paquete de instalación incluirá un archivo de Docker inicial y un archivo jar de la aplicación complementario para que pueda empezar a utilizar el servidor de sesión en los contenedores. Estos archivos están disponibles antes de la instalación.
Puede encontrar ejemplos en la carpeta docker/samples. Consulte Ejemplos para obtener las instrucciones correspondientes.
Para crear la imagen base, es necesario realizar cuatro pasos:
Instale Docker. Siga las instrucciones del sitio Web de Docker.
Extraiga el archivo del paquete de descarga y busque Dockerfile,entrypoint.sh y sessionserver.jar en la carpeta Docker.
Cree la imagen de Docker.
Ejecute la imagen de Docker.
Si ha seguido los pasos 1 y 2, ha instalado Docker, y ha extraído y localizado el archivo de Docker y el archivo sessionserver.jar, el siguiente paso consiste en crear la imagen base de Docker del servidor de sesión.
Ejecute este comando desde la carpeta que contiene el archivo de Docker:
docker build -t hacloud/sessionserver:<versión>.
Sustituya <versión> por la versión del servidor de sesión. Si no hay disponible una versión, la etiqueta por defecto (-t) es la más reciente.
Compruebe que la imagen se haya creado correctamente. Ejecute:
docker images
La salida debería contener información acerca de la imagen que acaba de crear.
Antes de poder ejecutar la imagen del servidor de sesión en un contenedor de Docker, debe llevar a cabo los siguientes pasos:
Indicar a MSS que confíe en el certificado de identidad del servidor de sesión
Proporcionar el almacén de claves que contiene el certificado de identidad del servidor de sesión.
Proporcionar el almacén de confianza que contiene el certificado de MSS
Asignación del almacén de claves y el almacén de confianza a los que se encuentran en el contenedor
Para especificar la ubicación del servidor MSS, transfiera una variable de entorno al servidor de sesión mediante Docker. Por ejemplo, --env MSS_SERVER=mss.server.com
Para especificar la contraseña de registro de servicios, transfiera una variable de entorno al servidor de sesión mediante Docker. Por ejemplo, --env SERVICE_REGISTRY_PASSWORD=<su_contraseña>.
Puede recuperar la contraseña desde la propiedad service.registry.password ubicada en ./mss/server/conf/container.properties en el servidor MSS. Utilice la propiedad service.registry.password completa.
Para llevar a cabo este paso, puede utilizar Consola Administrativa > Configurar parámetros > Certificados de confianza. Consulte la documentación de la Consola Administrativa de MSS, Para añadir un certificado de servidor al almacén de confianza de MSS. El certificado del servidor de sesión está disponible en el directorio sessionserver/etc.
El servidor de sesión se identifica mediante un certificado. Se espera que el certificado esté presente en el almacén de claves de Java, /sessionserver/etc/keystore.bcfks, ubicado en el contenedor.
Cuando el servidor de sesión establece conexiones TLS salientes, comprueba la confianza de los servidores remotos (como, por ejemplo, MSS) mediante certificados de su almacén de confianza. Se confiará en los certificados presentes en el almacén de claves de Java, /sessionserver/etc/trustcerts.bcfks, ubicado en el contenedor.
Tiene dos opciones para proporcionar estos almacenes de claves en el contenedor:
Un montaje de volumen monta un archivo o un directorio del equipo host en un contenedor. Se hace referencia al archivo o el directorio mediante su vía completa o relativa en el equipo host.
Este volumen monta los archivos de los almacenes de claves y de confianza del host en el contenedor de Docker.
docker run --env MSS_SERVER=localhost \
--env SERVICE_REGISTRY_PASSWORD=<introducir contraseña aquí> \
--volume ~/demo_keystore.bcfks:/sessionserver/etc/keystore.bcfks \
--volume ~/demo_truststore.bcfks:/sessionserver/etc/trustcerts.bcfks \
--publish 7443:7443 \
sessionserver
Existe un inconveniente asociado al uso del montaje de volumen. Dado que los almacenes del almacén de claves deben encontrarse en cada host de Docker en el que se esté ejecutando un contenedor, el contenedor de Docker no será muy portátil.
Con este método, puede crear un nuevo archivo de Docker para copiar los archivos que necesita en la imagen de Docker. Esto permite que la imagen de Docker sea más portátil.
Cree primero un archivo de Docker que se extenderá desde la imagen de Docker, "hacloud/sessionserver".
FROM hacloud/sessionserver:<por ejemplo, hacloud/sessionserver:latest o hacloud/sessionserver:version>
COPY <su-vía>/keystore.bcfks //sessionserver/etc/keystore.bcfks COPY <su-vía>/truststore.bcfks //sessionserver/etc/trustcerts.bcfks
A continuación, cree la imagen de Docker ampliada y asígnele el nombre demo.
docker build -t demo .
Por último, ejecute la imagen demo.
docker run --env MSS_SERVER=localhost \
--env SERVICE_REGISTRY_PASSWORD=<introducir contraseña aquí> \
--publish 7443:7443 \
demo
El servidor de sesión debe difundir su nombre de host para que MSS pueda encontrarlo. Como Docker genera un nombre exclusivo aleatorio al que no se puede acceder fuera del contenedor, debe especificar el nombre del host de Docker para MSS. También es necesario indicar al servidor de sesión el puerto que se va a publicar en el host de Docker. Los clientes que accedan al servidor de sesión acabarán encontrando <nombre_de_host_de_Docker>:<puerto_publicado_de_Docker>.
--env HOST_NAME=docker_host_name --env SERVER_PORT=docker_published_port
Los ejemplos, ubicados en la carpeta docker/samples, le guiarán por las cuatro situaciones mediante la herramienta de composición de Docker. La herramienta de composición utiliza un archivo YAML para configurar y ejecutar las aplicaciones con un único comando.
Requisitos previos
Para ejecutar los ejemplos:
Instale la herramienta de composición de Docker. Revise la información sobre la herramienta de composición de Docker en la documentación de Docker antes de continuar.
Un servidor MSS en ejecución.
Un archivo de almacén de claves para proteger las conexiones TLS en el servidor de sesión en el que confía MSS.
Un archivo de almacén de confianza que disponga de un certificado de servidor MSS.
Entre los ejemplos, se incluyen:
Básico - Un ejemplo básico que proporciona archivos de almacén de claves y de confianza de demostración en los que puede importar un certificado de servidor MSS.
Híbrido - Un ejemplo híbrido que presupone una instalación local de Host Access for the Cloud y monta los archivos de almacén de claves y de confianza existentes del disco en el contenedor de Docker.
Extensiones - Un ejemplo de ampliación que muestra cómo actualizar, modificar y personalizar el cliente Web.
Equilibrio de carga - Un ejemplo de equilibrador de carga que muestra cómo establecer el equilibro entre contenedores enlazados.
En este ejemplo básico, se muestra cómo ejecutar la imagen de Docker del servidor de sesión en la herramienta de composición de Docker. En este ejemplo, deberá importar el certificado del servidor MSS en la muestra proporcionada./certs/demo_truststore.bcfks mediante una herramienta similar a KeyStore Explorer. Por defecto, el certificado de MSS se encuentra en /mss/server/etc/<nombre-equipo>.cer. Consulte Importar un certificado en el almacén de confianza del servidor de sesión.
Antes de ejecutar el ejemplo, actualice los valores de MSS_SERVER, HOST_NAME y SERVICE_REGISTRY_PASSWORD en docker-compose.yml.
Para iniciar el servicio del servidor de sesión:
docker-compose up
Para ejecutar el servicio en un daemon (modo desconectado):
docker-compose up -d
Para examinar los contenedores en ejecución:
docker ps
En este ejemplo, hay presente una instalación local de Host Access for the Cloud con archivos de los almacenes de claves y de confianza en el disco. Estos archivos se montarán (copiarán) en el contenedor de Docker.
Antes de ejecutar el ejemplo, actualice los valores de MSS_SERVER, HOST_NAME, SERVER_PORT y SERVICE_REGISTRY_PASSWORD en el archivo .env.
Para iniciar el servicio del servidor de sesión:
Copie .env y docker-compose.yml en sessionserver/microservices/sessionserver/.
En este directorio, ejecute: docker-compose up -d
Mediante el uso de extensiones y su propio código HTML, CSS o JavaScript, puede actualizar, modificar y personalizar la presentación del cliente Web desde el navegador. Consulte Ampliación del cliente Web para obtener más información.
En este ejemplo, se establece SPRING_PROFILES_ACTIVE en extensions-enabled y se asigna la ubicación de las extensiones en docker-compose.yml.
Antes de ejecutar el ejemplo, actualice los valores de MSS_SERVER, HOST_NAME y SERVICE_REGISTRY_PASSWORD en el archivo .env.
Para iniciar el servicio del servidor de sesión:
docker-compose up -d
También puede optar por ampliar la imagen base de Docker, hacloud/sessionserver, y copiar los archivos de extensión en el contenedor de Docker:
Cree el archivo de Docker que se extenderá desde la imagen de Docker, "hacloud/sessionserver".
FROM hacloud/sessionserver COPY ./certs/keystore.bcfks //sessionserver/etc/keystore.bcfks COPY ./certs/trustcerts.bcfks //sessionserver/etc/trustcerts.bcfks COPY ./extensions /sessionserver/extensions/
Cree la imagen de Docker ampliada y asígnele el nombre extensions.
docker build -t extensions
Actualice docker compose.yml para utilizar la nueva imagen de extensiones.
version: '3'
services:
sessionserver:
image: extensions
environment:
- LOGGING_FILE=./logs/sessionserver.log
- LOGGING_FILE_MAXSIZE=10MB
- LOGGING_FILE_MAXHISTORY=10
- MSS_SERVER=${MSS_SERVER}
- SERVICE_REGISTRY_PASSWORD=${SERVICE_REGISTRY_PASSWORD}
- SPRING_PROFILES_ACTIVE=extensions-enabled
ports:
- ${SERVER_PORT}:7443
HAProxy es un equilibrador de carga. Obtenga más información sobre HAProxy en su sitio Web.
En este ejemplo, se incluye un servicio haproxy en el archivo docker-compose.yml. Este ejemplo utiliza una imagen de haproxy para el equilibro entre contenedores enlazados. En este ejemplo, se utilizan puentes SSL para enlazar los contenedores.
Para proporcionar una comunicación segura entre los clientes y el equilibrador de carga, debe actualizar la propiedad LOAD_BALANCER_CERT del archivo .env con la ubicación del certificado del equilibrador de carga.
Para ayudarle con la prueba, puede generar un certificado autofirmado:
Genere una clave privada exclusiva (KEY):
sudo openssl genrsa -out mydomain.key 2048
Genere una petición de firma de certificado (CSR):
sudo openssl req -new -key mydomain.key -out mydomain.csr
Cree un certificado autofirmado (CRT):
sudo openssl x509 -req -days 365 -in mydomain.csr -signkey mydomain.key -out mydomain.crt
Añada KEY y CERT a loadbalancer.pem:
sudo cat mydomain.key mydomain.crt > ./etc/loadbalancer.pem
Para iniciar los servicios del servidor de sesión y HAProxy:
docker-compose up -d
-o bien-
docker-compose up --scale sessionserver=n -d
Donde n es el número de instancias del servidor de sesión.
Puede cambiar el número de instancias del servidor de sesión después de que se inicien los servicios:
docker-compose scale sessionserver=n
Para acceder a la página de estadísticas del servidor de sesión y HAProxy:
https://server:7443
http://server:1936/haproxy?stats
En uso:
usuario: admin
contraseña: password