Tema:
Docker Compose (Aplicaciones MultiContenedor)
Introducción
En la actualidad, las aplicaciones modernas rara vez funcionan como una sola unidad; suelen estar compuestas por múltiples servicios que trabajan en conjunto, como bases de datos, servidores web y colas de mensajes. Docker Compose es una herramienta poderosa que permite definir, configurar y gestionar aplicaciones multicontenedor mediante un archivo YAML. Esta herramienta simplifica la creación y orquestación de entornos de desarrollo y producción, proporcionando una manera eficiente de manejar las complejidades de las aplicaciones distribuidas.
Con Docker Compose, los desarrolladores pueden describir la infraestructura necesaria para sus aplicaciones, incluyendo configuraciones específicas, dependencias y redes. Además, Compose permite ejecutar, detener y escalar fácilmente aplicaciones multicontenedor, proporcionando un entorno controlado y replicable que fomenta la colaboración y la agilidad en los flujos de trabajo.
Objetivo
Objetivo General:
- Introducir a los participantes en el uso de Docker Compose para crear, configurar y administrar aplicaciones multicontenedor. Este módulo busca proporcionar las habilidades necesarias para definir la infraestructura de aplicaciones distribuidas utilizando archivos YAML, gestionar dependencias entre servicios y orquestar la ejecución de múltiples contenedores de manera sencilla y eficiente.
Ejemplo Docker Compose: Java application with Spring framework and a Postgres database
- Realizar la instalación del paquete de complemento para utilizar Docker Compose en el ambiente de laboratorio, ejecutar el siguiente comando.
En el mensaje siguiente
sudo zypper install docker-composeContinue? [y/n/v/...? shows all options] (y):, escribir la letra y y presionarEnter - Clonar el siguiente repositio de ejemplos de Docker Compose con el siguiente comando:
git clone https://github.com/docker/awesome-compose.git - Ingresar al directorio
awesome-composey luego inspeccionar el archivo llamado compose.yamlEl archivo define una aplicación con dos servicios: backend y db. Al desplegar la aplicación, Docker Compose mapea el puerto 8080 del contenedor del servicio backend al puerto 8080 del host, según lo especificado en el archivo. Asegúrate de que el puerto 8080 del host no esté siendo utilizado previamente.cat compose.yaml - Ejecutar el siguiente comando para asegurarse que el ambiente se encuentra limpio:
docker rm -f $(docker ps -aq) ; docker image prune -a -f - Desplegar el servicio de ejemplo con docker compose
La salida del comando anterior debe ser similar a la siguiente:
docker compose up -d=> => exporting layers 0.0s => => writing image sha256:12d140c105b9491aa808210ce78beb7ea78cd2638f23e5fcf192a74b124167ca 0.0s => => naming to docker.io/library/spring-postgres-backend 0.0s [+] Running 3/3 ✔ Network spring-postgres_spring-postgres Created 0.1s ✔ Container spring-postgres-db-1 Started 0.1s ✔ Container spring-postgres-backend-1 Started - Verifica los Contenedores creados:
La salida del comando anterior debe ser similar a la siguiente:
docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES efd5f1bf70b7 postgres "docker-entrypoint.s…" 5 seconds ago Up 4 seconds 5432/tcp spring-postgres-db-1 d579461e0ea6 spring-postgres-backend "java -cp app:app/li…" 5 seconds ago Up 4 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp spring-postgres-backend-1 - Realizar la prueba del servicio accediendo a la siguiente URL:
La salida del comando anterior debe ser similar a la siguiente:
curl localhost:8080<!DOCTYPE HTML> <html> <head> <title>Getting Started: Serving Web Content</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <p>Hello from Docker!</p> </body> - Para detener y remover los contenedores creados anteriormente, ejecuta el siguiente comando:
La salida del comando anterior debe ser similar a la siguiente:
docker compose down[+] Running 3/3 ✔ Container spring-postgres-backend-1 Removed 0.6s ✔ Container spring-postgres-db-1 Removed 0.4s ✔ Network spring-postgres_spring-postgres Removed 0.1s - Asegurarse de dejar limpio el ambiente de laboratorio con el siguiente comando:
docker rm -f $(docker ps -aq) ; docker image prune -a -f
Ejemplo Docker Compose: Compose sample application: ASP.NET with MS SQL server database
-
Ejecutar este nuevo ejemplo que se encuentra en el directorio ~/awesome-compose/aspnet-mssql, como se ejecuto el anterior.
-
Puede utilizar el FQDN para validar el funcionamiento del aplicativo, por ejemplo: http://student-0-aio.34-19-16-179.nip.io/
-
Para detener y remover los contenedores creados anteriormente, ejecuta el siguiente comando:
La salida del comando anterior debe ser similar a la siguiente:docker compose down[+] Running 3/2 ✔ Container aspnet-mssql-db-1 Removed 10.5s ✔ Container aspnet-mssql-web-1 Removed 0.3s ✔ Network aspnet-mssql_default Removed 0.1s - Asegurarse de dejar limpio el ambiente de laboratorio con el siguiente comando:
docker rm -f $(docker ps -aq) ; docker image prune -a -f