En Mi Local Funciona

Technical thoughts, stories and ideas

Acelerando los desarrollos con contenedores: Apache Tomcat

Publicado por Víctor Madrid el

Arquitectura de SolucionesDockerApache Tomcat

En este artículo se va a mostrar como poder disponer de un contenedor de Apache Tomcat de forma rápida para utilizarlo como una instalación "standalone" dentro de nuestra máquina o en otras circunstancias.

¿Qué es Apache Tomcat?

Apache Tomcat es un producto Open Source muy popular en el mundo del desarrollo web Java que implementa las tecnologías de Java Servlets, Java Server Pages (JSPs), Java Expression Language y Java WebSocket.

Por tanto, se trata de un contenedor de servlets y NO de un servidor de aplicaciones.

Esta más orientado al desarrollo de sitios web dinámicos (dynamic websites) pero algunas veces también se utiliza para sitios web estáticos (static websites).

Curiosidades sobre el origen de este artículo

Hace un tiempo comencé a liderar un nuevo proyecto de desarrollo formado por un equipo Back y otro equipo Front donde cada miembro del equipo tenía un ordenador con un entorno heterogéneo (Linux, Mac y Windows), algunos de ellos NO tenían experiencia instalando Apache Tomcat, el desarrollo de Front se haría con Angular (se proporcionaría como estáticos), el cliente utilizaba como "servidor web" Apache Tomcat de base, este tenía una versión concreta y se encontraba inicialmente en un único entorno ... el productivo y en Azure.

Todas estas condiciones me hicieron pensar en una forma rápida para trabajar con Apache Tomcat para todo el equipo y minimizar todos los problemas anteriores relacionados con su instalación, configuración,uso , etc.

Nota: El principal problema fue tratar de que se comportara como una instalación "normal" :-)

Este artículo está dividido en 4 partes:

  • 1. Introducción
  • 2. Stack Tecnológico
  • 3. Ejemplos de Uso
  • 4. Conclusiones

1. Introducción

En este apartado se tratarán los siguiente puntos :

  • 1.1. Introducción al uso de contenedores como aceleradores del desarrollo
  • 1.2. ¿Qué necesidades tenemos para tener un "Apache Tomcat" con contenedores?

1.1. Introducción al uso de contenedores como aceleradores del desarrollo

Para centralizar esta información en un único punto y así poder facilitar su consulta se ha diseñado un artículo específico

1.2. ¿Qué necesidades tenemos para requerir un "Apache Tomcat" con contenedores?

Los motivos principales que me llevaron a tratar de investigar en tener un Apache Tomcat dentro de un contenedor fueron los siguientes:

  • Disponer de una instalación inmutable
  • Replicar la instalación del producto del cliente en local (versionado , entorno, etc.)
  • Minimizar en un entorno previo los posibles cambios de configuración que pudieramos requerir --> Perdiendo el miedo a los cambios :-)
  • Asegurarse de que a todo el mundo le funcionaba de primeras
  • Ayudar al equipo a coger experiencia en el uso de Apache Tomcat
  • Encontrar posibles errores en el desarrollo Front
  • Probar que la aplicación funciona en local
  • Tratar de conseguir un comportamiento similar al "real" : consola, etc.

2. Stack Tecnológico

Este es stack tecnológico elegido para implementar la funcionalidad "Apache Tomcat":

  • Java 8
  • Docker - Tecnología de Contenedores/Containers
  • Docker Hub - Repositorio de Docker Público donde se ubican las imágenes oficiales
  • Apache Tomcat - Contenedor de Servlets

3. Ejemplos de Uso

Para enseñar a utilizarlo y así practicar se ha habilitado un repositorio, este repositorio se reutilizará para otros artículos de "Acelerando los desarrollos con contenedores".

La parte de que tiene que ver con este artículo se encuentra en el apartado de docker/apache-tomcat

Este proyecto consta del siguiente elemento:

  • Contenedor de Apache Tomcat
    • Proporciona la instalación del producto en la versión establecida
    • Proporciona la configuración para su uso (usuarios, password, etc)
    • Proporciona una adaptación de configuración para permitir el uso de la interfaz UI
    • Se proporcionar un ejemplo de fichero WAR para ser usado como ejemplo de despliegue "directo"

Ejemplo de fichero "docker-compose.yaml"

version: '3.7'

services:

   custom-tomcat-8.5:
      build: ./tomcat-8.5
      container_name: custom-tomcat-8.5
      volumes:
         - ./example/myapp.war:/usr/local/tomcat/webapps/myapp.war
      ports:
         - "8080:8080"

Para ver como lanzarlo ver fichero README dentro del proyecto.

3.1. Scripts de Soporte

N/A

3.2. Investigar lo que se usa

Cuando uno crea un contenedor basado en una imagen ya se ha visto que consideraciones se debe tener para llegar a entender que es lo que hace.

Si tiene alguna duda vuelve a revisar el apartado "Soporte de Análisis de Contenedores" del artículo de introducción : Acelerando los desarrollos con contenedores: Introducción

Ejemplo de ejecución para mostrar la información del proceso ejecutado tras realizar un "up"

Ejemplo de inspección sobre el contenedor creado

Ejemplo de investigación general dentro del contenedor

También se puede visualizar si se ha realizado la sustitución correcta de los ficheros utilizados :

  • /usr/local/tomcat/conf/tomcat-users.xml
  • /usr/local/tomcat/webapps/manager/META-INF/context.xml

3.3. Verificar resultados

Tras la ejecución de lo anterior y si todo hay ido bien se arrancará el Apache Tomcat habilitando la UI, la lista de usuarios y desplegando el WAR de ejemplo indicado en el volumen

Se visualizará la consola tras la ejecución del fichero "docker-compose.yaml"

Nota: En caso de tener descomentado el volumen se podrá ver el despliegue del WAR por consola.

Se accede a la URL del Apache Tomcat con:

http://localhost:8080/  

Se accede a la API del fichero WAR con REST:

http://localhost:8080/acme/greeting  

Esta aplicación muestra un mensaje de saludo cada vez que lo invocas (JSON)

Para acceder a la consola pulsando a "Manager App" desde la consola UI de Tomcat

Desde este punto se puede gestionar todo lo que esta implementado pudiendo gestionar : paradas , arranques , etc.

Nota : Si no se utiliza el despliegue directo desde el volumen se puede añadir de forma externa el WAR desde aquí una vez arrancado el Tomcat

4. Conclusiones

Bueno con esto ya tenemos una pieza curiosa para poder reutilizar en algunos desarrollos, si que es cierto que últimamente estamos más acostumbrados a utilizar el Tomcat "embebido" para desarrollos como Spring Boot pero otras veces tenemos que utilizarlo en su versión "Real".

Como os digo a mi esta pieza me ayudo a solventar unas cuantos problemas y creo que quizás os pueda ayudar a algunos, aun así siempre aprendemos un poquito más con esto de los contenedores

Víctor Madrid
Autor

Víctor Madrid

Líder Técnico de la Comunidad de Arquitectura de Soluciones en atSistemas. Aprendiz de mucho y maestro de nada. Técnico, artista y polifacético a partes iguales ;-)