Crear con Docker un entorno de desarrollo Oracle SOA Suite/Oracle Service Bus

A todos los que trabajamos/desarrollamos con Oracle SOA Suite y Oracle Service Bus nos toca lidiar con la gestión de varios entornos en cliente y, muchas veces, las pruebas que necesitamos realizar no se pueden desplegar sobre el entorno de desarrollo/integración que tengamos para ello. Por esto mismo suele ser necesario tener un entorno local desde el cual podamos hacer esas pruebas, configuraciones o gestiones antes de desplegarlas sobre el entorno del cliente.

 

En el blog de avanttic tenéis varios posts de introducción a Dockers que os recomiendo leer antes de empezar con esta guía para entender lo que conlleva el mundo de los contenedores:

 

 

En la guía de hoy vamos a provisionar dos contenedores, uno para Base de Datos y otro que contendrá el entorno de desarrollo SOA/OSB.

 

Entorno local y requisitos previos

Para la guía nos basaremos en un entorno local Windows 10 en el cuál deberemos tener instalado:

 

Con esta base, podemos empezar a provisionar nuestro entorno local de desarrollo.

 

Contenedor de Base de Datos

La base de datos que vamos a utilizar será una Enterprise versión 12.2.0.1 que está certificada para Oracle SOA Suite y Oracle Service Bus.

 

El primer paso es acceder a Oracle Container Registry y navegar hasta Database, Enterprise y aceptar el “Contrato de Licencia” necesario para poder realizar pull de la imagen en nuestro equipo.

 

 

 

 

Ahora pasaremos a crear el contenedor.
Desde el PowerShell de Windows ejecutamos lo siguiente:

 

docker login container-registry.oracle.com

 

Deberemos realizar login con nuestro usuario y contraseña usado para container-registry.oracle.com.
Procederemos a crear una red interna para la comunicación entre los contenedores:

 

docker network create -d bridge soanetwork

 

Crearemos un fichero de configuración en una ruta temporal (por ejemplo C:\docker_tmp) con el nombre soadatabase.env.txt con los siguientes datos:

 

DB_SID=soadb
DB_PDB=soapdb
DB_DOMAIN=es.avanttic.test
DB_BUNDLE=basic

 

Procederemos directamente a lanzar el run del contenedor para su creación:

 

docker run -d --name soadatabase --network soanetwork --network-alias soanetwork -p 1521:1521 -p 5500:5500 --env-file C:\docker_tmp\soadatabase.env.txt -it --shm-size="8g" container-registry.oracle.com/database/enterprise:12.2.0.1

 

Ahora nos conectaremos al contenedor para preparar la Base de Datos (la contraseña por defecto de sys es Oradoc_db1):

 

docker exec -it soadatabase bash -c "source /home/oracle/.bashrc; sqlplus /nolog"
connect sys as sysdba;
alter session set "_ORACLE_SCRIPT"=true;
alter user sys account unlock;
connect sys/Oradoc_db1@soapdb AS SYSDBA

 

 

 

Ya tenemos la base de datos preparada y funcionando.

 

Contenedor de Oracle SOA Suite

En el apartado anterior nos hemos basado en la imagen oficial ofrecida desde Oracle Container Registry, no nos hemos metido en configuraciones adicionales de crear la imagen a nuestro gusto porque no es necesario, pero, sin embargo, para SOA Suite si vamos a crear (build) la imagen para basarnos en la última JRE e instalar los últimos parches del producto.

 

Dentro del git de Oracle encontramos el proyecto docker-images donde tenemos multitud de productos con sus DockerFile para poder generar los contenedores. En esta guía nos hemos basado en el repositorio de Oracle Java y Oracle SOA Suite, pero realizando unas modificaciones que veremos más adelante.

 

Para generar nuestra imagen necesitaremos la base (Oracle Linux 7 Slim) e incorporamos la última JRE 8 disponible en el momento.

 

Una vez clonado el git docker-images de Oracle descargamos la última versión de server-jre desde Oracle (https://www.oracle.com/java/technologies/javase-server-jre8-downloads.html).

 

 

 

Colocamos el fichero server-jre-8u281-linux-x64.tar.gz descargado dentro de la carpeta correspondiente del git clonado donde vamos a crear la imagen y se encuentra el DockerFile, es decir, <carpeta_clonado_git>\OracleJava\8.

 

 

 

Abrimos PowerShell en esa ruta y ejecutamos lo siguiente:

 

docker build --tag oracle/serverjre:8 .

 

 

Ya tenemos nuestra imagen creada y disponible para basarnos en ella para la creación de nuestro contenedor que incluirá SOA Suite y Service Bus.

 

Rodrigo Damasio de Moura en su github tiene la base perfecta para lo que necesitamos, ya que, en vez de basarse en los instaladores de producto para versiones de Producción, se basa en los Quick Start. Nos clonamos su repositorio y posteriormente modificaremos con nuestras necesidades.

 

Para empezar la creación del contenedor, tendremos que visitar http://edelivery.oracle.com y descargar V983385-01_2of2.zip y V983385-01_1of2.zip que son los dos ZIP de Oracle Fusion Middleware 12c (12.2.1.4.0) SOA Quick Start for (Linux x86-64). Cuando los tengamos descargados, los descomprimimos y los situamos dentro de la carpeta install dentro del repositorio soasuitequickstart_docker_image\dockerfiles\12.2.1.4\install

 

 

 

Dentro de https://support.oracle.com/ encontramos el Doc.Id 2746813.1 el cual describe cuales son los últimos parches existentes con fecha de enero 2021 para SOA Cloud Service y que podemos aplicar sobre nuestro entorno local.

 

La lista de parches a descargar es:

 

  • 28186730 el cual renombraremos con el nombre 1.p28186730_139425_Generic.zip y copiaremos a la carpeta soasuitequickstart_docker_image\dockerfiles\12.2.1.4\opatch_patch
  • 32253037 el cual renombraremos con el nombre 2.p32253037_122140_Generic.zip y copiaremos a la carpeta soasuitequickstart_docker_image\dockerfiles\12.2.1.4\patches
  • 31544353 (para Linux x86-64) el cual renombraremos con el nombre 3.p31544353_122140_Linux-x86-64.zip y copiaremos a la carpeta soasuitequickstart_docker_image\dockerfiles\12.2.1.4\patches
  • 32337168 el cual renombraremos con el nombre 4.p32337168_122140_Generic.zip y copiaremos a la carpeta soasuitequickstart_docker_image\dockerfiles\12.2.1.4\patches
  • 32121987 el cual renombraremos con el nombre 5.p32121987_122140_Generic.zip y copiaremos a la carpeta soasuitequickstart_docker_image\dockerfiles\12.2.1.4\patches
  • 32124456 el cual renombraremos con el nombre 6.p32124456_122140_Generic.zip y copiaremos a la carpeta soasuitequickstart_docker_image\dockerfiles\12.2.1.4\patches

 

Llegados a este punto, tenemos los instaladores y los últimos parches para poder crear nuestra imagen de SOA 12.2.1.4.
Tendremos que borrar el DockerFile existente en soasuitequickstart_docker_image\dockerfiles por el que podéis descargar de aquí: https://github.com/jorgeceballos-avanttic/-soasuitequickstart_docker_image/blob/main/Dockerfile

 

El DockerFile descargado esta modificado con el nombre de la base image que hemos generado con la jre, y la instalación de los parches. Procedemos a generar la imagen con el siguiente comando:

docker build -t soaquickstartdevelop:12.2.1.4 .

 

 

Una vez generada la imagen, podremos ejecutar el run de nuestro nuevo contenedor e iniciar los siguientes pasos, que serán la ejecución del RCU y creación del dominio.

 

docker run -ti --name soasuitedevelop_12.2.1.4 --network soanetwork --network-alias soanetwork --env DISPLAY=host.docker.internal:0.0 -p 7001:7001 -p 8001:8001 soaquickstartdevelop:12.2.1.4

 

El contenedor se habrá creado y estaremos dentro del mismo con el usuario Oracle.
Ahora procederemos a comprobar que los parches están correctamente instalados y que podemos ejecutar aplicaciones gráficas.

 

/u01/oracle/OPatch/opatch lspatches

 

 

Y lanzamos el famoso xeyes para comprobar el correcto funcionamiento de Xming que, a partir de ahora, cobra protagonismo.

 

 

Creación del domino SOA Suite y Oracle Service Bus

La creación de un dominio de SOA/OSB siempre tiene los mismos pasos básicos, ejecutar el RCU (Repository Creation Utility) para crear las tablas necesarias y el config del dominio para crear el mismo.

 

Desde PowerShell nos conectamos al contenedor

 

docker exec -it soasuitedevelop_12.2.1.4 bash

 

Lanzamos el RCU

 

/u01/oracle/oracle_common/bin/rcu

 

Nos encontraremos con la pantalla de bienvenida del instalador. No nos vamos a parar pantalla donde hacer click (en la documentación oficial esta todo detallado), os pondré los datos importantes de conexión a la base de datos.

 

  • Host Name: soadatabase (nombre de nuestro contenedor de base de datos)
  • Port: 1521
  • Service Name: soapdb.es.avanttic.test (nombre de la pdb y dominio indicado en el fichero de enviroment al momento de crear el contenedor de base de datos)
  • Username: sys
  • Password: Oradoc_db1

 

 

Procedemos con la creación del dominio. Tendremos que decidir, cuantos servidores manejados queremos, de que tipo, sobre que puertos, etc. El dominio que vamos a crear tendrá un servidor Admin y un manejado que contendrá tanto soa-infra (SOA Suite) como servicebus (Service Bus) para reducir el numero de puertos necesarios abrir y manejados a levantar.

 

 

Iniciamos el configurador

 

/u01/oracle/oracle_common/common/bin/config.sh

 

 

Como datos importantes:

 

  • Como Product Templates seleccionaremos “Oracle SOA Suite Reference Configuration” y Oracle Service Bus Reference Configuration”.
  • Se deberá usar los datos de conexión de base de datos usados durante la ejecución del RCU.
  • El dominio contendrá un server manejado en el puerto 8001 con los servers groups SOA-MGD-SVRS y OSB-MGD-SVRS-COMBINED.
  • Con esto hemos finalizado la creación de nuestro dominio de desarrollo, solo queda levantar los servidores y haced uso de ellos.

 

 

 

Consideraciones finales

Al igual que hemos creado la imagen con el producto de Oracle ya instalado, se podrían crear imágenes con el dominio creado o usar un Docker Compose con que el que orquestar todas las tareas manuales ejecutadas en el día de hoy para incluir nuestros scripts, volúmenes, etc. Pero la finalidad de esta guía es provisionar un entorno de Oracle SOA Suite y Oracle Service Bus sin prácticamente conocimientos de Docker y creando un dominio a medida.

Twitter
LinkedIn
Evolución, innovación y transformación
31 Service Expertise avalados por Oracle 
Nuestra propuesta de valor
Posts 100% Oracle
Sigue nuestro día a día