Para desplegar aplicaciones Java en contenedores personalizados, es fundamental estructurar correctamente la imagen base que contendrá el Java Development Kit (JDK) y el servidor de aplicaciones Apache Tomcat. A continuación, se detalla el proceso de preparación, configuración y despliegue.
1. Preparación de Binarios y Estructura de Directorios
Antes de construir la imagen, es necesario contar con los paquetes binarios locales. Se recomienda descomprimir los archivos .tar.gz previamente para facilitar la gestión de rutas dentro del Dockerfile. ```
$ ls -l total 250100 -rw-r--r-- 1 dev dev 520 May 10 10:00 Dockerfile -rw-r--r-- 1 dev dev 45000000 May 10 10:05 mi-aplicacion.war drwxr-xr-x 8 dev dev 4096 Dec 20 12:00 jdk_bin drwxr-xr-x 9 dev dev 4096 May 01 15:30 tomcat_server
### 2. Definición del Dockerfile
El siguiente archivo de configuración utiliza una imagen base de Ubuntu y establece las variables de entorno necesarias para la ejecución de la Java Virtual Machine (JVM). ```
# Imagen base
FROM ubuntu:20.04
# Información de mantenimiento
LABEL maintainer="infra@tecnologia.com"
# Definición de rutas internas
ENV JAVA_ROOT /usr/lib/jvm/java-8
ENV CATALINA_ROOT /opt/tomcat
# Transferencia de archivos al contenedor
COPY ./jdk_bin ${JAVA_ROOT}
COPY ./tomcat_server ${CATALINA_ROOT}
# Configuración de variables de entorno globales
ENV JAVA_HOME ${JAVA_ROOT}
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH ${PATH}:${JAVA_HOME}/bin
# Optimización de parámetros de memoria para Tomcat
ENV CATALINA_OPTS "-Xms256m -Xmx1024m -XX:MaxPermSize=512M"
# Permisos de ejecución y logs
RUN touch ${CATALINA_ROOT}/logs/init_log.txt
# Exponer el puerto por defecto de Tomcat
EXPOSE 8080
# Comando de inicio del servicio
ENTRYPOINT ${CATALINA_ROOT}/bin/startup.sh && tail -f ${CATALINA_ROOT}/logs/catalina.out
3. Construcción y Ejecución de la Imagen
Para generar la imagan a partir del Dockerfile, ejecute el comando build especificando un nombre y una etiqueta: ```
docker build -t java-app-server:1.0 .
Una vez creada la imagen, inicie el contenedor mapeando los puertos del host hacia el contenedor: ```
docker run -d -p 8080:8080 --name mi_servidor_tomcat java-app-server:1.0
4. Despliegue de la Aplicación (WAR)
Existen múltiples formas de desplegar el artefacto Java. Una técnica directa consiste en copiar el archivo .war al directorio webapps del contenedor en ejecución: ```
docker cp mi-aplicacion.war mi_servidor_tomcat:/opt/tomcat/webapps/
Al realizar esta acción, el servidor Tomcat detectará el nuevo archivo y realizará el despliegue en caliente (hot-deploy) de forma automática. ### 5. Monitoreo y Acceso al Contenedor
Para verificar el estado interno del servidor o consultar logs específicos, puede acceder a la terminal interactiva del contenedor mediante el comando `exec`: ```
# Listar contenedores activos
docker ps
# Acceder a la consola bash del contenedor
docker exec -it mi_servidor_tomcat /bin/bash