Explorando Docker: El Futuro del Desarrollo de Aplicaciones Web

Docker, la innovadora herramienta que está cambiando el desarrollo de software. Facilita la gestión de aplicaciones, acelera los ciclos de desarrollo y asegura un rendimiento óptimo en cualquier entorno. ¡Indispensable para desarrolladores modernos!

Si eres parte del emocionante mundo de la tecnología de información o el desarrollo de software, es probable que hayas oído hablar de esta revolucionaria herramienta. En este artículo, te sumergirás en el fascinante universo de Docker, una plataforma de código abierto que está transformando la forma en que desarrollamos, enviamos y ejecutamos aplicaciones web. Prepárate para descubrir cómo Docker se ha convertido en un aliado esencial en el viaje del desarrollo de software moderno, simplificando la gestión de aplicaciones, acelerando los ciclos de desarrollo y asegurando que tus aplicaciones funcionen perfectamente en cualquier entorno. Acompáñanos en este viaje por el mundo de Docker y descubre por qué es una herramienta esencial en la caja de herramientas de desarrolladores y equipos de operaciones en todo el mundo.

Dicho esto, es posible que no comprendas completamente todo lo que abarca esta plataforma. Por lo tanto, explicaremos los elementos fundamentales para que puedas tener un mejor panorama de lo que es Docker.

Docker

Elementos clave de Docker

  1. Contenedores: Este término es fundamental cuando empiezas a trabajar con Docker. Los contenedores son instancias aisladas de una aplicación y su entorno, empaquetadas juntas en una única unidad.
    Imagina que un contenedor es como una lonchera mágica para tu aplicación. En esta lonchera, tienes todo lo que necesitas para que tu aplicación funcione: la comida (el código de la aplicación) y los utensilios (bibliotecas, configuraciones, etc.). Todo está empaquetado en una sola caja. Ahora, cuando desees ejecutar tu aplicación en diferentes lugares, simplemente tomas la lonchera mágica contigo. Puedes abrirla y usarla en tu casa, en la oficina o en cualquier otro lugar. No importa dónde la uses, la lonchera siempre contiene todo lo necesario para que tu aplicación funcione correctamente.
  1. Imágenes: Una imagen de contenedor es un archivo de solo lectura que contiene todo lo necesario para ejecutar una aplicación, incluyendo las bibliotecas, el código de la aplicación y las configuraciones. Las imágenes son la base de los contenedores y se utilizan para crear instancias de contenedores en tiempo de ejecución.
    Piensa en una imagen de contenedor como un modelo o plantilla de una lonchera mágica. Esta plantilla contiene la receta para crear una lonchera mágica, pero aún no es una lonchera real. En la plantilla se detallan todos los ingredientes y las instrucciones necesarias para preparar la lonchera mágica de tu aplicación. Esto incluye el tipo de comida (código de la aplicación), los utensilios (bibliotecas, configuraciones, etc.) y cómo deben organizarse.
  2. Docker Hub: Docker Hub es un registro de imágenes de contenedor en línea donde los desarrolladores pueden encontrar, compartir y distribuir imágenes de contenedor. Puedes acceder a una amplia variedad de imágenes listas para usar en Docker Hub, lo que facilita el proceso de implementación de aplicaciones.
  3. Docker Compose: Docker Compose es una herramienta que permite definir y ejecutar aplicaciones multipartes en contenedores. Permite gestionar fácilmente las dependencias entre los servicios y configurar los contenedores mediante un archivo de configuración YAML.
    En otras palabras, Docker Compose es como un organizador de fiestas que planifica y gestiona todos los detalles de un evento divertido. En lugar de organizar cada parte de la fiesta manualmente, el organizador de la fiesta se encarga de todo por ti.

¿Por qué usar Docker?

Docker se ha convertido en una tecnología ampliamente adoptada en el desarrollo de software moderno, ya que simplifica la gestión de aplicaciones, acelera el ciclo de desarrollo y facilita la implementación de aplicaciones en diferentes entornos. Permite a los equipos de desarrollo y operaciones trabajar de manera más eficiente y garantizar que las aplicaciones se ejecuten de manera coherente en diferentes entornos, desde el entorno de desarrollo hasta la producción.

Los contenedores de Docker son altamente portátiles, lo que significa que puedes ejecutar una aplicación en cualquier lugar donde Docker esté instalado, independientemente del sistema operativo o la infraestructura subyacente. Esto simplifica la implementación y evita problemas de compatibilidad. Cada contenedor es independiente de los demás y comparte el mismo kernel del sistema operativo anfitrión, lo que garantiza que los contenedores no interfieran entre sí. Esto mejora la seguridad y la confiabilidad de las aplicaciones. Además, los contenedores se inician y detienen en cuestión de segundos, lo que acelera el proceso de desarrollo y pruebas. Esto es especialmente útil en entornos DevOps y de integración continua.

En resumen, Docker es una tecnología versátil que agiliza el desarrollo, la implementación y la administración de aplicaciones al proporcionar un entorno aislado y altamente portátil. Esto lo convierte en una elección popular para desarrolladores, equipos de operaciones y organizaciones que buscan mejorar la eficiencia y la confiabilidad de sus aplicaciones.

En nuestras próximas entradas, explicaremos con mayor profundidad y mostraremos ejemplos prácticos el funcionamiento de Docker con el entorno de hosting, ya que SitiosHispanos.com ofrece planes de hosting Docker con stacks preinstalados para Python y Java.

Si te gustó este artículo, suscríbete a nuestro canal de YouTube  para videos tutoriales de Hosting, prácticas y demás. También puede encontrarnos en  Twitter, Facebook e Instagram.

Tomcat 10.x: Instalacción vía container en cPanel sobre Almalinux

Las versiones nuevas de Sistemas Operativos basados en Linux, como por ejemplo Almalinux, permiten sólo la instalación de Tomcat en versiones superiores a las 10.0; lo cual trae consigo un cambio en el proceso de instalación y en el de despliegue de aplicaciones en servidores con cPanel.

Es necesario preparar el servidor cPanel con Almalinux para usar Tomcat 10.x.
Tomcat funciona gracias al administrador de contenedores llamado PODMAN. Tenemos que activar este contenedor a nivel servidor con credenciales root.

Cabe destacar que, para realizar este proceso, necesita no solo tener acceso como usuario root y como usuario cPanel al servidor; sino también poseer conocimientos, al menos básicos, para conectar vía SSH al servidor y correr comandos en consola.

Comenzamos

Nos conectamos vía SSH al servidor con usuario root.
Primero corremos estos comandos para instalar Podman:

dnf install -y ea-podman-repo

dnf install -y ea-podman

Luego es necesario instalar el paquete de Tomcat en el servidor para que esté disponible:

dnf install -y ea-tomcat101

Con estos pasos quedaría listo el servidor para poder usar el contenedor a nivel usuario de cPanel, para luego poder instalar Tomcat en cada cuenta que lo necesite.
El usuario de cPanel debe tener activado SSH.

Ya conectado vía SSH como usuario de cPanel, deberemos correr el siguiente comando para instalar ea-tomcat como Container:

/usr/local/cpanel/scripts/ea-podman install ea-tomcat101

Esto creará el directorio de aplicaciones para la utilización de Tomcat en la siguiente ruta:

/home/usuarioCpanel/ea-podman.d/nombre-de-container

Donde “usuarioCpanel” es el usuario de cPanel de la cuenta donde corrimos el comando; y “nombre-de-container” es el nombre del contenedor de Tomcat. Este nombre lo crea el comando por defecto.

Corriendo alguno de los siguientes comandos se podrá obtener el nombre del container:

/usr/local/cpanel/scripts/ea-podman containers

/usr/local/cpanel/scripts/ea-podman registered

/usr/local/cpanel/scripts/ea-podman running

Por poner un ejemplo, un contenedor se puede llamar:

ea-tomcat101.miusuariocpanel.01

Deberemos usar ese nombre para poder correr cualquier comando de Tomcat dentro del usuario de cPanel.

Hay que detallar que en la instalación de Tomcat se guarda en:

/home/usuarioCpanel/ea-podman.d/nombre-de-container

Dentro de dicha instalación, las carpetas más importantes o a tener en cuenta son:

1) /home/usuarioCpanel/ea-podman.d/nombre-de-container/conf

En esta carpeta se encuentran los archivos de configuración de Tomcat; donde hay que destacar el archivo server.xml

2) /home/usuarioCpanel/ea-podman.d/nombre-de-container/logs

Aquí tenemos los registros o logs de la aplicación.

3) /home/usuarioCpanel/ea-podman.d/nombre-de-container/webapss/ROOT

Aquí se suben los archivos de la aplicación JAVA.

Podemos probar que Tomcat funciona realizando los siguientes pasos:

  • Creamos en /home/usuarioCpanel/ea-podman.d/nombre-de-container/webapss/ROOT un archivo llamado index.jsp que tenga el siguiente contenido:
<html><body>
<% out.println("Hello world! -- From JSP"); %>
</body></html>
  • Luego, debemos agregar este código en /home/usuarioCpanel/ea-podman.d/nombre-de-container/conf/server.xml

Como muestra la imagen, en la linea mencionada debajo:

<Host name="localhost" appBase="webapps" unpackWARs="false" autoDeploy="false" deployOnStartup="false" deployXML="false">

Debemos agregar este Context:

<Context path="" docBase="ROOT">
 <!-- Default set of monitored resources -->
 <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

Luego debemos reiniciar el container de Tomcat:

/usr/local/cpanel/scripts/ea-podman restart nombre-de-container

Ahora, es importante saber que puertos fueron asignados al container de Tomcat instalado.
Podemos ver esto corriendo:

/usr/local/cpanel/scripts/ea-podman running

El primer puerto es el puerto HTTP y el segundo puerto es el AJP. Cada container de Tomcat instalado asignará distintos puertos.

En este punto, deberíamos poder ver el contenido del index.jsp que subimos escribiendo esta dirección web en el navegador:

IPservidor:PuertoTomcatHTTP/index.jsp

Por ejemplo: http://10.11.12.13:10000/index.jsp

Si podemos visualizar de manera correcta el archivo index.jsp que pusimos como prueba, implica que Tomcat está bien instalado y configurado hasta este punto.

Ahora procederemos con unas modificaciones para poder visualizar aplicaciones JAVA desde direcciones web normales; como si se usara Apache.
Vamos a tener que loguearnos ahora al servidor nuevamente como usuario root para proceder con estos pasos.

Deberemos crear estos dos directorios, donde /user/domain debe reemplazarse por el usuario cPanel y su dominio.

mkdir -p /etc/apache2/conf.d/userdata/std/2_4/user/domain/
mkdir -p /etc/apache2/conf.d/userdata/ssl/2_4/user/domain/

Luego debemos crear el archivo custom.conf en el primer directorio creado:

nano /etc/apache2/conf.d/userdata/std/2_4/user/domain/custom.conf

El comando nano o vi crean el archivo sin necesidad de usar otro comando para crear archivos en SSH; como lo era touch.

En este archivo debemos agregar el siguiente proxy, donde se usa el segundo puerto que nos da como resultado al correr el comando:

/usr/local/cpanel/scripts/ea-podman running

En este ejemplo, el comando da como resultado dos puertos: 10000 y 10001.
El puerto 10001 es el que se usa en el proxy para utilizar AJP.

El archivo custom.conf debería tener el siguiente contenido:

<IfModule proxy_ajp_module>
    ProxyPassMatch "/.well-known/(.*)" "!"
    ProxyPassMatch "/(.*).jsp" "ajp://localhost:10001"
    ProxyPassMatch "/servlets/(.*)" "ajp://localhost:10001"
</IfModule>

(Recuerde que el puerto 10001 es un ejemplo, el resultado en su instalación puede ser otro).

Luego, creamos un symlink desde este archivo custom.conf desde la ruta /etc/apache2/conf.d/userdata/std/2_4/user/domain/ a la ruta /etc/apache2/conf.d/userdata/ssl/2_4/user/domain/. Recordar reemplazar /user/domain por el usuario cpanel y su dominio.

ln -s /etc/apache2/conf.d/userdata/std/2_4/user/domain/custom.conf /etc/apache2/conf.d/userdata/ssl/2_4/user/domain/custom.conf

Hecho esto, debemos recompilar el archivo httpd.conf corriendo el siguiente comando:

/usr/local/cpanel/scripts/rebuildhttpdconf

Este proceso no debería arrojar ningún error. Si se presenta un error, entonces existe algún mal tipeo o copiamos un espacio en blanco en el archivo custom.conf.

Por último, reiniciamos Apache:

service httpd restart

Deberíamos poder ver el index.jsp usando el dominio normal:

https://dominio/index.jsp

Algunos comandos útiles

Estos comandos mostrarán el Status, iniciarán, reiniciarán o detendrán el container de Tomcat:

/usr/local/cpanel/scripts/ea-podman status nombre-de-container
/usr/local/cpanel/scripts/ea-podman start nombre-de-container
/usr/local/cpanel/scripts/ea-podman restart nombre-de-container
/usr/local/cpanel/scripts/ea-podman stop nombre-de-container

Como modificar variables de Tomcat

Para realizar estos cambios es necesario conectar a SSH como usuario de root.
Se puede hacer este proceso como usuario de cPanel corriendo este comando:

/usr/local/cpanel/scripts/ea-podman bash nombre-de-container

Es necesario usar nano, vi o vim para editar el archivo.
Accedemos a la ruta /user/local/tomcat/bin:

cd /user/local/tomcat/bin

Ahora corremos el editor elegido para editar el archivo catalina.sh:

nano catalina.sh

Agregar la siguiente linea debajo del cuadro comentado:

CATALINA_OPTS=”-Xms512m -Xmx1024m”

La siguiente línea agregada significa que la aplicación tiene un mínimo de memoria de 512MB y un máximo de memoria de 1GB.

Luego, de grabar el cambio en el archivo catalina.sh, salir del modo root temporal con:

exit

Ahora reiniciamos el container asegurándonos que estamos nuevamente como usuario cpanel:

/usr/local/cpanel/scripts/ea-podman restart nombre-de-container

Procedemos a controlar el estado de Tomcat con el comando:

/usr/local/cpanel/scripts/ea-podman status nombre-de-container

Con esto corroboramos que luego de editar el archivo catalina.sh Tomcat está funcionando correctamente.

Fuente:

https://docs.cpanel.net/ea4/containers/tomcat-via-containers/

https://docs.cpanel.net/ea4/containers/easyapache-4-containers/#almalinux-and-rocky-linux