Saltar la navegación

7. Aplicaciones multicapa con docker-compose

Hasta ahora hemos estado hablando de contenedores en solitario pero la realidad es que las aplicaciones actuales están formadas de varias aplicaciones o servicios. TÍPICAMENTE podríamos decir que tenemos al menos los siguientes elementos:

Arquitectura típica de una aplicación multi-capa
Juan Diego Pérez Jiménez. Arquitectura típica de una aplicación multi-capa (Dominio público)
  • Una CAPA DE PRESENTACIÓN que hace referencia al cliente que obtiene los datos pudiendo ser un navegador, una app móvil etc..
  • Una CAPA LÓGICA  que típicamente está representada por un servidor web, servidor de aplicaciones etc..
  • Una CAPA DE DATOS que reside normalmente en un servidor de base de datos, ya sea relacional o no.

Además nos podemos encontrar aplicaciones con arquitecturas mucho más complejas con diversos servidores de bases de datos, distintos APIs independientes, servidores de autentificación etc... Aunque estas aplicaciones existen, lo cierto es que para el objetivo del curso nos vamos a conformar con aplicaciones como las descritas anteriormente, con una capa de presentación, una capa de lógica y una capa de datos.

Precisamente ya vimos por encima en el módulo anterior un ejemplo de este tipo de aplicaciones donde teníamos:

  • Un contenedor con un servidor web Apache,  con el módulo PHP instalado y el código  de Wordpress descargado en la carpeta adecuada.
  • Un contenedor con un servidor de base de datos MariaDb para guardar los datos de la aplicación.

Esos contenedores los habíamos creado y configurado por separado aunque conformaban una única aplicación. Tenía que arrancarlos y configurarlos uno a uno de manera manual. Eso no es ideal y además no es ágil, cada vez que quiero poner en funcionamiento este tipo de arquitectura deberé repetir todo el proceso de manera paso a paso. LO IDEAL sería:

  • Hacer todo de manera declarativa para que no tenga que repetir todo el proceso cada vez.
  • Poner en funcionamiento todos los contenedores que necesita mi aplicación de una sola vez y debidamente configurados.
  • Garantizar que los contenedores se arrancan en el orden adecuado. Por ejemplo: Mi aplicación no podrá funcionar debidamente hasta que no esté el servidor de bases de datos funcionando en marcha.
  • Asegurarnos de que hay comunicación entre los contenedores que pertenecen a la aplicación.

Para todo esto tenemos la herramienta DOCKER-COMPOSE. Si tuviéramos que definir esta herramienta diríamos:

"DOCKER-COMPOSE ES UNA HERRAMIENTA PARA DESPLEGAR GRUPOS DE CONTENEDORES QUE FORMAN PARTE DE UNA MISMA APLICACIÓN  O UN MISMO ENTORNO"

El proceso para conseguir esto se describe de manera general en la siguiente imagen:

Proceso general de docker-compose
Juan Diego Pérez Jiménez. Proceso general de docker-compose (Dominio público)

Los pasos son los siguientes:

  1. Describo de manera declarativa todo los contenedores que conforman mi aplicación en el fichero docker-compose.yml. Este fichero es un un fichero con formato YAML.
  2. Al ejecutar docker-compose up se levanta toda la aplicación, es decir, todos los contenedores que la conforman.

Profundizaremos en el contenido de ese fichero y en las posibilidades más relevantes que nos proporciona la herramienta docker-compose a lo largo de este módulo.