Skip to Content
Nueva versión 12 disponible 🎉

Docker

Docker es un método cómodo y eficaz para ejecutar el Babel Licensing Service con fines de prueba. Docker proporciona un entorno ligero y aislado, llamado contenedor, que encapsula el Babel Licensing Service y todas sus dependencias, lo que facilita desplegar y probar el servicio en distintos sistemas sin preocuparse por problemas de compatibilidad ni por conflictos con el entorno del host.

Requisitos previos

  1. Docker Desktop 
  2. Paquete ZIP del Babel Licensing Service (babel_service_net80_x.y.z.w.zip), un único paquete para las dos ediciones
  3. Archivo de licencia de Babel Licensing Server o Data Center (babel.licenses)

Docker debe estar instalado antes de empezar. Descárguelo del sitio web oficial de Docker  y siga las instrucciones de instalación de su sistema operativo.

Los pasos siguientes instalan el Babel Licensing Service en Docker.

Crear el Dockerfile

Para preparar el entorno en el que se compila la imagen del Babel Licensing Service con Docker, siga los pasos que se indican a continuación.

Crear una carpeta de trabajo

Cree en su equipo local una carpeta para los archivos del Babel Licensing Service. Esta guía la llama «carpeta de trabajo».

Copiar los archivos del servicio

Copie el archivo ZIP del Babel Licensing Service y el archivo babel.licenses en la carpeta de trabajo creada en el paso anterior.

Extraer el archivo

Extraiga el contenido del archivo ZIP del Babel Licensing Service en una subcarpeta llamada «babel» dentro de la carpeta de trabajo.

Crear el Dockerfile

En la carpeta de trabajo, cree un archivo nuevo llamado «Dockerfile» con cualquier editor de texto o IDE.

Añadir el contenido del Dockerfile

Copie el contenido siguiente en el archivo «Dockerfile» y guárdelo.

FROM mcr.microsoft.com/dotnet/aspnet:8.0 as runtime # Expose service ports EXPOSE 5005 # Set working directory WORKDIR /var/www/babel-lic # Copy babel licensing service files to working directory COPY /babel . # Copy license file to working directory COPY /babel.licenses . # Set entrypoint ENTRYPOINT [ "dotnet", "Babel.Licensing.Service.dll" ]

A continuación se explica su contenido:

FROM mcr.microsoft.com/dotnet/aspnet:8.0 as runtime

Esta línea indica la imagen base del contenedor Docker. En este caso se usa la imagen del entorno de ejecución de ASP.NET del registro de contenedores de Microsoft.

EXPOSE 5005

La instrucción EXPOSE indica que el contenedor expone este puerto al equipo host, lo que permite el acceso desde el exterior.

WORKDIR /var/www/svc/babel

La instrucción WORKDIR establece /var/www/svc/babel como directorio de trabajo dentro del contenedor. Es la ubicación en la que se ejecutarán los comandos posteriores.

COPY /babel .

Esta línea copia el contenido del directorio babel (que contiene los archivos del Babel Licensing Service) desde la carpeta de trabajo de babel al directorio de trabajo del contenedor, /var/www/svc/babel.

COPY /babel.licenses .

Del mismo modo, esta línea copia el archivo babel.licenses desde el contexto de compilación al directorio de trabajo del contenedor.

ENTRYPOINT [ "dotnet", "Babel.Licensing.Service.dll" ]

La instrucción ENTRYPOINT indica el comando que se ejecutará al iniciarse el contenedor. En este caso ejecuta el comando dotnet con Babel.Licensing.Service.dll como punto de entrada del Babel Licensing Service.

Este Dockerfile prepara el entorno necesario, expone el puerto requerido, copia los archivos del servicio y el archivo de licencia y define el punto de entrada del Babel Licensing Service.

Una vez compilada con Docker, esta imagen puede usarse junto con Docker Compose para desplegar el Babel Licensing Service.

Docker Compose

Hasta aquí se ha indicado a Docker cómo compilar la imagen que ejecuta el Babel Licensing Service, pero la configuración todavía no pone en marcha ninguna base de datos.

Para configurar la instalación completa del Babel Licensing Service, incluida la base de datos necesaria, se crea un archivo nuevo llamado docker-compose.yml en la carpeta de trabajo. Añada el contenido siguiente al archivo docker-compose.yml:

version: '3.7' services: # Database db: image: mysql:latest volumes: - type: volume source: dbdata target: /var/lib/mysql restart: always ports: - '6610:3306' environment: MYSQL_ROOT_PASSWORD: eWk4fSTa45PGpJ MYSQL_DATABASE: licenses MYSQL_USER: babel MYSQL_PASSWORD: babel networks: - babellic # Babel Licensing licensing: depends_on: - db container_name: babel-licensing restart: always build: dockerfile: Dockerfile context: . image: babel/licensing:latest ports: - '5005:5005' environment: DOTNET_CLI_HOME: /tmp # Environment ASPNETCORE_ENVIRONMENT: Production # Service Address KESTREL__ENDPOINTS__GRPC__URL: http://*:5005 # Available database providers: SQLServer, MySQL, SQLite BABEL_SERVICE_DATABASE__PROVIDER: MySQL # Connection strings environment variables # SQL Server: BABEL_SERVICE_CONNECTIONSTRINGS__SQLSERVER # MySQL: BABEL_SERVICE_CONNECTIONSTRINGS__MYSQL # SQLite: BABEL_SERVICE_CONNECTIONSTRINGS__SQLITE BABEL_SERVICE_CONNECTIONSTRINGS__MYSQL: Server=db;User=babel;Password=babel;Database=licenses # Authentication token variables BABEL_SERVICE_APPLICATION__SIGNINGKEY: q9F0nLFRuphIHUdrlphe BABEL_SERVICE_APPLICATION__TOKENEXPIRATION: 00:30:00 # Licensing variables BABEL_SERVICE_LICENSING__HEARTBEATINTERVAL: 00:05:00 # Reporting variables BABEL_SERVICE_REPORTING__ENCRYPTIONKEY: p5UwIWaqaChLxe3eJA9o networks: - babellic networks: babellic: volumes: dbdata: licensing:

El archivo docker-compose.yml define una aplicación con dos servicios: licensing y db. La imagen del servicio de licencias se compila con el Dockerfile indicado.

Al desplegar la aplicación con Docker Compose, el puerto 5005 del contenedor se asigna al puerto 5005 del host, tal como indica el archivo. Compruebe que ningún otro contenedor esté usando el puerto 5005 en el equipo host. Si lo está, puede cambiar el puerto por uno disponible.

Recuerde sustituir la contraseña de root y la del usuario de MySQL por contraseñas seguras (no hace falta recordarlas) en el servicio db y en la cadena de conexión del servicio de Babel. La contraseña del usuario se usa para establecer la conexión con la base de datos MySQL.

El archivo docker-compose.yml define cómo interactúan entre sí las imágenes de Docker en tiempo de ejecución. Especifica las configuraciones, las variables de entorno y la red que necesitan los servicios. Con Docker Compose y este archivo puede desplegar y administrar fácilmente el Babel Licensing Service junto con su base de datos.

Iniciar el servicio

Una vez preparado el archivo docker-compose.yml como se describe en el apartado anterior, puede ejecutar el comando:

docker-compose up -d

Este comando inicia el Babel Licensing Service y la base de datos asociada en modo desacoplado (detached). Espere a que se inicien los contenedores: Docker Compose descarga las imágenes necesarias (si aún no están presentes) y crea los contenedores según las configuraciones indicadas en el archivo docker-compose.yml. Los contenedores pueden tardar unos instantes en estar plenamente operativos.

Después de ejecutar el comando, puede usar el comando docker ps para comprobar que los contenedores están en ejecución. Muestra una lista de los contenedores en ejecución con sus detalles, incluidos el del Babel Licensing Service y el de la base de datos asociada.

$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5d2d3fc62f0a babel/licensing:latest "dotnet Babel.Licens…" 25 seconds ago Up 23 seconds 0.0.0.0:5005->5005/tcp babel-licensing 0e4245f683cf mysql:latest "docker-entrypoint.s…" 25 seconds ago Up 24 seconds 33060/tcp, 0.0.0.0:6610->3306/tcp babel-licesing-db-1

El archivo de licencia determina la edición. Con una licencia Data Center, la aplicación web se sirve en la dirección del servicio. Con una licencia Server, esa dirección muestra una página de actualización con una comparación de ediciones; el servicio, su API y Babel Desktop siguen funcionando. Para actualizar, sustituya babel.licenses y reinicie el contenedor; no hay que reinstalar nada.

Detener el servicio

Para detener y eliminar los contenedores, y también para eliminar los volúmenes asociados, puede usar los comandos siguientes:

  1. Detener y eliminar los contenedores: para detener y eliminar los contenedores creados con Docker Compose, ejecute el comando siguiente:
$ docker compose down

El comando down detiene y elimina los contenedores definidos en el archivo docker-compose.yml. Detiene los contenedores en ejecución y elimina sus recursos asociados, como las redes y los volúmenes, pero conserva las imágenes.

  1. Detener y eliminar los volúmenes: si además quiere eliminar los volúmenes asociados a los contenedores, puede usar la opción -v con el comando down. Ejecute el comando siguiente:
$ docker compose down -v

Con la opción -v, Docker Compose no solo detiene y elimina los contenedores, sino que también elimina los volúmenes creados durante el ciclo de vida de los contenedores. Así se eliminan por completo todos los recursos relacionados con los contenedores, incluidos los archivos de datos de la base de datos.

Tenga en cuenta que estos comandos deben ejecutarse en el mismo directorio en el que se encuentra el archivo docker-compose.yml. Compruebe además que Docker Compose está instalado y disponible en su entorno de línea de comandos.

Al ejecutar docker compose down o docker compose down -v, se detienen y eliminan los contenedores y se eliminan los volúmenes asociados, con lo que se liberan los recursos que usaba el Babel Licensing Service.

Configurar el Babel Licensing Service

El archivo docker-compose.yml permite configurar el entorno del contenedor del servicio babel-licensing mediante varias variables de entorno. Estas variables sustituyen los ajustes de configuración predeterminados del Babel Licensing Service, que se guardan en el archivo appsettings.json. A continuación se describen con más detalle las variables de configuración disponibles:

  1. DOTNET_CLI_HOME: indica la ubicación del directorio temporal de la CLI (interfaz de línea de comandos) de .NET. En este caso se establece en /tmp.
  2. ASPNETCORE_ENVIRONMENT: establece el entorno en el que se ejecuta el Babel Licensing Service. El valor Production indica que el servicio se ejecuta en un entorno de producción.
  3. KESTREL__ENDPOINTS__GRPC__URL: define la URL del punto de acceso gRPC del Babel Licensing Service. En este caso se establece en http://*:5005, lo que indica que el servicio escucha en todas las interfaces de red disponibles, en el puerto 5005.
  4. BABEL_SERVICE_DATABASE__PROVIDER: indica el proveedor de base de datos que usa el Babel Licensing Service. El valor MySQL indica que se usa MySQL como proveedor de base de datos.
  5. BABEL_SERVICE_CONNECTIONSTRINGS__MYSQL: establece la cadena de conexión de la base de datos MySQL. Indica el servidor, el usuario, la contraseña y el nombre de la base de datos que usa el Babel Licensing Service. El proveedor MySQL funciona también en la imagen de .NET 10 (mcr.microsoft.com/dotnet/aspnet:10.0 con el paquete babel_service_net100_x.y.z.w.zip), donde el servicio usa Microting.EntityFrameworkCore.MySql, la bifurcación de Pomelo, con las mismas variables de entorno.
  6. BABEL_SERVICE_APPLICATION__SIGNINGKEY: define la clave de firma que se usa para generar y validar los tokens de autenticación del Babel Licensing Service. Desde la versión 11.7.0, el appsettings.json incluido ya no contiene un valor fijo: si SigningKey está vacía al arrancar, el servicio genera una aleatoria para el proceso en curso (y escribe una advertencia en el registro). En cualquier despliegue que no sea de desarrollo, y sobre todo cuando se ejecutan varias réplicas detrás de un equilibrador de carga, establezca siempre esta variable con un secreto explícito y persistente, de modo que los tokens emitidos sobrevivan a los reinicios y se acepten en todas las instancias.
  7. BABEL_SERVICE_APPLICATION__TOKENEXPIRATION: establece el tiempo de vencimiento de los tokens de autenticación que emite el Babel Licensing Service.

Administrador inicial (desde la versión 11.7.0): el servicio ya no se distribuye con las credenciales predeterminadas admin / admin. Para crear el administrador inicial en el primer arranque, establezca BABEL_SERVICE_APPLICATION__ADMINUSERNAME y BABEL_SERVICE_APPLICATION__ADMINPASSWORD (y, de forma opcional, BABEL_SERVICE_APPLICATION__ADMINEMAIL). El contenedor se inicia aunque falten, pero no se crea ningún usuario administrador, de modo que no es posible iniciar sesión en la aplicación web (Data Center) con esa cuenta y Babel Desktop no dispone de una clave API de administrador con la que conectarse, hasta que se establezcan los dos valores obligatorios y se reinicie el contenedor. Estos valores solo se usan en el primer arranque; después, cambie la contraseña desde la aplicación web y quite ADMINPASSWORD de su entorno.

  1. BABEL_SERVICE_LICENSING__HEARTBEATINTERVAL: indica el intervalo máximo con el que los clientes deben enviar señales de actividad al Babel Licensing Service. El formato es hh:mm:ss e indica el intervalo de tiempo entre una señal de actividad y la siguiente.
  2. BABEL_SERVICE_REPORTING__ENCRYPTIONKEY: define la clave de cifrado que se usa para cifrar los datos de la funcionalidad de informes del Babel Licensing Service.

Estas variables de entorno permiten personalizar y configurar distintos aspectos del Babel Licensing Service según sus necesidades. Al establecer estas variables en el archivo docker-compose.yml, puede modificar el comportamiento del servicio sin tocar el archivo appsettings.json original, lo que aporta flexibilidad y facilita la configuración.

Imagen Docker de MSSQL Server

Para configurar Babel Licensing con MSSQL en Docker, la instalación usa la imagen más reciente de Azure SQL Edge, que es compatible con Linux Ubuntu. La configuración YAML que se muestra incluye las principales variables de entorno necesarias para el acceso a la base de datos, los tokens de autenticación y los parámetros de licencias. Este enfoque simplifica el despliegue y la integración de Babel Licensing con una base de datos MSSQL en un entorno Docker.

version: '3.7' services: # Database ms-sql-server: image: mcr.microsoft.com/azure-sql-edge:latest volumes: - events_mssql:/var/opt/mssql restart: always ports: - '1433:1433' environment: MSSQL_SA_PASSWORD: eWk4fSTa45PGpJ ACCEPT_EULA: Y DATABASE: licenses networks: - babellic # Babel Licensing licensing: depends_on: - ms-sql-server container_name: babel-licensing-mssql restart: always build: dockerfile: Dockerfile context: . image: babel/licensing:latest ports: - '5005:5005' volumes: - type: bind source: ./babel target: /var/www/babel-lic environment: DOTNET_CLI_HOME: /tmp # Environment ASPNETCORE_ENVIRONMENT: Production # Service Address KESTREL__ENDPOINTS__GRPC__URL: http://*:5005 # Available database providers: SQLServer, MySQL, SQLite BABEL_SERVICE_DATABASE__PROVIDER: SQLServer # Connection strings environment variables # SQL Server: BABEL_SERVICE_CONNECTIONSTRINGS__SQLSERVER # MySQL: BABEL_SERVICE_CONNECTIONSTRINGS__MYSQL # SQLite: BABEL_SERVICE_CONNECTIONSTRINGS__SQLITE BABEL_SERVICE_CONNECTIONSTRINGS__SQLSERVER: data source=ms-sql-server;user id=sa;password=eWk4fSTa45PGpJ;initial catalog=licenses;trusted_connection=false;encrypt=false # Authentication token variables BABEL_SERVICE_APPLICATION__LOGTODATABASE: true BABEL_SERVICE_APPLICATION__SIGNINGKEY: q9F0nLFRuphIHUdrlphe BABEL_SERVICE_APPLICATION__TOKENEXPIRATION: 00:30:00 # Licensing variables BABEL_SERVICE_LICENSING__HEARTBEATINTERVAL: 00:05:00 # Reporting variables BABEL_SERVICE_REPORTING__ENCRYPTIONKEY: p5UwIWaqaChLxe3eJA9o networks: - babellic networks: babellic: volumes: events_mssql: licensing:

Con Docker puede preparar rápidamente una instancia del Babel Licensing Service sin tener que configurar e instalar manualmente todas las dependencias necesarias en su equipo local o en su servidor. Así evita posibles conflictos con las versiones de software o las dependencias existentes, simplifica la instalación y ahorra tiempo.

¿Se ejecuta en un host en modo FIPS? Si el contenedor se ejecuta en un host con el modo FIPS activado y la imagen base no incluye un proveedor FIPS de OpenSSL certificado, el servicio puede no arrancar y producir una OpenSslCryptographicException: error:03000086. Consulte Conformidad con FIPS para conocer la causa y cómo resolverlo (normalmente con OPENSSL_FORCE_FIPS_MODE=0 o con una imagen base compatible con FIPS).

Last updated on