Project:Sandbox

Se utiliza docker-compose en desarrollo y docker en modo swarm para desplegar la aplicación en producción. Ver este enlace para entender el proceso de forma genérica

Prerequisitos

 * Instalar docker: intrucciones en web docker y web mesosphere
 * Instalar docker-compose

Construcción de imágenes docker
Desde el directorio donde se encuentra docker-compose.yml:

prepare.sh docker-compose build

Arranque y parada de la aplicación
Desde el directorio donde se encuentra docker-compose.yml:

docker-compose up docker-compose down

Subida al registro de imágenes docker
Desde el directorio donde se encuentra docker-compose.yml:

docker-compose push

Prerequisitos

 * Instalar docker

Ejecutar una vez
docker login registry.gitlab.com docker swarm init El login en gitlab hay que hacerlo con una cuenta de gitlab.com con acceso al repositorio https://gitlab.com/rsi/abside-in-a-box, ya que es donde se almacenan las imagenes docker del proyecto.

Para desplegar, controlar y borrar
docker stack deploy --compose-file docker-compose.yml --with-registry-auth abside-in-a-box` docker services ls docker stack ps abside-in-a-box docker stack services abside-in-a-box docker stack rm abside-in-a-box Se crean variaos volúmenes para almacenar la base de datos mysql y db2 así como el estado de diferentes imágenes del sistema.

docker volume ls

Lista de imágenes
El proyecto Abside in the Cloud ha creado 22 imágenes docker con los diferentes componentes del sistema.

La lista completa de las estas imágenes docker es:
 * apache


 * db2


 * haproxy


 * ldap_am


 * midas


 * ms


 * mysql_cmis


 * mysql_midas


 * mysql_ms


 * mysql_ntf


 * mysql_tuxedo


 * mysql_wiki


 * mysql_wso2


 * neo4j


 * nodejs


 * ntf


 * openldap


 * samba


 * tuxedo


 * tuxedo_servlet


 * wiki


 * wso2esb

Imagen apache
Esta imagen sirve el contenido estático utiliado por la aplicación MIDAS de Abside, de forma que JBOSS no tenga que servir este tipo de ficheros.

Para ello se levanta un servidor web apache al que se le copia todo el contenido estático de Abside en el directorio  desde el que el servidor apache sirve el contenido.

El proxy que sirva de punto de entrada al sistema (haproxy o F5) debe enrutar el tráfico de css, html, js hasta esta instancia.


 * nombre contenedor
 * apache


 * nombre completo de la imagen
 * registry.gitlab.com/rsi/abside-in-a-box/apache:201702


 * imagen base
 * httpd:2.4


 * variables de entorno
 * No tiene


 * mapedo de puertos
 * puerto 8081 del host mapeado al puerto 80 del contenedor
 * volúmenes
 * No tiene

Dockerfile
FROM httpd:2.4 COPY *.tar / RUN for i in `ls /*.tar` ; do tar xvf $i -C /usr/local/apache2/htdocs/ ; done

ENV TZ=Europe/Madrid RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

Imagen db2
Esta imagen ejecuta el gestor de base de datos DB2 que se utiliza en el backend de Abside (Tuxedo y Batch).

Se basa en la imagen docker oficial de IBM ibmcom/db2express-c:10.5.0.5-3.10.0 que proporciona un DB2 Express sobre Linux.

Sobre esta imagen se crea el modelo de datos y se cargan los datos iniciales de Abside.

En la construcción de la imagen se preparan los DDL y scripts de carga que se ejecutan por el script de arranque (entrypoint.sh) en la primera ejecución de la imagen.

La creación del modelo y la carga de datos se realizan una sola vez y se salvaguardan en el volumen. En posteriores ejecuciones de la imagen, al comprobar que los datos están cargados, el script de arranque simplemente cataloga y arranca el servidor DB2.

En la primera ejecución se realizan las siguientes acciones antes de catalogar y arracar el servidor DB2: 1. Se crea, activa y configura la base de datos ABSIDE_C 2. Se crean los bufferpools 3. Se crean los tablespaces 4. Se agrupan los diferentes scripts de carga de datos en ficheros de 5000 lineas (para mejorar el rendimiento de la carga de los miles de ficheros por tabla que se deben cargar) 5. Se ejecutan los scripts agrupados de carga


 * nombre contenedor
 * db2


 * nombre completo de la imagen
 * registry.gitlab.com/rsi/abside-in-a-box/db2:201702


 * imagen base
 * ibmcom/db2express-c:10.5.0.5-3.10.0


 * variables de entorno
 * DB2INST1_PASSWORD: CmmuWPt87Qh
 * LICENSE: accept
 * DB2_DATABASE: ABSIDE_C
 * mapedo de puertos
 * puerto 2222 del host mapeado al puerto 22 del contenedor
 * puerto 50000 del host mapeado al puerto 50000 del contenedor
 * volúmenes
 * volumen db2_abside___VERSION__ montado en el directorio /home/db2inst1/db2inst1 del contenedor

Dockerfile
FROM ibmcom/db2express-c:10.5.0.5-3.10.0

ENV TZ=Europe/Madrid RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN mkdir -p /home/db2inst1/db2inst1 /SQL \ && chown -R db2inst1:db2inst1 /home/db2inst1/db2inst1 /SQL

VOLUME ["/home/db2inst1/db2inst1"] CMD ["db2start"]

COPY entrypoint.sh / COPY abside_db2luw.sql / COPY DB2_ABSIDE01.tar.gz /

RUN tar zxf /DB2_ABSIDE01.tar.gz -C /SQL \ && rm /DB2_ABSIDE01.tar.gz \ && rm -f `ls -l /SQL/*.sql | awk '{if ($5 == 0) print $9}'` \ && rm -f /SQL/CX_SCI_LOG_TX*.sql 2>/dev/null \ && for sql in /SQL/*.sql ; do perl -pi -e 's/INSERT INTO \w+\.(\w+)/INSERT INTO $1/' $sql; done \ && for sql in /SQL/*.sql ; do perl -pi -e 's/INSERT INTO (\w+)/INSERT INTO PRGQ01.$1/' $sql; done \ && for sql in /SQL/*.sql ; do perl -i.conLagarto -ple 's/[^ -~\t\r]//g' $sql; done

ENV LANG es_ES ENV LANGUAGE es_ES

RUN chmod a+x /entrypoint.sh

Imagen haproxy
Esta imagen, basada el la imagen docker oficial haproxy, es el punto de entrada de los frontales web de Abside in a BOX hacia el exterior.

Esta imagen solo es necesaria cuando se utiliza docker-compose como orquestador de las diferentes imágenes del sistema. Cuando se orquesta con DC/OS, el enrutamiento se realiza a través de los mecanismos ofrecidos por DC/OS (marathon-lb)

La configuración del haproxy se encuentra en el fichero haproxy.cfg. En el se establece el enrutamiento hacia los diferentes imágenes del sistema en función del path o puerto de entrada.

Para conexiones http (puerto 80) el enrutamiento es el siguiente:


 * 1) Si el path empieza por /midas, enrutar hacia la imagen con la aplicación midas
 * 2) Si el path empieza por /MIDAS, /solr_ce o /terminal_financiero_ce, enrutar hacia la imagen con la aplicación ntf
 * 3) Si el path empieza por /security-module-web o /security-module-rs, enrutar hacia la imagen con la aplicación modelo de seguridad
 * 4) Si el path empieza por /AbsideWiki, enrutar hacia la imagen con el wiki
 * 5) Si el path empieza por /ws_tuxedo_ntf, enrutar hacia la imagen con el servlet de Tuxdo
 * 6) En otro caso, enrutar hacia la imagen con el apache para servir el contenido estático.

Para conexiones por el puerto 6969, enrutar hacia la imagen con el nodejs


 * nombre contenedor
 * haproxy


 * nombre completo de la imagen
 * registry.gitlab.com/rsi/abside-in-a-box/haproxy:201702


 * imagen base
 * haproxy:1.7


 * variables de entorno
 * No tiene


 * mapedo de puertos
 * puerto 80 del host mapeado al puerto 80 del contenedor
 * puerto 6969 del host mapeado al puerto 6969 del contenedor
 * volúmenes
 * No tiene

Dockerfile
FROM haproxy:1.7 COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg

ENV TZ=Europe/Madrid RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

Imagen ldap_am
Esta imagen ejecuta el visor de LDAP LDAP Accoumt Manager, LAM.

Se trata de una imagen axiliar utilizada para poder visualizar los LDAP utilizados por Abside (el openldap utilizado por tuxedo y el samba que simula el Active Directory para la validación de usuarios). Su ejecución no es necesaria para el funcionamineto de Abside.

Los detalles de este software pueden encontrase aquí

De esta documentación, los pasos para utilizar esta imagen son:


 * 1) Head your browser to http://localhost:8080,
 * 2) Go to LAM configuration / Edit general settings
 * 3) Login with default password lam and change master password.
 * 4) Go to LAM configuration / Edit server profiles / General Settins
 * 5) Still with password lam go to Edit server profiles to setup your OpenLDAP database.
 * 6) Set server address. If use with docker-compose/docker swarm the name ldap serveraddress is ldap://openldap:389
 * 7) Set tree suffix taken from DOMAIN in ldap environment variable of image ldap (ex. dc=cajarural,dc=com).
 * 8) Update Security Setting. Add user cn=admin with dc DOMIN. (ex. cn=admin,dc=cajarural,dc=com)
 * 9) Go to LAM configuration / Edit server profiles / General Settins
 * 10) Update dc of different elements (ex. dc=cajarural,dc=com)
 * 11) Next login should use the OpenLdap with user admin set in previous step and PASSWORD environment variable set in openldap image


 * nombre contenedor
 * ldap_am


 * nombre completo de la imagen
 * registry.gitlab.com/rsi/abside-in-a-box/ldap_am:201702


 * imagen base
 * ubuntu:trusty


 * variables de entorno
 * No tiene


 * mapedo de puertos
 * puerto 8888 del host mapeado al puerto 80 del contenedor
 * volúmenes
 * volumen ldap_am_account___VERSION__ montado en el directorio /var/lib/ldap-account-manager del contenedor
 * volumen ldap_am_etc___VERSION__ montado en el directorio /etc/ldap-account-manager del contenedor

Dockerfile
FROM ubuntu:trusty ENV TERM xterm
 * 1) ubuntu xenial dropped php5 and installs php7
 * 2) ldap-account-manager supports php7 with release 5.3
 * 3) currently (Nov16) xenial provides ldap-account-manager 5.2

RUN apt-get update RUN apt-get upgrade -y RUN apt-get install -y ldap-account-manager RUN sed -i 's,DocumentRoot .*,DocumentRoot /usr/share/ldap-account-manager,' /etc/apache2/sites-available/000-default.conf RUN ln -sf /proc/self/fd/1 /var/log/apache2/access.log RUN ln -sf /proc/self/fd/2 /var/log/apache2/error.log

COPY start.sh /start.sh CMD /start.sh

ENV TZ=Europe/Madrid RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

EXPOSE 80 VOLUME /var/lib/ldap-account-manager VOLUME /etc/ldap-account-manager

Imagen midas

 * nombre contenedor
 * midas


 * nombre completo de la imagen
 * registry.gitlab.com/rsi/abside-in-a-box/midas:201702


 * imagen base
 * jboss/wildfly:8.2.1.Final


 * variables de entorno
 * PORT_NODE: 7001
 * MIDAS_DB_JNDI: abside_midas
 * MIDAS_DB_PASSWORD: t0MmcELLkDD
 * LDAP_SERVER: samba
 * MIDAS_DB_HOST: mysql_midas
 * SERVER_TUX: tuxedo_servlet
 * SERVER_NODE: nodejs
 * MIDAS_DB_PORT: 3306
 * PORT_TUX: 8080
 * LDAP_DOMAIN: gcrdesarrollo.local
 * MIDAS_DB_USER: midas_user
 * MIDAS_DB_NAME: midas_db
 * ABSIDE_ENDPOINT_WS: ws://abside.docker:6969
 * mapedo de puertos
 * puerto 8080 del host mapeado al puerto 8080 del contenedor
 * puerto 9990 del host mapeado al puerto 9990 del contenedor
 * volúmenes
 * No tiene

Dockerfile
FROM jboss/wildfly:8.2.1.Final

EXPOSE 8080
 * 1) Expose the ports we're interested in

EXPOSE 9990
 * 1) Expose the ports we're interested in

USER root RUN yum update -y \ && yum -y install epel-release \ && yum repolist \ && yum -y install nc  mysql \ && yum clean all

RUN mkdir -p /opt/jboss/wildfly/customization/ RUN chown -R jboss:jboss /opt/jboss/wildfly/customization/ ADD customization /opt/jboss/wildfly/customization/

RUN mkdir -p /opt/jboss/wildfly/modules/rsi RUN chown -R jboss:jboss /opt/jboss/wildfly/modules/rsi ADD rsi /opt/jboss/wildfly/modules/rsi/

RUN mkdir -p /MIDAS RUN chown -R jboss:jboss /MIDAS ENV TZ=Europe/Madrid RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

USER jboss

CMD ["/opt/jboss/wildfly/customization/execute.sh"]

Imagen ms

 * nombre contenedor
 * ms


 * nombre completo de la imagen
 * registry.gitlab.com/rsi/abside-in-a-box/ms:201702


 * imagen base
 * jboss/wildfly:8.2.1.Final


 * variables de entorno
 * MIDAS_DB_JNDI: abside_midas
 * PORT_NTF: 8080
 * MS_DB_USER: ms_user
 * SERVER_NTF: ntf
 * PORT_TUX: 8080
 * PORT_MIDAS: 8080
 * MS_DB_PASSWORD: t0MmcELLkDD
 * SERVER_TUX: tuxedo_servlet
 * MS_DB_NAME: ms_db
 * ABSIDE_ENDPOINT_WS: ws://abside.docker:6969
 * SERVER_MIDAS: midas
 * MS_DB_PORT: 3306
 * MS_DB_HOST: mysql_ms
 * mapedo de puertos
 * puerto 8480 del host mapeado al puerto 8080 del contenedor
 * puerto 10390 del host mapeado al puerto 9990 del contenedor
 * volúmenes
 * No tiene

Dockerfile
FROM jboss/wildfly:8.2.1.Final

EXPOSE 8080
 * 1) Expose the ports we're interested in

EXPOSE 9990
 * 1) Expose the ports we're interested in

USER root RUN yum update -y \ && yum -y install epel-release \ && yum repolist \ && yum -y install nc  mysql \ && yum clean all

RUN mkdir -p /opt/jboss/wildfly/customization/ RUN chown -R jboss:jboss /opt/jboss/wildfly/customization/ RUN mkdir -p /opt/jboss/wildfly/customization/LOGS RUN chown -R jboss:jboss /opt/jboss/wildfly/customization/LOGS/ RUN mkdir -p /ABSIDE/logs/SECURITY_MODULE/ RUN chown -R jboss:jboss /ABSIDE/ RUN mkdir -p /ABSIDE_DES_LOGS/SECURITY_MODULE/ RUN chown -R jboss:jboss /ABSIDE_DES_LOGS/ ENV TZ=Europe/Madrid

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

USER jboss ADD customization /opt/jboss/wildfly/customization/


 * 1) RUN tar xvf /opt/jboss/wildfly/customization/security-module-static.tar -C /opt/jboss/wildfly/welcome-content/

CMD ["/opt/jboss/wildfly/customization/execute.sh", "standalone" ,"standalone.xml"]
 * 1) 172.22.4.39 	A020NFS01.gcrdesarrollo.local

Imagen mysql_cmis
Imagen basada en la imagen oficial mysql:5.7 en la que se carga el modelo y datos de la aplicación CMIS de Abside

Los datos se cargan en la primera ejecución de la imagen. Para ello se utiliza el mecanismo proporcionado por la imagen oficial y que carga en orden alfabético los scripts que se dejen en el directorio /docker-entrypoint-initdb.d de la imagen.


 * nombre contenedor
 * mysql_cmis


 * nombre completo de la imagen
 * registry.gitlab.com/rsi/abside-in-a-box/mysql_cmis:201702


 * imagen base
 * mysql:5.7


 * variables de entorno
 * MYSQL_ROOT_PASSWORD: CmmuWPt87Qh
 * MYSQL_DATABASE: cmis_document
 * MYSQL_PASSWORD: t0MmcELLkDD
 * MYSQL_USER: cmis_user
 * mapedo de puertos
 * No tiene


 * volúmenes
 * volumen cmis_mysqldb___VERSION__ montado en el directorio /var/lib/mysql del contenedor

Dockerfile
FROM mysql:5.7

COPY *.tar.gz / RUN tar zxvf /*.tar.gz -C /docker-entrypoint-initdb.d --strip=1 RUN cd /docker-entrypoint-initdb.d \ && mv cmis_document.sql_ddl 01_ddl.sql \ && mv cmis_document.sql_ddl_rutinas 02_ddl_rutinas.sql \ && mv cmis_document.sql 03.sql \ && mv *.txt ../

COPY my.cnf /etc/mysql/conf.d/my.cnf

RUN perl -pi -e '$/=undef; s/^CREATE\s+TABLESPACE.*ENGINE=ndbcluster;//sm' /docker-entrypoint-initdb.d/01_ddl.sql \ && perl -pi -e 's!/\*.* TABLESPACE .* \*/\s*ENGINE=ndbcluster !ENGINE=InnoDB !' /docker-entrypoint-initdb.d/01_ddl.sql

ENV TZ=Europe/Madrid RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

Imagen mysql_midas
Imagen basada en la imagen oficial mysql:5.7 en la que se carga el modelo y datos de la aplicación MIDAS de Abside

Los datos se cargan en la primera ejecución de la imagen. Para ello se utiliza el mecanismo proporcionado por la imagen oficial y que carga en orden alfabético los scripts que se dejen en el directorio /docker-entrypoint-initdb.d de la imagen.


 * nombre contenedor
 * mysql_midas


 * nombre completo de la imagen
 * registry.gitlab.com/rsi/abside-in-a-box/mysql_midas:201702


 * imagen base
 * mysql:5.7


 * variables de entorno
 * MYSQL_ROOT_PASSWORD: CmmuWPt87Qh
 * MYSQL_DATABASE: midas_db
 * MYSQL_PASSWORD: t0MmcELLkDD
 * MYSQL_USER: midas_user
 * mapedo de puertos
 * No tiene


 * volúmenes
 * volumen midas_mysqldb___VERSION__ montado en el directorio /var/lib/mysql del contenedor

Dockerfile
FROM mysql:5.7

COPY my.cnf /etc/mysql/conf.d/my.cnf COPY *.tar.gz /

RUN tar zxvf /*.tar.gz -C /docker-entrypoint-initdb.d --strip=1 RUN cd /docker-entrypoint-initdb.d \ && mv abside_01.sql_ddl 01_ddl.sql \ && mv abside_01.sql_ddl_rutinas 02_ddl_rutinas.sql \ && mv abside_01.sql 03.sql \ && mv *.txt ../ \ && perl -pi -e '$/=undef; s/^CREATE\s+TABLESPACE.*ENGINE=ndbcluster;//sm' /docker-entrypoint-initdb.d/01_ddl.sql \ && perl -pi -e 's!/\*.* TABLESPACE .* \*/\s*ENGINE=ndbcluster !ENGINE=InnoDB !' /docker-entrypoint-initdb.d/01_ddl.sql \ && perl -pi -e 's/source di_diario_electron.result.txt;//' /docker-entrypoint-initdb.d/03.sql \ && rm /di_diario_electron.result.txt

ENV TZ=Europe/Madrid RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

Imagen mysql_ms
Imagen basada en la imagen oficial mysql:5.7 en la que se carga el modelo y datos de la aplicación modelo de seguridad de Abside

Los datos se cargan en la primera ejecución de la imagen. Para ello se utiliza el mecanismo proporcionado por la imagen oficial y que carga en orden alfabético los scripts que se dejen en el directorio /docker-entrypoint-initdb.d de la imagen.


 * nombre contenedor
 * mysql_ms


 * nombre completo de la imagen
 * registry.gitlab.com/rsi/abside-in-a-box/mysql_ms:201702


 * imagen base
 * mysql:5.7


 * variables de entorno
 * MYSQL_ROOT_PASSWORD: CmmuWPt87Qh
 * MYSQL_DATABASE: ms_db
 * MYSQL_PASSWORD: t0MmcELLkDD
 * MYSQL_USER: ms_user
 * mapedo de puertos
 * No tiene


 * volúmenes
 * volumen ms_mysqldb___VERSION__ montado en el directorio /var/lib/mysql del contenedor

Dockerfile
FROM mysql:5.7

COPY my.cnf /etc/mysql/conf.d/my.cnf COPY *.tar.gz /

RUN tar zxvf /*.tar.gz -C /docker-entrypoint-initdb.d --strip=1 \ && cd /docker-entrypoint-initdb.d \ && mv security_module.sql_ddl 01_ddl.sql \ && mv security_module.sql_ddl_rutinas 02_ddl_rutinas.sql \ && echo "SET foreign_key_checks = 0;" > 03.sql \ && echo "SET @disable_triggers = 1;" >> 03.sql \ && cat security_module.sql >> 03.sql \ && rm security_module.sql \ && mv *.txt ../ \ && perl -pi -e '$/=undef; s/^CREATE\s+TABLESPACE.*ENGINE=ndbcluster;//sm' /docker-entrypoint-initdb.d/01_ddl.sql \ && perl -pi -e 's!/\*.* TABLESPACE .* \*/\s*ENGINE=ndbcluster !ENGINE=InnoDB !' /docker-entrypoint-initdb.d/01_ddl.sql \ && perl -pi -e 's/source tb_vw_user.result.txt;//' /docker-entrypoint-initdb.d/03.sql \ && perl -pi -e 's/source tb_security_module_trace.result.txt;//' /docker-entrypoint-initdb.d/03.sql \ && rm /tb_vw_user.result.txt /tb_security_module_trace.result.txt

ENV TZ=Europe/Madrid RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

Imagen mysql_ntf
Imagen basada en la imagen oficial mysql:5.7 en la que se carga el modelo y datos de la aplicación NTF de Abside

Los datos se cargan en la primera ejecución de la imagen. Para ello se utiliza el mecanismo proporcionado por la imagen oficial y que carga en orden alfabético los scripts que se dejen en el directorio /docker-entrypoint-initdb.d de la imagen.


 * nombre contenedor
 * mysql_ntf


 * nombre completo de la imagen
 * registry.gitlab.com/rsi/abside-in-a-box/mysql_ntf:201702


 * imagen base
 * mysql:5.7


 * variables de entorno
 * MYSQL_ROOT_PASSWORD: CmmuWPt87Qh
 * MYSQL_DATABASE: ntf_liferay
 * MYSQL_PASSWORD: t0MmcELLkDD
 * MYSQL_USER: ntf_user
 * mapedo de puertos
 * puerto 3406 del host mapeado al puerto 3306 del contenedor
 * volúmenes
 * volumen ntf_mysqldb___VERSION__ montado en el directorio /var/lib/mysql del contenedor

Dockerfile
FROM mysql:5.7

COPY my.cnf /etc/mysql/conf.d/my.cnf COPY *.tar.gz /
 * 1) COPY 04_ntf_liferay_trigger.sql /docker-entrypoint-initdb.d

RUN tar zxvf /*.tar.gz -C /docker-entrypoint-initdb.d --strip=1 \ && cd /docker-entrypoint-initdb.d \ && echo "SET foreign_key_checks = 0;" > 01_ddl.sql \ && cat ntf_liferay.sql_ddl >> 01_ddl.sql \ && rm ntf_liferay.sql_ddl \ && mv ntf_liferay.sql_ddl_rutinas 02_ddl_rutinas.sql \ && echo "SET foreign_key_checks = 0;" > 03.sql \ && echo "SET @disable_triggers = 1;" >> 03.sql \ && echo "SET time_zone = '+00:00'; " >> 03.sql \ && cat ntf_liferay.sql >> 03.sql \ && rm ntf_liferay.sql \ && mv *.txt ../ \ && perl -pi -e '$/=undef; s/^CREATE\s+TABLESPACE.*ENGINE=ndbcluster;//sm' /docker-entrypoint-initdb.d/01_ddl.sql \ && perl -pi -e 's!/\*.* TABLESPACE .* \*/\s*ENGINE=ndbcluster !ENGINE=InnoDB AUTO_INCREMENT=27 !' /docker-entrypoint-initdb.d/01_ddl.sql \ && perl -pi -e '$/=undef; s#DELIMITER\s+;;.*50003\s+CREATE.*TRIGGER RSI_OPERATION_TRIG_A_I.*DELIMITER\s+;##sm' 01_ddl.sql \ && perl -pi -e '$/=undef; s!.*50003 CREATE.*TRIGGER RSI_OPERATION_TRIG_A_I.*END \*/;;!!sm' /docker-entrypoint-initdb.d/01_ddl.sql \ && perl -pi -e 's!.*50003\s+SET\s+sql_mode\s+=\s+@saved_sql_mode.*!!' /docker-entrypoint-initdb.d/01_ddl.sql \ && perl -pi -e 's!.*50003\s+SET\s+character_set_client\s+=\s+@saved_cs_client.*!!' /docker-entrypoint-initdb.d/01_ddl.sql \ && perl -pi -e 's!.*50003\s+SET\s+collation_connection\s+=\s+@saved_col_connection.*!!' /docker-entrypoint-initdb.d/01_ddl.sql \ && perl -pi -e 's/source jmeter_inserts.result.txt;//' /docker-entrypoint-initdb.d/03.sql \ && perl -pi -e 's/source rsi_connections_log.result.txt;//' /docker-entrypoint-initdb.d/03.sql \ && rm /jmeter_inserts.result.txt /rsi_connections_log.result.txt

Imagen mysql_tuxedo
Imagen basada en la imagen oficial mysql:5.7 en la que se carga el modelo y datos del servlet de Tuxedo de Abside

Los datos se cargan en la primera ejecución de la imagen. Para ello se utiliza el mecanismo proporcionado por la imagen oficial y que carga en orden alfabético los scripts que se dejen en el directorio /docker-entrypoint-initdb.d de la imagen.


 * nombre contenedor
 * mysql_tuxedo


 * nombre completo de la imagen
 * registry.gitlab.com/rsi/abside-in-a-box/mysql_tuxedo:201702


 * imagen base
 * mysql:5.7


 * variables de entorno
 * MYSQL_ROOT_PASSWORD: CmmuWPt87Qh
 * MYSQL_DATABASE: absidetux01
 * MYSQL_PASSWORD: t0MmcELLkDD
 * MYSQL_USER: tuxedo_user
 * mapedo de puertos
 * No tiene


 * volúmenes
 * volumen tuxedo_mysqldb___VERSION__ montado en el directorio /var/lib/mysql del contenedor

Dockerfile
FROM mysql:5.7

COPY my.cnf /etc/mysql/conf.d/my.cnf COPY *.tar.gz /

RUN tar zxvf /*.tar.gz -C /docker-entrypoint-initdb.d --strip=1 \ && cd /docker-entrypoint-initdb.d \ && mv absidetux_01.sql_ddl 01_ddl.sql \ && rm absidetux_01.sql_ddl_rutinas  \ && echo "SET foreign_key_checks = 0;" > 03.sql \ && echo "SET @disable_triggers = 1;" >> 03.sql \ && echo "SET time_zone = '+00:00'; " >> 03.sql \ && cat absidetux_01.sql >> 03.sql \ && echo "SET @disable_triggers = 0;" >> 03.sql \ && rm absidetux_01.sql \ && mv *.txt ../ \ && perl -pi -e '$/=undef; s/^CREATE\s+TABLESPACE.*ENGINE=ndbcluster;//sm' /docker-entrypoint-initdb.d/01_ddl.sql \ && perl -pi -e 's!/\*.* TABLESPACE .* \*/\s*ENGINE=ndbcluster !ENGINE=InnoDB !' /docker-entrypoint-initdb.d/01_ddl.sql

ENV TZ=Europe/Madrid RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

Imagen mysql_wiki
Imagen basada en la imagen oficial mysql:5.7 en la que se carga el modelo y datos del wiki de Abside

Los datos se cargan en la primera ejecución de la imagen. Para ello se utiliza el mecanismo proporcionado por la imagen oficial y que carga en orden alfabético los scripts que se dejen en el directorio /docker-entrypoint-initdb.d de la imagen.


 * nombre contenedor
 * mysql_wiki


 * nombre completo de la imagen
 * registry.gitlab.com/rsi/abside-in-a-box/mysql_wiki:201702


 * imagen base
 * mysql:5.7


 * variables de entorno
 * MYSQL_ROOT_PASSWORD: CmmuWPt87Qh
 * MYSQL_DATABASE: mediawiki
 * MYSQL_PASSWORD: t0MmcELLkDD
 * MYSQL_USER: wiki_user
 * mapedo de puertos
 * puerto 3306 del host mapeado al puerto 3306 del contenedor
 * volúmenes
 * volumen wiki_mysqldb___VERSION__ montado en el directorio /var/lib/mysql del contenedor

Dockerfile
FROM mysql:5.7

COPY my.cnf /etc/mysql/conf.d/my.cnf COPY *.tar.gz /

RUN tar zxvf /*.tar.gz -C /docker-entrypoint-initdb.d --strip=1 \ && cd /docker-entrypoint-initdb.d \ && mv absidewiki.sql_ddl 01_ddl.sql \ && mv absidewiki.sql_ddl_rutinas 02_ddl_rutinas.sql \ && mv absidewiki.sql 03.sql \ && mv *.txt ../ \ && perl -pi -e '$/=undef; s/^CREATE\s+TABLESPACE.*ENGINE=ndbcluster;//sm' /docker-entrypoint-initdb.d/01_ddl.sql \ && perl -pi -e 's!/\*.* TABLESPACE .* \*/\s*ENGINE=ndbcluster !ENGINE=InnoDB !' /docker-entrypoint-initdb.d/01_ddl.sql

ENV TZ=Europe/Madrid RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

Imagen mysql_wso2
Imagen basada en la imagen oficial mysql:5.7 en la que se carga el modelo y datos del ESB WSO2 de Abside

Los datos se cargan en la primera ejecución de la imagen. Para ello se utiliza el mecanismo proporcionado por la imagen oficial y que carga en orden alfabético los scripts que se dejen en el directorio /docker-entrypoint-initdb.d de la imagen.


 * nombre contenedor
 * mysql_wso2


 * nombre completo de la imagen
 * registry.gitlab.com/rsi/abside-in-a-box/mysql_wso2:201702


 * imagen base
 * mysql:5.7


 * variables de entorno
 * MYSQL_ROOT_PASSWORD: CmmuWPt87Qh
 * MYSQL_DATABASE: wso2esb
 * MYSQL_PASSWORD: t0MmcELLkDD
 * MYSQL_USER: wso2_user
 * mapedo de puertos
 * No tiene


 * volúmenes
 * volumen wso2_mysqldb___VERSION__ montado en el directorio /var/lib/mysql del contenedor

Dockerfile
FROM mysql:5.7

COPY my.cnf /etc/mysql/conf.d/my.cnf COPY *.tar.gz /

RUN tar zxvf /*.tar.gz -C /docker-entrypoint-initdb.d --strip=1 \ && cd /docker-entrypoint-initdb.d \ && mv wso2esb.sql_ddl 01_ddl.sql \ && mv wso2esb.sql_ddl_rutinas 02_ddl_rutinas.sql \ && mv wso2esb.sql 03.sql \ && mv *.txt ../ \ && perl -pi -e '$/=undef; s/^CREATE\s+TABLESPACE.*ENGINE=ndbcluster;//sm' /docker-entrypoint-initdb.d/01_ddl.sql \ && perl -pi -e 's!/\*.* TABLESPACE .* \*/\s*ENGINE=ndbcluster !ENGINE=InnoDB !' /docker-entrypoint-initdb.d/01_ddl.sql

ENV TZ=Europe/Madrid RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

Imagen neo4j
Esta es una imagen que no pertence al operativo de Abside y que ha sido incluida para documentar el sistema.

Levanta una base de datos neo4j en la que se carga un modelo de los diferentes componentes de Abside y sus relaciones.

La consola web de neo4j es accesible desde el puerto 7474 utilizando el usuario y password definidos en la variable de entorno NEO4J_AUTH.

Desde la consola se pueden ejecutar queries contra la base de datos. Por ejemplo:

Para mostrar todos los componentes y relaciones:

MATCH (n) RETURN n Para mostrar solo las imagenes creadas con componentes Abside

MATCH (n:DockerAbsideImage) RETURN n Para mostrar la imagen ntf

MATCH (n { name:'ntf'}) RETURN n Para mostrar la imagen ntf y las images a las que se conecta

MATCH (n { name:'ntf'}) MATCH (n)-[]-&gt;(m:DockerAbsideImage) RETURN n,m El puerto 7687 también se haya a la escucha para el interfaz bolt utilizado por los drives de Neo4j


 * nombre contenedor
 * neo4j


 * nombre completo de la imagen
 * registry.gitlab.com/rsi/abside-in-a-box/neo4j:201702


 * imagen base
 * neo4j:3.2


 * variables de entorno
 * NEO4J_AUTH: neo4j/rsi
 * mapedo de puertos
 * puerto 7474 del host mapeado al puerto 7474 del contenedor
 * puerto 7687 del host mapeado al puerto 7687 del contenedor
 * volúmenes
 * volumen neo4j_data___VERSION__ montado en el directorio /data del contenedor

Dockerfile
FROM neo4j:3.2

COPY db.cql / COPY mydocker-entrypoint.sh / RUN chmod a+x /mydocker-entrypoint.sh

ENTRYPOINT ["/mydocker-entrypoint.sh"] CMD ["neo4j"]

Imagen nodejs
Imagen basada en la imagen oficial Debian Jessie al que se le instala nodejs en su versión 0.10.46

El script de arranque simplemente ejecuta nodejs al que se le pasa el javascript WSserverHA.js de Abside


 * nombre contenedor
 * nodejs


 * nombre completo de la imagen
 * registry.gitlab.com/rsi/abside-in-a-box/nodejs:201702


 * imagen base
 * buildpack-deps:jessie


 * variables de entorno
 * http_proxy: http://P02MAV01:Mg89Es1@172.22.5.32:8080
 * https_proxy: http://P02MAV01:Mg89Es1@172.22.5.32:8080
 * mapedo de puertos
 * puerto 16969 del host mapeado al puerto 6969 del contenedor
 * puerto 7001 del host mapeado al puerto 7001 del contenedor
 * volúmenes
 * No tiene

Dockerfile
FROM buildpack-deps:jessie

USER root ENV TZ=Europe/Madrid RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN set -ex \ && for key in \ 9554F04D7259F04124DE6B476D5A82AC7E37093B \ 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \ 0034A06D9D9B0064CE8ADF6BF1747F4AD2306D93 \ FD3A5288F042B6850C66B31F09FE44734EB7990E \ 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \ DD8F2338BAE7501E3DD5AC78C273792F7D83545D \ B9AE9905FFD7803F25714661B63B535A4C206CA9 \ C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \ ; do \ gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \ done
 * 1) gpg keys listed at https://github.com/nodejs/node

ENV NODE_VERSION 0.10.46

RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \ && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \ && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \ && grep " node-v$NODE_VERSION-linux-x64.tar.xz\$" SHASUMS256.txt | sha256sum -c - \ && tar -xJf "node-v$NODE_VERSION-linux-x64.tar.xz" -C /usr/local --strip-components=1 \ && rm "node-v$NODE_VERSION-linux-x64.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \ && ln -s /usr/local/bin/node /usr/local/bin/nodejs

RUN npm install websocket RUN npm install express RUN npm install body-parser RUN npm install method-override

COPY WSserverHA.js /

ENV TZ=Europe/Madrid RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

CMD [ "node", "/WSserverHA.js"]

Imagen ntf

 * nombre contenedor
 * ntf


 * nombre completo de la imagen
 * registry.gitlab.com/rsi/abside-in-a-box/ntf:201702


 * imagen base
 * jboss/wildfly:8.2.1.Final


 * variables de entorno
 * LDAP_MOD_USER: 8EA39410C4F591C108099C7E1AZ0541Z7CD3A40750C0D6E748E5A82071894E3D
 * PORT_NTF: 8080
 * NTF_DB_PASSWORD: t0MmcELLkDD
 * MS_DB_USER: ms_user
 * LDAP_PROTOCOL_SSL: false
 * ABSIDE_ENDPOINT: abside.docker
 * PORT_JMS: 5455
 * PORT_JMS_HTTP: 8080
 * SERVER_BBDD: mysql_ntf
 * WIKI_SERVER: abside.docker
 * LDAP_DOMAIN: gcrdesarrollo.local
 * SECURITY_MODULE_SERVER: ms
 * NTF_DB_NAME: ntf_liferay
 * DOCRENDER_SERVER: certificacion.abside.risa
 * SERVER_MIDAS: midas
 * NTF_DB_PORT: 3306
 * MS_DB_HOST: mysql_ms
 * PORT_BBDD: 3306
 * MS_DB_PORT: 3306
 * LDAP_MOD_USER_PSW: A8F488C608539CCC12A9F1B5ADDCF2069E1E28373E7D4Z3C5481252D6ZD9BC7C
 * NTF_DB_USER: ntf_user
 * SERVER_JMS: ntf
 * SERVER_NTF: ntf
 * PORT_TUX: 8080
 * LDAP_SERVER_NAME: samba
 * PORT_SOLR: 8080
 * SERVER_TUX: tuxedo_servlet
 * PORT_MIDAS: 8080
 * MS_DB_NAME: ms_db
 * PWD_JMS: X02abs01.123
 * ABSIDE_ENDPOINT_WS: ws://abside.docker:6969
 * MS_DB_PASSWORD: t0MmcELLkDD
 * NTF_DB_HOST: mysql_ntf
 * WIKI_PORT: 80
 * SECURITY_MODULE_PORT: 8080
 * DOCRENDER_PORT: 80
 * USER_JMS: x02abs01
 * SERVER_SOLR: ntf
 * mapedo de puertos
 * puerto 8180 del host mapeado al puerto 8080 del contenedor
 * puerto 10090 del host mapeado al puerto 9990 del contenedor
 * volúmenes
 * volumen abside_solr___VERSION__ montado en el directorio /ABSIDE/configuracion_SOLR del contenedor

Dockerfile
FROM jboss/wildfly:8.2.1.Final

EXPOSE 8080
 * 1) Expose the ports we're interested in

EXPOSE 9990
 * 1) Expose the ports we're interested in

USER root ENV TZ=Europe/Madrid RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN yum update -y \ && yum -y install epel-release \ && yum repolist \ && yum -y install mysql nc \ && yum clean all RUN mkdir -p /opt/jboss/wildfly/customization/ RUN chown -R jboss:jboss /opt/jboss/wildfly/customization/ RUN mkdir -p /LOGS/NTF RUN chown -R jboss:jboss /LOGS/ RUN mkdir -p /ABSIDE/configuracion_SOLR ADD configuracion_SOLR /ABSIDE/configuracion_SOLR/ RUN chown -R jboss:jboss /ABSIDE/configuracion_SOLR ENV TZ=Europe/Madrid RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
 * 1) Add SOLR

USER jboss ADD customization /opt/jboss/wildfly/customization/
 * 1) RUN tar xvf /opt/jboss/wildfly/customization/ContenidoEstaticoMIDAS*.tar -C /opt/jboss/wildfly/welcome-content/

CMD ["/opt/jboss/wildfly/customization/execute.sh", "standalone" ,"standalone-full-ha.xml"]
 * 1) 172.22.4.39 	A020NFS01.gcrdesarrollo.local

Imagen openldap
Esta imagen arranca un openldap, el cual es utilizado en Abside para albergar las transaciones de tuxedo.

Se instala sobre una imagen ubuntu el paquete openldap y se le añade:


 * 1) el esquema sergener, necesario para cargar las transacciones de tuxedo.
 * 2) la carga del fichero ldif con las transaciones de tuxedo

La inclusión del esquema sergener.schema se hace en tiempo de ejecución la primera vez que se arranca la imagen. Para ello se siguen las instrucciones que se detallan aquí

La carga del fichero ldif con las transacciones de tuxedo también se relaiza en la primera ejecución de la imagen.

La configuración del openldap y la carga de transacciones se almacena en volúmenes externos al contenedor para sobrevivir rearranques:


 * configuración: volumen /etc/ldap
 * datos: volúmenes /var/lib/ldap y /var/backups

La imagen proporciona las siguientes variables de configuración:


 * DOMAIN (obligatorio)

El dominio del ldap, por ejemplo. El distinguish name es creado a partir de este dominio, por ejemplo.

El usuario administrador también es creado a partir de este dominio, con el formato


 * ORGANIZATION (obligatorio)

El nombre de la organización, por ejemplo 'Rural Sistemas Informáticos'


 * PASSWORD (opcional)

Contraseña del usuario admininstrador. Si no se proporciona la contraseña es generada automáticamente y mostrada en el log del contenedor docker durate el arranque.


 * DEBUG (opcional) Espcifica el nivel de trazas. Por defecto es 0 (sin trazas)

Los puertos que exponse la imagen son:


 * 389 (LDAP and LDAP+startTLS)
 * 636 (LDAP+SSL)

Ejemplo de cómo arrancar la imagen

docker run -it --rm --name openldap \ -p 389:389 \ -e DEBUG_LEVEL=1 \ -e DOMAIN=nessa.com \ -e ORGANIZATION=&quot;RSI&quot; \ -e PASSWORD=1234567890 \ openldap Para acceder al LDAP se puede utilizar cualquier visor de LDAPs, como Apache Directory Studio apuntando al puerto 389 de la máquina host utilizando como cuenta de administración, con password

El LDAP también es accesible a través de la imagen ldap_am del proyecto


 * nombre contenedor
 * openldap


 * nombre completo de la imagen
 * registry.gitlab.com/rsi/abside-in-a-box/openldap:201702


 * imagen base
 * ubuntu:14.04


 * variables de entorno
 * ORGANIZATION: RSI
 * DOMAIN: nessa.com
 * PASSWORD: 123456789
 * DEBUG_LEVEL: 0
 * mapedo de puertos
 * puerto 1389 del host mapeado al puerto 389 del contenedor
 * puerto 636 del host mapeado al puerto 636 del contenedor
 * volúmenes
 * volumen openldap_data___VERSION__ montado en el directorio /var/lib/ldap del contenedor
 * volumen openldap_backup___VERSION__ montado en el directorio /var/backups del contenedor
 * volumen openldap_ssl___VERSION__ montado en el directorio /ssl del contenedor
 * volumen openldap_etc___VERSION__ montado en el directorio /etc/ldap del contenedor

Dockerfile
FROM ubuntu:14.04

USER root

ENV TERM xterm ENV LANG "en_US.UTF-8" RUN apt-get update RUN apt-get install -y lsb-release language-pack-en less vim wget software-properties-common apt-transport-https python3 RUN locale-gen ${LANG} RUN update-locale LANG=${LANG} RUN rm /root/.bashrc /etc/bash.bashrc /root/.profile /etc/profile /etc/skel/.bashrc

ENV DOMAIN       "gcrdesarrollo.local" ENV ORGANIZATION "RSI" ENV PASSWORD     "1234567890" ENV DEBUG        1

RUN echo "slapd slapd/password1 password test" | debconf-set-selections RUN echo "slapd slapd/password2 password test" | debconf-set-selections RUN apt-get update RUN apt-get install -y slapd ldap-utils debconf-utils pwgen sasl2-bin RUN mkdir /ssl RUN mkdir /ssl/certs RUN mkdir /ssl/private RUN chmod o= /ssl/private RUN chgrp openldap /ssl/private COPY start.sh /start.sh CMD /start.sh
 * 1) COPY ldap.conf /etc/ldap/ldap.conf

RUN chown -R openldap:openldap /etc/ldap

COPY sergener.schema /etc/ldap/schema/sergener.schema COPY schema-build.conf /tmp/schema-build.conf

COPY clean-ldif.py / RUN chmod a+x /clean-ldif.py

COPY ldif/* /ldif/

EXPOSE 389 EXPOSE 636

ENV TZ=Europe/Madrid RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

VOLUME /ssl VOLUME /var/backups VOLUME /var/lib/ldap

Imagen samba
Imagen con Samba configurado como Active Directory Domain

Con samba se consigue remplazar el Active Directory (que corre sobre Windows y que por tanto no está disponible como imagen docker) y que el frontend de Abside utiliza para hacer la identificación de usuarios

Esta imagen se basa en esta imagen en docker hub

Para poder cargar los datos extraídos del Active Directory de RSI se deben filtrar ya que no todos los registros son susceptibles de ser importados en Samba. De todos los tipos de registros exportados, solamente usiarios y grupos serán importados.

Para realizar el filtrado de aquellos registros que se cargarán en Samba se importa en la imagen el script ldif.py al que se le pasa el ldif con la exportación del Active Directory y que genera el script de carga en Samba.

La carga de usuarios y grupos en Samba, como en el caso de las imágenes de base de datos, solo se cargarán en la primera ejecición de la imagen. Los datos de la carga y la configuración se alamcenan en los volúmenes /var/lib/samba y /etc de forma que sobrevivan los rearanques de la imagen.

Esta imagen es una imagen docker bastante diferente de las normales por el número de procesos que deben permanecer en ejecución para dar el servicio:


 * sshd
 * samba
 * bind9
 * kerberos
 * sssd
 * syslog

Para mantener estos programas en ejecución se utiliza supervidor

Otros recursos:


 * Guía de Samba como Active Directory
 * Uso de puertos con Samba


 * nombre contenedor
 * samba


 * nombre completo de la imagen
 * registry.gitlab.com/rsi/abside-in-a-box/samba:201702


 * imagen base
 * ubuntu:17.04


 * variables de entorno
 * ROOT_PASSWORD: T0p$$ecret
 * LDAP_ALLOW_INSECURE: true
 * SAMBA_REALM: gcrdesarrollo.local
 * SAMBA_ADMIN_PASSWORD: T0p$$ecret
 * SAMBA_DOMAIN: gcrdesarrollo
 * mapedo de puertos
 * puerto 389 del host mapeado al puerto 389 del contenedor
 * volúmenes
 * volumen samba_data___VERSION__ montado en el directorio /var/lib/samba del contenedor
 * volumen samba_etc___VERSION__ montado en el directorio /etc del contenedor

Dockerfile
FROM ubuntu:17.04
 * 1) FROM ubuntu:trusty

ENV DEBIAN_FRONTEND noninteractive

RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d
 * 1) Avoid ERROR: invoke-rc.d: policy-rc.d denied execution of start.

RUN apt-get update RUN apt-get upgrade -y RUN apt-get install -y openssh-server supervisor RUN mkdir -p /var/run/sshd RUN mkdir -p /var/log/supervisor RUN sed -ri 's/PermitRootLogin without-password/PermitRootLogin Yes/g' /etc/ssh/sshd_config
 * 1) Setup ssh and install supervisord

RUN apt-get install -y bind9 dnsutils ADD named.conf.options /etc/bind/named.conf.options
 * 1) Install bind9 dns server

RUN apt-get install -y build-essential libacl1-dev libattr1-dev \ libblkid-dev libgnutls28-dev libreadline-dev python-dev libpam0g-dev \ python-dnspython gdb pkg-config libpopt-dev libldap2-dev \ dnsutils libbsd-dev attr krb5-user docbook-xsl libcups2-dev acl python-xattr RUN apt-get install -y samba smbclient krb5-kdc
 * 1) Install samba and dependencies to make it an Active Directory Domain Controller

RUN apt-get install -y expect pwgen ADD kdb5_util_create.expect kdb5_util_create.expect
 * 1) Install utilities needed for setup

RUN apt-get install -y rsyslog
 * 1) Install rsyslog to get better logging of ie. bind9

RUN apt-get install -y python3-pip \ && pip3 install ldif3
 * 1) Install dependencies for ldif.py

RUN mkdir -p /var/run/named \ && mkdir -p /var/lib/samba/private/dns \ && chown -R bind:bind /var/run/named /var/lib/samba/private/dns
 * 1) Create run directory for bind9


 * 1) Install sssd for UNIX logins to AD
 * 2) RUN apt-get install -y sssd sssd-tools libpam-sss libnss-sss libnss-ldap
 * 3) ADD sssd.conf /etc/sssd/sssd.conf
 * 4) RUN chmod 0600 /etc/sssd/sssd.conf

RUN apt-get install locales RUN locale-gen en_US.UTF-8 ENV LANG en_US.UTF-8 ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8
 * 1) Set the locale

ENV TZ=Europe/Madrid RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

ADD load_users.sh /usr/local/bin/load_users.sh ADD ldif.py /usr/local/bin/ldif.py RUN chmod +x /usr/local/bin/load_users.sh /usr/local/bin/ldif.py
 * 1) Add load_users script and ldif.py

ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf ADD init.sh /init.sh RUN chmod 755 /init.sh EXPOSE 22 53 389 88 135 139 138 445 464 3268 3269 ENTRYPOINT ["/init.sh"] CMD ["app:start"]
 * 1) Add supervisord and init

COPY ldif/*.ldif /ldif/

VOLUME ["/var/lib/samba", "/etc"]

Imagen tuxedo

 * nombre contenedor
 * tuxedo


 * nombre completo de la imagen
 * registry.gitlab.com/rsi/abside-in-a-box/tuxedo:201702


 * imagen base
 * oraclelinux:7


 * variables de entorno
 * DB2INST1_PASSWORD: CmmuWPt87Qh
 * DIR_ONLINE_LOG: /abside/logs
 * DIR_ONLINE: /abside/app/ABSIDE
 * DB2_DATABASE: ABSIDE_C
 * DB2: db2
 * TUXDIR: /home/oracle/tuxHome/tuxedo12.1.3.0.0
 * mapedo de puertos
 * puerto 5001 del host mapeado al puerto 5001 del contenedor
 * puerto 5002 del host mapeado al puerto 5002 del contenedor
 * puerto 5010 del host mapeado al puerto 5010 del contenedor
 * puerto 5020 del host mapeado al puerto 5020 del contenedor
 * volúmenes
 * volumen tuxedo_corec_abside___VERSION__ montado en el directorio /corec/src/ del contenedor
 * volumen tuxedo_microfocus___VERSION__ montado en el directorio /opt/microfocus/ del contenedor
 * volumen tuxedo_microfocus_var___VERSION__ montado en el directorio /var/microfocuslicensing/ del contenedor

Dockerfile
#
 * 1) Dockerfile template for Tuxedo 12.1.3
 * 2) Download the following files to an empty directory:
 * 3)   tuxedo121300_64_Linux_01_x86.zip	from http://www.oracle.com/technetwork/middleware/tuxedo/downloads/index.html
 * 4)   p22090512_121300_Linux-x86-64.zip 	or whatever the latest Tuxedo rolling patch is from My Oracle Support
 * 1)   p22090512_121300_Linux-x86-64.zip 	or whatever the latest Tuxedo rolling patch is from My Oracle Support

FROM oraclelinux:7
 * 1) Pull base image

ENV LANG es_ES.iso88591 ENV LANGUAGE es_ES.iso88591 ENV LC_ALL=C

RUN yum -y install unzip gcc file pam.i686 libaio openssl openldap-devel openssl-devel.i686 openldap.i686 ksh gcc-c++  glibc-devel.i686 libstdc++-devel libstdc++-devel.i686 pax ed which java-1.7.0-openjdk; yum -y clean all && \ groupadd -g 1000 oracle; useradd -b /home -m -g oracle -u 1000 -s /bin/bash oracle && \ groupadd -g 1001 db2fsdm1; useradd -b /home -m -g db2fsdm1 -u 1001 -s /bin/bash db2sdfe1 && \ groupadd -g 1002 db2iadm1; useradd -b /home -m -g db2iadm1 -u 1002 -s /bin/bash db2inst1 && \ echo oracle:oracle | chpasswd; echo root:samplesvm | chpasswd
 * 1) Core install doesn't include unzip or gcc, add them
 * 2) Create the installation directory tree and user oracle with a password of oracle

ADD /packages/* /home/oracle/Downloads/
 * 1) Add packages install Tuxedo

USER root RUN mkdir -p /home/oracle/Download/microfocus/ ADD /microfocus /home/oracle/Download/microfocus/ RUN chmod +x /home/oracle/Download/microfocus/visualcobol_devhub_3.0_redhat_x86_64_rpm.bin
 * 1) Add install microfocus

COPY installMicrofocus.sh / RUN chmod a+x /installMicrofocus.sh
 * 1) INSTALAMOS EL MICROFOCUS


 * 1) COPIAMOS EL ubbconfig

COPY ubbconfig /

RUN mkdir -p /home/oracle/Download/db2connect/ ADD /db2connect /home/oracle/Download/db2connect/ RUN tar xzf /home/oracle/Download/db2connect/v10.1fp5_linuxx64_server.tar.gz -C /home/oracle/Download/db2connect/ RUN rm /home/oracle/Download/db2connect/v10.1fp5_linuxx64_server.tar.gz RUN chown -R db2inst1:db2iadm1 /home/oracle/Download/db2connect/
 * 1) Add install db2connect

COPY installDB2Connect.sh / RUN chmod a+x /installDB2Connect.sh RUN /installDB2Connect.sh RUN rm -rf /home/oracle/Download/db2connect/ser* RUN chown -R db2inst1:db2iadm1 /home/db2inst1/sqllib/ RUN chown -R db2inst1:db2iadm1 /opt/ibm
 * 1) INSTALAMOS EL db2connect

RUN mkdir -p /home/oracle/Download/openssl/ ADD /openssl /home/oracle/Download/openssl/
 * 1) Add install openssl

ARG DIR_ONLINE ARG DIR_ONLINE_LOG
 * 1) Cambiamos al usuario root

USER root RUN mkdir -p ${DIR_ONLINE}/ONLINE RUN mkdir -p ${DIR_ONLINE_LOG} ADD /ONLINE ${DIR_ONLINE}/ONLINE

RUN chown -R oracle:oracle /abside

RUN mkdir -p /corec/src RUN tar xf /home/oracle/Download/microfocus/empaqueta_cargables_todo_abside.tar -C /corec/src/ RUN cp /home/oracle/Download/microfocus/libcobolsl.so /corec/src/load/ RUN cp /home/oracle/Download/microfocus/bindAll.ksh /corec/src/ RUN chmod a+x /corec/src/bindAll.ksh RUN chown -R oracle:oracle /corec/


 * 1) RUN mkdir -p /opt/microfocus/cobol
 * 2) RUN mkdir -p /opt/microfocus/mflmf
 * 3) RUN tar xf /home/oracle/Download/microfocus/sx51_ws6_redhat_x86_64_dev.tar -C /opt/microfocus/cobol/

RUN mkdir -p /opt/openssl RUN tar xzf /home/oracle/Download/openssl/openssl-1.0.1g.tar.gz -C /opt/


 * 1) INSTALAMOS EL DB2CONNECT
 * 2) RUN /home/oracle/Download/db2connect/consv/db2setup -r /home/oracle/Download/db2connect/db2consv.rsp
 * 3) RUN /home/oracle/Download/db2connect/server/db2setup -r /home/oracle/Download/db2connect/db2consv.rsp

COPY initDB2Connect.sh / RUN chmod a+x /initDB2Connect.sh

COPY updateDB2.sh / RUN chmod a+x /updateDB2.sh

COPY installDB2Connect.sh / RUN chmod a+x /installDB2Connect.sh RUN /installDB2Connect.sh RUN rm -rf /home/oracle/Download/db2connect/ser* RUN chown -R db2inst1:db2iadm1 /home/db2inst1/sqllib/ RUN chown -R db2inst1:db2iadm1 /opt/ibm

RUN chown oracle:oracle -R /home/oracle WORKDIR /home/oracle/Downloads USER oracle

RUN sh install.sh p20917118_121300_LINUXedede.zip tuxedo121300_32_Linux_01_x86.zip
 * 1) Install Tuxedo, SALT, and TSAM Agent

RUN rm -f *.zip
 * 1) Clean up installer files

USER root ENV TZ=Europe/Madrid RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone RUN yum -y install perl openldap openldap-clients openldap-servers RUN echo db2inst1:db2inst1 | chpasswd
 * 1) Ponemos bien la hora del servidor

COPY startTuxedo.sh / RUN chmod a+x /startTuxedo.sh USER oracle WORKDIR /home/oracle
 * 1) INSTALAMOS EL MICROFOCUS

ENTRYPOINT ["/startTuxedo.sh"]

Imagen tuxedo_servlet

 * nombre contenedor
 * tuxedo_servlet


 * nombre completo de la imagen
 * registry.gitlab.com/rsi/abside-in-a-box/tuxedo_servlet:201702


 * imagen base
 * jboss/wildfly:8.2.1.Final


 * variables de entorno
 * TUXEDO_DB_NAME: absidetux01
 * TUX_NAME: tuxedo_servlet
 * TUXEDO_DB_PASSWORD: t0MmcELLkDD
 * TUXEDO_DB_HOST: mysql_tuxedo
 * TUXEDO_DB_PORT: 3306
 * TUX_PORT: 44411
 * TUXEDO_DB_USER: tuxedo_user
 * mapedo de puertos
 * puerto 8380 del host mapeado al puerto 8080 del contenedor
 * puerto 10290 del host mapeado al puerto 9990 del contenedor
 * volúmenes
 * No tiene

Dockerfile
FROM jboss/wildfly:8.2.1.Final

EXPOSE 8080
 * 1) Expose the ports we're interested in

EXPOSE 9990
 * 1) Expose the ports we're interested in

USER root RUN mkdir -p /ABSIDE/logs/TUXEDO/ RUN chown -R jboss:jboss /ABSIDE ENV TZ=Europe/Madrid RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone ENV LANG es_ES.utf8 ENV LANGUAGE es_ES.utf8

RUN yum update -y \ && yum -y install epel-release \ && yum repolist \ && yum -y install mysql nc \ && yum clean all RUN mkdir -p /opt/jboss/wildfly/customization/ RUN chown -R jboss:jboss /opt/jboss/wildfly/customization/ ENV TZ=Europe/Madrid RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

ADD customization /opt/jboss/wildfly/customization/ RUN chown -R jboss:jboss /opt/jboss/wildfly/customization/

USER jboss CMD ["/opt/jboss/wildfly/customization/execute.sh"]

Imagen wiki
Esta imagen sirve el wiki de Abside utilizado como documentación online del sistema.

Se basa en la imagen oficial php:5.6-apache al que se le añade el paquete opcache para mejorar el rendimiento una vez que las páginas queden cacheadas.

La imagen utiliza las siguientes variables de entorno:


 * MEDIAWIKI_SITE_SERVER
 * MEDIAWIKI_DB_HOST
 * MEDIAWIKI_DB_PORT
 * MEDIAWIKI_DB_NAME
 * MEDIAWIKI_DB_USER
 * MEDIAWIKI_DB_PASSWORD

MEDIAWIKI_SITE_SERVER debe apuntar al endpoint de Abside, que en el caso de Abside in a BOX será la url con la IP o hostname donde está en ejecución docker-compose. Por ejemplo, si el host desde el que se ejecuta docker-compose es accesible con el hostname abside.docker, MEDIAWIKI_SITE_SERVER será configurado con http://abside.docker

El resto de variables de entorno son autoexplicativas y relativas a la base de datos mysql que debe utilizarse como backend del mediawiki.


 * nombre contenedor
 * wiki


 * nombre completo de la imagen
 * registry.gitlab.com/rsi/abside-in-a-box/wiki:201702


 * imagen base
 * php:5.6-apache


 * variables de entorno
 * MEDIAWIKI_SITE_NAME: AbsideWiki
 * MEDIAWIKI_SITE_SERVER: http://abside.docker
 * MEDIAWIKI_DB_HOST: mysql_wiki
 * MEDIAWIKI_DB_NAME: mediawiki
 * MEDIAWIKI_DB_PASSWORD: t0MmcELLkDD
 * MEDIAWIKI_DB_PORT: 3306
 * MEDIAWIKI_DB_USER: wiki_user
 * mapedo de puertos
 * puerto 8082 del host mapeado al puerto 80 del contenedor
 * puerto 8443 del host mapeado al puerto 443 del contenedor
 * volúmenes
 * No tiene

Dockerfile
FROM php:5.6-apache RUN docker-php-ext-install mysql opcache

COPY php.ini /usr/local/etc/php/ COPY 000-default.conf /etc/apache2/sites-available/

COPY AbsideWiki.tar / RUN tar xvf /AbsideWiki.tar -C /var/www/html/ \ && rm /AbsideWiki.tar

ENTRYPOINT ["/bin/bash", "/wiki-dockerentry.sh"] CMD ["apache2-foreground"]

ENV TZ=Europe/Madrid RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

COPY /wiki-dockerentry.sh / RUN chmod a+x /wiki-dockerentry.sh

Imagen wso2esb

 * nombre contenedor
 * wso2esb


 * nombre completo de la imagen
 * registry.gitlab.com/rsi/abside-in-a-box/wso2esb:201702


 * imagen base
 * wso2/wso2base:latest


 * variables de entorno
 * PLATFORM: default
 * WSO2_ENVIRONMENT: dev
 * WSO2_SERVER_VERSION: 4.8.1
 * WSO2_SERVER: wso2esb
 * WSO2_SERVER_PROFILE: default
 * mapedo de puertos
 * puerto 8280 del host mapeado al puerto 8280 del contenedor
 * puerto 8243 del host mapeado al puerto 8243 del contenedor
 * puerto 9763 del host mapeado al puerto 9763 del contenedor
 * puerto 9443 del host mapeado al puerto 9443 del contenedor
 * volúmenes
 * No tiene

Dockerfile
#
 * 1) Copyright 2016 WSO2, Inc. (http://wso2.com)
 * 2) Licensed under the Apache License, Version 2.0 (the "License");
 * 3) you may not use this file except in compliance with the License.
 * 4) You may obtain a copy of the License at
 * 5) http://www.apache.org/licenses/LICENSE-2.0
 * 6) Unless required by applicable law or agreed to in writing, software
 * 7) distributed under the License is distributed on an "AS IS" BASIS,
 * 8) WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * 9) See the License for the specific language governing permissions and
 * 10) limitations under the License
 * 1) distributed under the License is distributed on an "AS IS" BASIS,
 * 2) WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * 3) See the License for the specific language governing permissions and
 * 4) limitations under the License



FROM wso2/wso2base:latest MAINTAINER dev@wso2.org

ENV DEBIAN_FRONTEND noninteractive

ARG WSO2_SERVER ARG WSO2_SERVER_VERSION ARG WSO2_SERVER_PROFILE ARG WSO2_ENVIRONMENT ARG PLATFORM
 * 1) Build time arguments

ENV WSO2_SERVER=${WSO2_SERVER:-wso2esb} \ WSO2_SERVER_VERSION=${WSO2_SERVER_VERSION:-4.9.0} \ WSO2_SERVER_PROFILE=${WSO2_SERVER_PROFILE:-default} \ WSO2_ENVIRONMENT=${WSO2_ENVIRONMENT:-dev} \ PLATFORM=${PLATFORM}
 * 1) Carbon server information


 * 1) Carbon server information

ADD packages/ /mnt/ ADD scripts/ /usr/local/bin/

RUN bash /usr/local/bin/image-config.sh
 * 1) Execute configuration script

USER wso2user WORKDIR /mnt

EXPOSE 8280 8243 9763 9443
 * 1) Expose transport ports

ENTRYPOINT ["/usr/local/bin/init.sh"]