

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# QuickStart: Implementar una aplicación de Docker Compose en Elastic Beanstalk
<a name="docker-compose-quickstart"></a>

Este QuickStart tutorial explica el proceso de creación de una aplicación Docker Compose de varios contenedores e implementarla en un entorno. AWS Elastic Beanstalk Creará una aplicación web Flask con un proxy inverso nginx para demostrar cómo Docker Compose simplifica la orquestación de contenedores múltiples.

**No válido para uso en producción**  
Los ejemplos se presentan solo con fines de demostración. No utilice aplicaciones de ejemplo en producción.

**Topics**
+ [Tu cuenta AWS](#docker-compose-quickstart-aws-account)
+ [Requisitos previos](#docker-compose-quickstart-prereq)
+ [Paso 1: crear una aplicación Docker Compose](#docker-compose-quickstart-create-app)
+ [Paso 2: ejecutar la aplicación a nivel local](#docker-compose-quickstart-run-local)
+ [Paso 3: implementar la aplicación Docker Compose con la CLI de EB](#docker-compose-quickstart-deploy)
+ [Paso 4: probar la aplicación en Elastic Beanstalk](#docker-compose-quickstart-run-eb-ap)
+ [Paso 5: Eliminar](#docker-compose-quickstart-cleanup)
+ [AWS recursos para su aplicación](#docker-compose-quickstart-eb-resources)
+ [Siguientes pasos](#docker-compose-quickstart-next-steps)
+ [Implementar con la consola de Elastic Beanstalk](#docker-compose-quickstart-console)

## Tu cuenta AWS
<a name="docker-compose-quickstart-aws-account"></a>

Si aún no eres AWS cliente, debes crear una AWS cuenta. Al registrarse, podrá acceder a Elastic Beanstalk AWS y a otros servicios que necesite.

Si ya tiene una AWS cuenta, puede pasar a. [Requisitos previos](#docker-compose-quickstart-prereq)

### Crea una AWS cuenta
<a name="docker-compose-quickstart-aws-account-procedure"></a>

#### Inscríbase en una Cuenta de AWS
<a name="sign-up-for-aws"></a>

Si no tiene uno Cuenta de AWS, complete los siguientes pasos para crearlo.

**Para suscribirse a una Cuenta de AWS**

1. Abrir [https://portal.aws.amazon.com/billing/registro](https://portal.aws.amazon.com/billing/signup).

1. Siga las instrucciones que se le indiquen.

   Parte del procedimiento de registro consiste en recibir una llamada telefónica o mensaje de texto e indicar un código de verificación en el teclado del teléfono.

   Cuando te registras en un Cuenta de AWS, *Usuario raíz de la cuenta de AWS*se crea un. El usuario raíz tendrá acceso a todos los Servicios de AWS y recursos de esa cuenta. Como práctica recomendada de seguridad, asigne acceso administrativo a un usuario y utilice únicamente el usuario raíz para realizar [Tareas que requieren acceso de usuario raíz](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks).

AWS te envía un correo electrónico de confirmación una vez finalizado el proceso de registro. En cualquier momento, puede ver la actividad de su cuenta actual y administrarla accediendo a [https://aws.amazon.com/](https://aws.amazon.com/)y seleccionando **Mi cuenta**.

#### Creación de un usuario con acceso administrativo
<a name="create-an-admin"></a>

Después de crear un usuario administrativo Cuenta de AWS, asegúrelo Usuario raíz de la cuenta de AWS AWS IAM Identity Center, habilite y cree un usuario administrativo para no usar el usuario root en las tareas diarias.

**Proteja su Usuario raíz de la cuenta de AWS**

1.  Inicie sesión [Consola de administración de AWS](https://console.aws.amazon.com/)como propietario de la cuenta seleccionando el **usuario root** e introduciendo su dirección de Cuenta de AWS correo electrónico. En la siguiente página, escriba su contraseña.

   Para obtener ayuda para iniciar sesión con el usuario raíz, consulte [Iniciar sesión como usuario raíz](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial) en la *Guía del usuario de AWS Sign-In *.

1. Active la autenticación multifactor (MFA) para el usuario raíz.

   Para obtener instrucciones, consulte [Habilitar un dispositivo MFA virtual para el usuario Cuenta de AWS raíz (consola)](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html) en la Guía del usuario de *IAM*.

**Creación de un usuario con acceso administrativo**

1. Activar IAM Identity Center.

   Consulte las instrucciones en [Activar AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html) en la *Guía del usuario de AWS IAM Identity Center *.

1. En IAM Identity Center, conceda acceso administrativo a un usuario.

   Para ver un tutorial sobre su uso Directorio de IAM Identity Center como fuente de identidad, consulte [Configurar el acceso de los usuarios con la configuración predeterminada Directorio de IAM Identity Center en la](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html) Guía del *AWS IAM Identity Center usuario*.

**Inicio de sesión como usuario con acceso de administrador**
+ Para iniciar sesión con el usuario de IAM Identity Center, use la URL de inicio de sesión que se envió a la dirección de correo electrónico cuando creó el usuario de IAM Identity Center.

  Para obtener ayuda para iniciar sesión con un usuario del Centro de identidades de IAM, consulte [Iniciar sesión en el portal de AWS acceso](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html) en la *Guía del AWS Sign-In usuario*.

**Concesión de acceso a usuarios adicionales**

1. En IAM Identity Center, cree un conjunto de permisos que siga la práctica recomendada de aplicar permisos de privilegios mínimos.

   Para conocer las instrucciones, consulte [Create a permission set](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html) en la *Guía del usuario de AWS IAM Identity Center *.

1. Asigne usuarios a un grupo y, a continuación, asigne el acceso de inicio de sesión único al grupo.

   Para conocer las instrucciones, consulte [Add groups](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html) en la *Guía del usuario de AWS IAM Identity Center *.

## Requisitos previos
<a name="docker-compose-quickstart-prereq"></a>

Para seguir los procedimientos de esta guía, necesitará un shell o un terminal de línea de comando donde pueda ejecutar los comandos. Los comandos aparecen en listas y van precedidos del símbolo del sistema ($) y del nombre del directorio actual, si es aplicable.

```
~/eb-project$ this is a command
this is output
```

En Linux y macOS, puede utilizar el administrador de shell y paquetes preferido. En Windows, puede [instalar Windows Subsystem para Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10) para obtener una versión de Ubuntu y Bash integrada con Windows.

### CLI DE EB
<a name="docker-compose-quickstart-prereq.ebcli"></a>

En este tutorial también se utiliza la interfaz de línea de comandos de Elastic Beanstalk (CLI de EB). Para obtener detalles sobre la instalación y configuración de la CLI de EB, consulte [Instalación de la CLI de EB con el script de configuración (recomendado)](eb-cli3.md#eb-cli3-install) y [Configuración de la CLI de EB](eb-cli3-configuration.md).

### Docker y Docker Compose
<a name="docker-compose-quickstart-prereq.runtime"></a>

Para seguir este tutorial, necesita una instalación local activa de Docker y Docker Compose. Para obtener más información, consulte [Obtener Docker](https://docs.docker.com/get-docker/) e [Instalar Docker Compose](https://docs.docker.com/compose/install/) en el sitio web de documentos de Docker.

Compruebe que Docker y Docker Compose estén instalados y en ejecución; para ello, ejecute los siguientes comandos.

```
~$ docker info
~$ docker compose version
```

## Paso 1: crear una aplicación Docker Compose
<a name="docker-compose-quickstart-create-app"></a>

Para este ejemplo, creamos una aplicación multicontenedor con Docker Compose que consta de una aplicación web Flask y un proxy inverso nginx. Esto demuestra cómo Docker Compose simplifica la orquestación de contenedores múltiples que funcionan juntos.

La aplicación incluye una configuración de monitoreo del estado que permite que Elastic Beanstalk recopile métricas detalladas de la aplicación desde su proxy nginx.

La aplicación consta de la siguiente estructura:

```
~/eb-docker-compose-flask/
|-- docker-compose.yml
|-- web/
|   |-- Dockerfile
|   |-- app.py
|   `-- requirements.txt
|-- proxy/
|   |-- Dockerfile
|   `-- nginx.conf
`-- .platform/
    `-- hooks/
        `-- postdeploy/
            `-- 01_setup_healthd_permissions.sh
```

Compruebe que la estructura del directorio y añada los siguientes archivos:

En primer lugar, cree el archivo `docker-compose.yml` principal que defina los servicios y sus relaciones.

**Example `~/eb-docker-compose-flask/docker-compose.yml`**  

```
services:
  web:
    build: ./web
    expose:
      - "5000"

  nginx-proxy:
    build: ./proxy
    ports:
      - "80:80"
    volumes:
      - "/var/log/nginx:/var/log/nginx"
    depends_on:
      - web
```

Cree un directorio para la aplicación web Flask en el directorio `web`. Agergue el siguiente contenido al archivo `app.py`.

**Example `~/eb-docker-compose-flask/web/app.py`**  

```
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
    return 'Hello Elastic Beanstalk! This is a Docker Compose application'
```

Agregue el siguiente contenido al `Dockerfile` de su servicio web.

**Example `~/eb-docker-compose-flask/web/Dockerfile`**  

```
FROM public.ecr.aws/docker/library/python:3.12
COPY . /app
WORKDIR /app
RUN pip install Flask==3.1.1
EXPOSE 5000
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"]
```

Cree el proxy inverso nginx en el directorio `proxy`. Agergue el siguiente contenido al archivo `nginx.conf`.

Esta configuración incluye una configuración de monitoreo del estado que permite que Elastic Beanstalk recopile métricas detalladas de la aplicación. Para obtener más información sobre la personalización de los formatos de registro de monitoreo del estado, consulte [Formato de los registros de estado avanzados](health-enhanced-serverlogs.md).

**Example `~/eb-docker-compose-flask/proxy/nginx.conf`**  

```
events {
    worker_connections 1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    map $http_upgrade $connection_upgrade {
        default       "upgrade";
    }

    # Health monitoring log format for Elastic Beanstalk
    log_format healthd '$msec"$uri"$status"$request_time"$upstream_response_time"$http_x_forwarded_for';
    
    upstream flask_app {
        server web:5000;
    }

    server {
        listen 80 default_server;
        root /usr/share/nginx/html;

        # Standard access log
        access_log /var/log/nginx/access.log;
        
        # Health monitoring log for Elastic Beanstalk
        if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") {
            set $year $1;
            set $month $2;
            set $day $3;
            set $hour $4;
        }
        access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd;
        
        location / {
            proxy_pass http://flask_app;
            proxy_http_version    1.1;

            proxy_set_header    Connection             $connection_upgrade;
            proxy_set_header    Upgrade                $http_upgrade;
            proxy_set_header    Host                   $host;
            proxy_set_header    X-Real-IP              $remote_addr;
            proxy_set_header    X-Forwarded-For        $proxy_add_x_forwarded_for;
        }
    }
}
```

Añada el siguiente contenido al `Dockerfile` de servicio proxy.

**Example `~/eb-docker-compose-flask/proxy/Dockerfile`**  

```
FROM public.ecr.aws/nginx/nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
```

Por último, cree un script de enlace a la plataforma para configurar los directorios de registro y los permisos necesarios para el monitoreo del estado. Los enlaces a la plataforma le permiten ejecutar scripts personalizados durante el proceso de implementación. Para obtener más información acerca de los enlaces a la plataforma, consulte [Enlaces de la plataforma](platforms-linux-extend.hooks.md).

**Example `~/eb-docker-compose-flask/.platform/hooks/postdeploy/01_setup_healthd_permissions.sh`**  

```
#!/bin/bash
set -ex

NGINX_CONTAINER=$(docker ps --filter "name=nginx-proxy" -q)

if [ -z "$NGINX_CONTAINER" ]; then
    echo "Error: No nginx-proxy container found running"
    exit 1
fi

NGINX_UID=$(docker exec ${NGINX_CONTAINER} id -u nginx)
NGINX_GID=$(docker exec ${NGINX_CONTAINER} id -g nginx)

mkdir -p /var/log/nginx/healthd
chown -R ${NGINX_UID}:${NGINX_GID} /var/log/nginx
```

## Paso 2: ejecutar la aplicación a nivel local
<a name="docker-compose-quickstart-run-local"></a>

Utilice el comando [docker compose up](https://docs.docker.com/compose/reference/up/) para crear y ejecutar la aplicación multicontenedor de forma local. Docker Compose creará las dos imágenes del contenedor e iniciará los servicios definidos en el archivo `docker-compose.yml`.

```
~/eb-docker-compose-flask$ docker compose up --build
```

La opción **--build** garantiza que Docker Compose cree las imágenes del contenedor antes de iniciar los servicios. Debería ver el resultado que muestra el inicio del servicio web y del servicio nginx-proxy.

En el navegador, vaya a `http://localhost`. Debería ver el texto “Hola, Elastic Beanstalk. Esta es una aplicación Docker Compose». El proxy nginx recibe su solicitud en el puerto 80 y la reenvía a la aplicación Flask que se ejecuta en el puerto 5000.

Cuando termine de probar, detenga la aplicación pulsando **Ctrl\+C** en el terminal o ejecute el siguiente comando en otro terminal:

```
~/eb-docker-compose-flask$ docker compose down
```

## Paso 3: implementar la aplicación Docker Compose con la CLI de EB
<a name="docker-compose-quickstart-deploy"></a>

Ejecute los siguientes comandos para crear un entorno de Elastic Beanstalk en esta aplicación.

 

**Cómo crear un entorno e implementar la aplicación Docker Compose**

1. Inicialice el repositorio de la CLI de EB con el comando **eb init**.

   ```
   ~/eb-docker-compose-flask$ eb init -p docker docker-compose-tutorial --region {{us-east-2}}
   Application docker-compose-tutorial has been created.
   ```

   Este comando crea una aplicación llamada `docker-compose-tutorial` y configura el repositorio local para crear entornos con la última versión de la plataforma de Docker.

1. (Opcional) Ejecute de nuevo **eb init** para configurar un par de claves predeterminadas de forma que pueda usar SSH para conectarse a la instancia de EC2 donde se ejecuta la aplicación.

   ```
   ~/eb-docker-compose-flask$ eb init
   Do you want to set up SSH for your instances?
   (y/n): y
   Select a keypair.
   1) my-keypair
   2) [ Create new KeyPair ]
   ```

   Seleccione un par de claves si ya tiene uno o siga las instrucciones para crear uno. Si no ve el símbolo del sistema o más adelante necesita cambiar la configuración, ejecute **eb init -i**.

1. Cree un entorno e implemente la aplicación en él con **eb create**. Elastic Beanstalk detecta automáticamente el archivo `docker-compose.yml` e implementa la aplicación multicontenedor.

   ```
   ~/eb-docker-compose-flask$ eb create docker-compose-tutorial
   ```

   Elastic Beanstalk tarda aproximadamente cinco minutos en crear el entorno e implementar la aplicación multicontenedor.

## Paso 4: probar la aplicación en Elastic Beanstalk
<a name="docker-compose-quickstart-run-eb-ap"></a>

Cuando finalice el proceso de creación del entorno, abra el sitio web con **eb open**.

```
~/eb-docker-compose-flask$ eb open
```

¡Genial\! Ha implementado una aplicación Docker Compose multicontenedor con Elastic Beanstalk. Se abre una ventana del navegador con el nombre de dominio creado para su aplicación. Debería ver el mensaje de su aplicación Flask, enviado a través del proxy inverso nginx.

## Paso 5: Eliminar
<a name="docker-compose-quickstart-cleanup"></a>

Cuando termine de trabajar con la aplicación, puede terminar el entorno. Elastic Beanstalk AWS cancela todos los recursos asociados a su entorno.

Utilice el comando siguiente de la CLI de EB para terminar su entorno de Elastic Beanstalk.

```
~/eb-docker-compose-flask$ eb terminate
```

## AWS recursos para su aplicación
<a name="docker-compose-quickstart-eb-resources"></a>

Acaba de crear una aplicación de instancia única que ejecuta contendores múltiples. Sirve como una aplicación de muestra sencilla con una sola instancia de EC2, por lo que no requiere equilibrio de carga ni escalado automático. Para las aplicaciones de instancia única, Elastic Beanstalk crea los siguientes recursos: AWS 
+ **EC2 instance (Instancia de EC2)**: máquina virtual de Amazon EC2 configurada para ejecutar aplicaciones web en la plataforma que elija.

  Cada plataforma ejecuta un conjunto distinto de software, archivos de configuración y scripts compatibles con una determinada versión de lenguaje, marco y contenedor web (o una combinación de ellos). La mayoría de las plataformas utilizan Apache o nginx como un proxy inverso que procesa el tráfico web delante de la aplicación web, reenvía las solicitudes a esta, administra los recursos estáticos y genera registros de acceso y errores.
+ **Instance security group (Grupo de seguridad de la instancia)**: grupo de seguridad de Amazon EC2 configurado para permitir el tráfico entrante en el puerto 80. Este recurso permite que el tráfico HTTP procedente del equilibrador de carga llegue a la instancia de EC2 en la que se ejecuta la aplicación web. De forma predeterminada, el tráfico no está permitido en otros puertos.
+ **Bucket de Amazon S3**: ubicación de almacenamiento para el código fuente, los registros y otros artefactos que se crean al utilizar Elastic Beanstalk.
+ ** CloudWatch Alarmas de Amazon**: dos CloudWatch alarmas que monitorean la carga de las instancias de su entorno y se activan si la carga es demasiado alta o demasiado baja. Cuando se activa una alarma, en respuesta, el grupo de escalado automático aumenta o reduce los recursos.
+ **CloudFormation pila**: Elastic CloudFormation Beanstalk se utiliza para lanzar los recursos de su entorno y propagar los cambios de configuración. Los recursos se definen en una plantilla que puede verse en la [consola de CloudFormation](https://console.aws.amazon.com/cloudformation).
+  **Nombre de dominio***: un nombre de dominio que se dirige a su aplicación web en el formulario. {{subdomain}} {{region}}.elasticbeanstalk.com*. 

Elastic Beanstalk administra todos estos recursos. Cuando termina su entorno, Elastic Beanstalk termina todos los recursos que este contiene. La aplicación Docker Compose ejecuta contenedores múltiples en una única instancia de EC2, y Elastic Beanstalk gestiona la orquestación automáticamente.

## Siguientes pasos
<a name="docker-compose-quickstart-next-steps"></a>

Una vez que disponga de un entorno que ejecute una aplicación, podrá implementar una nueva versión de la aplicación o una aplicación distinta en cualquier momento. La implementación de una nueva versión de la aplicación es una tarea muy rápida, ya que no se requiere aprovisionar ni reiniciar instancias EC2. También puede explorar el nuevo entorno con la consola de Elastic Beanstalk. Para ver los pasos detallados, consulte [Explore your environment](GettingStarted.md#GettingStarted.Explore) en el capítulo *Getting started* de esta guía.

Después de que implemente una aplicación de muestra o dos y esté listo para empezar a desarrollar y poner en funcionamiento las aplicaciones Docker Compose de forma local, consulte [Preparación de la imagen de Docker para implementarla en Elastic Beanstalk](single-container-docker-configuration.md). 

## Implementar con la consola de Elastic Beanstalk
<a name="docker-compose-quickstart-console"></a>

También puede utilizar la consola de Elastic Beanstalk para lanzar una aplicación Docker Compose. Cree un archivo ZIP que contenga su archivo `docker-compose.yml` y todos los directorios y archivos asociados y cárguelo cuando cree una nueva aplicación. Para ver los pasos detallados, consulte [Create an example application](GettingStarted.md#GettingStarted.CreateApp) en el capítulo *Getting Started* de esta guía.