Skip to content

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

  1. Realizar la instalación del paquete de complemento para utilizar Docker Compose en el ambiente de laboratorio, ejecutar el siguiente comando.
    sudo zypper install docker-compose
    
    En el mensaje siguiente Continue? [y/n/v/...? shows all options] (y):, escribir la letra y y presionar Enter
  2. Clonar el siguiente repositio de ejemplos de Docker Compose con el siguiente comando:
    git clone https://github.com/docker/awesome-compose.git
    
  3. Ingresar al directorio awesome-compose y luego inspeccionar el archivo llamado compose.yaml
    cat compose.yaml
    
    El 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.
  4. Ejecutar el siguiente comando para asegurarse que el ambiente se encuentra limpio:
    docker rm -f $(docker ps -aq) ; docker image prune -a -f
    
  5. Desplegar el servicio de ejemplo con docker compose
    docker compose up -d
    
    La salida del comando anterior debe ser similar a la siguiente:
     => => 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
    
  6. Verifica los Contenedores creados:
    docker ps 
    
    La salida del comando anterior debe ser similar a la siguiente:
    CONTAINER 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
    
  7. Realizar la prueba del servicio accediendo a la siguiente URL:
    curl localhost:8080
    
    La salida del comando anterior debe ser similar a la siguiente:
    <!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>
    
  8. Para detener y remover los contenedores creados anteriormente, ejecuta el siguiente comando:
    docker compose down
    
    La salida del comando anterior debe ser similar a la siguiente:
    [+] 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
    
  9. 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

  1. Ejecutar este nuevo ejemplo que se encuentra en el directorio ~/awesome-compose/aspnet-mssql, como se ejecuto el anterior.

  2. Puede utilizar el FQDN para validar el funcionamiento del aplicativo, por ejemplo: http://student-0-aio.34-19-16-179.nip.io/

  3. Para detener y remover los contenedores creados anteriormente, ejecuta el siguiente comando:

    docker compose down
    
    La salida del comando anterior debe ser similar a la siguiente:
    [+] 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
    

  4. Asegurarse de dejar limpio el ambiente de laboratorio con el siguiente comando:
    docker rm -f $(docker ps -aq) ; docker image prune -a -f