Skip to content

About

A basic tutorial on running a web app on Tomcat using Podman

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

 
 

Latest commit

 

History

16 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

Podman + Tomcat Tutorial

Tutorial básico para construir y ejecutar una aplicación web Java sobre Tomcat utilizando Podman.

El repositorio contiene una pequeña aplicación WAR preparada para utilizarse como ejemplo en prácticas de contenedores.

Contenido

.
├── Containerfile
├── sample.war
└── README.md

La aplicación muestra información básica del entorno donde está ejecutándose:

  • Hostname del contenedor.
  • Versión de Java.
  • Versión de Tomcat.
  • Hora del servidor.

También incluye un endpoint sencillo de health check.

Requisitos

  • Linux
  • Podman
  • Git
  • Acceso a Internet

Verificar la instalación:

podman version

Clonar el repositorio

git clone https://github.com/emverdes/podman-tomcat-tutorial.git
cd podman-tomcat-tutorial

Containerfile

La imagen se construye a partir de CentOS Stream e instala Java y Tomcat.

FROM quay.io/centos/centos:stream9

LABEL maintainer="emverdes@gmail.com"

RUN dnf install -y java-11-openjdk tomcat iproute && \
    dnf clean all

ADD sample.war /var/lib/tomcat/webapps/

EXPOSE 8080

CMD ["/usr/libexec/tomcat/server", "start"]

Construir la imagen

podman build -t tomcat-demo:1.0 .

Verificar:

podman images

Ejecutar la aplicación

podman run -d \
  --name tomcat1 \
  -p 8008:8080 \
  tomcat-demo:1.0

Comprobar el contenedor:

podman ps

Consultar los logs:

podman logs tomcat1

Acceder a la aplicación:

http://localhost:8008/sample/

Health check:

curl http://localhost:8008/sample/health.jsp

Resultado esperado:

OK

Ejecutar una segunda instancia

La misma imagen puede utilizarse para crear varios contenedores:

podman run -d \
  --name tomcat2 \
  -p 8009:8080 \
  tomcat-demo:1.0

Probar ambas instancias:

curl http://localhost:8008/sample/
curl http://localhost:8009/sample/

Cada contenedor tendrá un hostname diferente.

Simple apache reverse proxy

Add to a VirtualHost in your apache web server configuration. Replace localhost with the hostname of the host running your containers. Remember to open up the ports in your firewall if needed.

ProxyPass "/sample"  "http://localhost:8008/sample"
ProxyPassReverse "/sample"  "http://localhost:8008/sample"

Apache proxy loadbalancer for 2 containers

<Proxy "balancer://mycluster">
    BalancerMember "http://localhost:8008/sample"
    BalancerMember "http://localhost:8009/sample"
</Proxy>
ProxyPass        "/" "balancer://mycluster/"
ProxyPassReverse "/" "balancer://mycluster/"

For reverse proxy when SELinux is enabled

  • #setsebool -P httpd_can_network_connect on
  • #setsebool -P httpd_can_network_relay on

Administración básica

Listar contenedores:

podman ps
podman ps -a

Detener y arrancar un contenedor:

podman stop tomcat1
podman start tomcat1

Ejecutar un comando dentro del contenedor:

podman exec tomcat1 hostname

Abrir un shell:

podman exec -it tomcat1 /bin/bash

Eliminar un contenedor:

podman rm -f tomcat1

Publicar la imagen en Docker Hub

Para publicar la imagen se necesita una cuenta en Docker Hub y un repositorio público, por ejemplo:

tomcat-demo

Autenticarse desde Podman:

podman login docker.io

Ingresar el usuario y la contraseña o token correspondiente.

Etiquetar la imagen

Las imágenes publicadas en Docker Hub utilizan el formato:

docker.io/USUARIO/REPOSITORIO:TAG

Etiquetar la imagen local:

podman tag \
  tomcat-demo:1.0 \
  docker.io/USUARIO_DOCKER/tomcat-demo:1.0

Verificar:

podman images

Publicar la imagen

podman push docker.io/USUARIO_DOCKER/tomcat-demo:1.0

Comprobar desde Docker Hub que el repositorio contiene el tag:

1.0

Probar la imagen publicada

Eliminar primero los contenedores que estén utilizando la imagen:

podman rm -f tomcat1 tomcat2

Eliminar las referencias locales:

podman rmi tomcat-demo:1.0
podman rmi docker.io/USUARIO_DOCKER/tomcat-demo:1.0

Verificar:

podman images

Ejecutar nuevamente utilizando directamente la imagen publicada:

podman run -d \
  --name tomcat-public \
  -p 8008:8080 \
  docker.io/USUARIO_DOCKER/tomcat-demo:1.0

Si la imagen no existe localmente, Podman la descargará del registry antes de crear el contenedor.

Verificar:

curl http://localhost:8008/sample/

Apache como reverse proxy

Un servidor Apache externo puede publicar la aplicación ejecutada dentro del contenedor.

Ejemplo:

ProxyPass        "/sample/" "http://localhost:8008/sample/"
ProxyPassReverse "/sample/" "http://localhost:8008/sample/"

En sistemas con SELinux puede ser necesario permitir que Apache realice conexiones hacia el backend:

sudo setsebool -P httpd_can_network_connect on

Arquitectura

Cliente
   |
   | HTTP
   v
Host Linux
   |
   | TCP/8008
   v
+-----------------------+
| Container             |
|                       |
| Tomcat :8080          |
|    |                  |
|    +-- sample.war     |
+-----------------------+

Objetivos educativos

Este ejemplo permite practicar:

  • Imágenes y contenedores.
  • Containerfiles.
  • Construcción de imágenes.
  • Mapeo de puertos.
  • Logs.
  • Ejecución de comandos dentro de contenedores.
  • Múltiples instancias de una misma imagen.
  • Tags.
  • Container registries.
  • Push y pull de imágenes.
  • Integración entre contenedores y servicios tradicionales.

About

A basic tutorial on running a web app on Tomcat using Podman

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages