Desplegando Agentes ODI rápidamente con Docker

A finales de agosto, Oracle anunciaba el soporte oficial para la versión 18.03 del motor de ejecución de Docker, y es que hace ya algún tiempo, Oracle adoptó la popular plataforma para el despliegue de contenedores virtuales, como válida para sus productos y publicó un repositorio en Git-Hub con scripts y “Dockerfiles” para crear las imágenes de cada uno. Uno de los factores clave a la hora de procesar grandes cantidades de información, está en la habilidad de mover el cómputo cerca de los datos para optimizar el rendimiento. Con Docker instalado y gracias a “Oracle Container Runtime”, con solo tener conectividad con una BBDD para albergar los repositorios de Oracle Data Integrator, podemos desplegar un agente Stand-alone en cualquier máquina, con muy pocos pasos, ya que la configuración es completamente automática. Todo ello independientemente del S.O. sobre el que corra Docker.

 

Teniendo conectividad con base de datos, únicamente tendremos que establecer la configuración y desplegar la imagen ODI del “Registry” de Oracle” (en adelante DTR). Si, además, ya tenemos un repositorio ODI en el que queramos usar el agente, será necesario evitar la ejecución del RCU alias “Repository Creation Utility”, creando el fichero que hace de flag. Por el contrario, si la máquina en la que pretendemos ejecutar el agente no posee conexión con ninguna BBDD, siempre podemos desplegar un segundo contenedor con una 12c. El precio a pagar sería tener que exportar/importar el proyecto (o el repositorio entero) de ODI.

La configuración del agente

En cualquier caso, es necesario configurar el agente mediante una serie de variables de entorno, o para mayor comodidad, definirlas en un fichero de texto llamado “odi.env.list”:

 

CONNECTION_STRING=<database_host_name>:<port>/<service>
DB_PASSWORD=<sysdba_password>
RCUPREFIX=<rcu_prefix>
DB_SCHEMA_PASSWORD=<rcu_schema_password>
SUPERVISOR_PASSWORD=<supervisor_password>
WORK_REPO_NAME=<work_repository_name>
WORK_REPO_PASSWORD=<work_repository_password>
HOST_NAME=<docker_host_name>

 

Un aspecto importante es emplear los nombres de host. Utilizar “localhost” o IPs, incluso aunque llegue a levantar el agente, provocará que posteriormente no seamos capaces de conectar con el agente mediante el cliente ODI. A continuación veremos la problemática que presenta cada uno de los tres casos planteados al inicio, junto a la receta que nos permitirá salir airosos de cada uno de ellos.

BBDD conectada con la máquina de despliegue y sin repositorios

Una vez tengamos nuestras variables definidas, tan sólo tendremos que ingresar en el DTR de Oracle con nuestra cuenta (después de aceptar el TOS vía web) y utilizar el comando “Docker pull” para descargar la imagen de la versión deseada:

 

docker login container-registry.oracle.com
Username: <myOracleUser>
Password: <myOraclePass>
Login successful.

docker pull container-registry.oracle.com/middleware/odi:12.2.1.3

Digest: sha256:45592e82a4d0fa2e0f0cfc3957de8694c8845dddcb1d78819f0dc302e116f59e
Status: Downloaded newer image for container-registry.oracle.com/middleware/odi:12.2.1.3

 

Por último, lanzaremos el contenedor directamente con:

 

docker run -it --name ODIContainer --add-host="<database_host_name>:<database_IP>" --env-file ./odi.env.list -p 20910:20910 containerregistry.oracle.com/middleware/odi:12.2.1.3

Repository Creation Utility – Checking Prerequisites
Checking Component Prerequisites
Repository Creation Utility – Creating Tablespaces
Validating and Creating Tablespaces
Repository Creation Utility – Create
Repository Create in progress.
Percent Complete: 35

 

Nótese que es necesario añadir al archivo “hosts” del contenedor, el nombre de la máquina con la base de datos que especificamos anteriormente en “odi.env.list”. El script de inicio invocará a la utilidad RCU y creará los repositorios ODI en la BBDD, configurará el dominio y definirá el agente físico automáticamente en el repositorio maestro recién creado, para finalmente iniciar la
ejecución del agente:

 


2018-09-09 16:43:45.995 NOTIFICATION ODI-1111 Agent OracleDIAgent1 started. Agent
version: 12.2.1. Port: 20910. JMX Port: 21910.
2018-09-09 16:43:45.996 NOTIFICATION ODI-1136 Starting Schedulers on Agent
OracleDIAgent1.
2018-09-09 16:43:47.242 NOTIFICATION ODI-1137 Scheduler started for work repository
TEST_ODI_REPO on Agent OracleDIAgent1.

 

Podemos utilizar nuestro cliente ODI para verificar la conexión:

De esta forma podemos empezar un proyecto nuevo en menos de 15 minutos y con la mínima configuración necesaria, sin tener que pasar por el engorro de crear manualmente los repositorios.

 

BBDD conectada con la máquina de despliegue y con repositorios ODI creados

La diferencia básica con el anterior, estriba en que NO queremos que el script de inicio ejecute el RCU para la creación de los repositorios. En la versión actual de la imagen del DTR de Oracle, no han tenido el detalle de proporcionar un “switch” en las variables de entorno para esto. Eso nos deja dos alternativas: reconstruir la imagen, modificándola o lanzar la
imagen con el siguiente comando como “workaround”:

 

docker run -d --name ODIContainer --env-file ./odi.env.list -p 20910:20910 containerregistry.oracle.com/middleware/odi:12.2.1.3 bash -c "mkdir -p /u01/oracle/user_projects/ContainerData/ && touch /u01/oracle/user_projects/ContainerData/RCU.<rcu_prefix>.suc && /u01/oracle/containerscripts/CreateODIDomainandRunAgent.sh"

 

En avanttic tenemos nuestras propias imágenes, con algunas mejoras sobre los originales de Oracle, que nos permiten brindar a nuestros clientes un servicio personalizado, a la vez que se reducen los tiempos de puesta en marcha de los proyectos y se evitan errores de configuración.

 

Sin Base de Datos

La solución más rápida es desplegar un primer contenedor con una BBDD Oracle 12c y una vez listo, desplegar el segundo con el agente, como vimos en primera instancia. Para que haya comunicación entre ambos, crearemos previamente una red virtual en la que enlazaremos ambos.

Creamos la red:

docker network create --driver bridge my_net

 

Hacemos Log-In en el DTR de Oracle:

docker login container-registry.oracle.com

 

Lanzamos el contenedor con la base de datos:

docker run -d --name BDContainer --net my_net --net-alias <docker_host_name> -p 1521:1521 container-registry.oracle.com/database/enterprise:12.2.0.1

 

La cadena de conexión, en el archivo de configuración del agente:

CONNECTION_STRING=<docker_host_name>:1521/ORCLPDB1.localdomain

DB_PASSWORD=Oradoc_db1

HOST_NAME=<docker_host_name>

 

Finalmente, con la base de datos arriba, lanzamos el contenedor del agente:

docker run -d --name ODIContainer --net my_net --net-alias <docker_host_name> --env-file ./odi.env.list -p 20910:20910 container-registry.oracle.com/middleware/odi:12.2.1.3

 

Hecho esto, podremos conectar el cliente de ODI e importar algún proyecto previamente exportado o comenzar a crear uno desde cero. Destacar que también es válido para “Docker for Windows” y (a día de hoy) existen “Dockerfiles” para las versiones 12.2.1.2.6 y 12.2.1.3 (aunque solo la última está disponible en el Oracle DTR) en Git-hub.

Evolución, innovación y transformación
37 especializaciones avaladas por Oracle
Oportunidades ilimitadas
El equipo marca la diferencia
Posts 100% Oracle
Sigue nuestro día a día