

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.

# Configuración de entornos Docker de Elastic Beanstalk
<a name="create_deploy_docker.container.console"></a>

En este capítulo se explica la información de configuración adicional para todas las ramificaciones de la plataforma Docker compatibles, incluida la ramificación de la plataforma Docker administrada por ECS. A menos que se identifique una ramificación de la plataforma o un componente de ramificación de la plataforma específicos en una sección, se aplica a todos los entornos que ejecutan plataformas Docker compatibles y Docker administradas por ECS. 

**nota**  
Si su entorno Elastic Beanstalk utiliza una versión de la plataforma Docker AMI de Amazon Linux (anterior a Amazon Linux 2), asegúrese de leer la información adicional en [Configuración de Docker en la AMI de Amazon Linux (anterior a Amazon Linux 2)](#docker-alami).

**Topics**
+ [Configuración de software en entornos de Docker](#docker-software-config)
+ [Referencia a variables de entorno en contenedores](#docker-env-cfg.env-variables)
+ [Uso de la característica de interpolación para variables de entorno con Docker Compose](#docker-env-cfg.env-variables-dc-interpolate)
+ [Creación de registros para informes de estado avanzados con Docker Compose](#docker-env-cfg.healthd-logging)
+ [Registro personalizado del contenedor de Docker con Docker Compose](#docker-env-cfg.dc-customized-logging)
+ [Imágenes de Docker](#docker-images)
+ [Configuración de actualizaciones administradas para entornos de Docker](#docker-managed-updates)
+ [Espacios de nombres de la configuración de Docker](#docker-namespaces)
+ [Configuración de Docker en la AMI de Amazon Linux (anterior a Amazon Linux 2)](#docker-alami)

## Configuración de software en entornos de Docker
<a name="docker-software-config"></a>

Puede utilizar la consola de Elastic Beanstalk para configurar el software que se ejecuta en las instancias del entorno.

**Para configurar el entorno Docker en la consola de Elastic Beanstalk**

1. Abra la consola de [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) y, **en** la lista Regiones, seleccione su. Región de AWS

1. En el panel de navegación, elija **Environments** (Entornos) y, a continuación, elija el nombre del entorno en la lista.

1. En el panel de navegación, elija **Configuración**.

1. En la categoría de configuración **Actualizaciones, supervisión y registro**, seleccione **Edición de**.

1. Realice los cambios de configuración necesarios.

1. Para guardar los cambios, elija **Aplicar** en la parte inferior de la página.

Para obtener información sobre cómo configurar el software en cualquier entorno, consulte [Configuración de las variables de entorno y otras opciones de software](environments-cfg-softwaresettings.md). En las siguientes secciones se aborda información específica de Docker.

### Opciones de contenedor
<a name="docker-software-config.container"></a>

La sección **Container options (Opciones de contenedor)** contiene opciones específicas de la plataforma. Para los entornos de Docker, le permite elegir si su entorno incluirá o no el servidor proxy NGINX.

**Entornos con Docker Compose**  
Si administra su entorno de Docker con Docker Compose, Elastic Beanstalk presupone que va a ejecutar un servidor proxy como contenedor. Por lo tanto, Elastic Beanstalk establece el valor **None (Ninguno)** en la opción **Proxy server (Servidor proxy)** y no proporciona una configuración NGINX.

**nota**  
Incluso si selecciona **NGINX** como servidor proxy, esta configuración se omite en un entorno con Docker Compose. La opción **Proxy server (Servidor proxy)** seguirá teniendo el valor predeterminado **None (Ninguno)**. 

Como el proxy del servidor web NGINX está deshabilitado para la plataforma de Docker en Amazon Linux 2 con Docker Compose, debe seguir las instrucciones para generar registros para informes de estado mejorados. Para obtener más información, consulte [Creación de registros para informes de estado avanzados con Docker Compose](#docker-env-cfg.healthd-logging).

### Propiedades de entorno (variables de entorno)
<a name="docker-software-config.env"></a>

Puede utilizar las propiedades del entorno (también conocidas como variables de entorno) para transferir valores, como puntos de conexión, ajustes de depuración y otros datos, a su aplicación. La sección **Entorno de aplicación** de la consola le permite especificar variables de entorno en las instancias de EC2 que ejecutan la aplicación. Las variables de entorno se transfieren como pares de clave-valor a la aplicación.

El código de la aplicación que se ejecuta en un contenedor puede hacer referencia a una variable de entorno por su nombre y leer su valor. El código fuente que lee estas variables de entorno variará en función del lenguaje de programación. Encontrará instrucciones para leer los valores de las variables de entorno en los lenguajes de programación que son compatibles con las plataformas administradas por Elastic Beanstalk en el tema correspondiente a la plataforma de que se trate. Para obtener una lista de enlaces a estos temas, consulte [Configuración de las variables de entorno y otras opciones de software](environments-cfg-softwaresettings.md).

**Secretos y parámetros en las variables de entorno de Elastic Beanstalk**  
Elastic Beanstalk ofrece la posibilidad de AWS Secrets Manager hacer AWS Systems Manager referencia a los datos de variables de entorno y almacenarlos en parámetros. Se trata de una opción segura para que su aplicación acceda de forma nativa a los secretos y parámetros almacenados por estos servicios sin tener que gestionar las llamadas a la API de estos. Sus plataformas Docker administradas por ECS o Elastic Beanstalk deben ser una versión publicada a partir del [26 de marzo de 2025](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2025-03-26-windows.html) para admitir esta característica. Para obtener más información sobre cómo usar las variables de entorno para hacer referencia a secretos, consulte [Cómo obtener secretos y parámetros de las variables de entorno de Elastic Beanstalk](AWSHowTo.secrets.env-vars.md).

**Entornos con Docker Compose**  
Si administra su entorno de Docker con Docker Compose, debe realizar alguna configuración adicional para recuperar las variables de entorno en los contenedores. Para que los ejecutables que se ejecutan en su contenedor tengan acceso a estas variables de entorno, debe hacer referencia a ellas en el archivo `docker-compose.yml`. Para obtener más información, consulte [Referencia a variables de entorno en contenedores](#docker-env-cfg.env-variables). 

## Referencia a variables de entorno en contenedores
<a name="docker-env-cfg.env-variables"></a>

Si utiliza la herramienta Docker Compose en la plataforma de Docker en Amazon Linux 2, Elastic Beanstalk genera un archivo de entorno de Docker Compose llamado `.env` en el directorio raíz del proyecto de aplicación. Este archivo almacena las variables de entorno que ha configurado para Elastic Beanstalk.

**nota**  
 Si incluye un archivo `.env` en el paquete de la aplicación, Elastic Beanstalk no generará un archivo `.env`. 

Para que un contenedor haga referencia a las variables de entorno que define en Elastic Beanstalk, debe seguir uno o ambos de estos enfoques de configuración.
+ Agregue el archivo `.env` generado por Elastic Beanstalk a la opción de configuración `env_file` del archivo `docker-compose.yml`.
+ Defina directamente las variables de entorno en el archivo `docker-compose.yml`.

Los siguientes archivos proporcionan un ejemplo. El archivo `docker-compose.yml` de ejemplo muestra ambos enfoques. 
+ Si define las propiedades del entorno `DEBUG_LEVEL=1` y `LOG_LEVEL=error`, Elastic Beanstalk genera el siguiente archivo `.env` automáticamente:

  ```
  DEBUG_LEVEL=1
  LOG_LEVEL=error
  ```
+ En este archivo `docker-compose.yml`, la opción de configuración `env_file` apunta al archivo `.env` y también define la variable de entorno `DEBUG=1` directamente en el archivo `docker-compose.yml`.

  ```
  services:
    web:
      build: .
      environment:
        - DEBUG=1
      env_file:
        - .env
  ```

**Notas**  
Si establece la misma variable de entorno en ambos archivos, la variable definida en el archivo `docker-compose.yml` prevalece sobre la variable definida en el archivo `.env`.
Tenga cuidado de no dejar espacios entre el signo igual (=) y el valor asignado a la variable para evitar que se agreguen espacios a la cadena.

Para obtener más información sobre las variables de entorno en Docker Compose, consulte [Environment variables in Compose](https://docs.docker.com/compose/environment-variables/). 

## Uso de la característica de interpolación para variables de entorno con Docker Compose
<a name="docker-env-cfg.env-variables-dc-interpolate"></a>

A partir de la versión de plataforma del [28 de julio de 2023](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2023-07-28-al2.html), la ramificación de la plataforma *Docker Amazon Linux 2* ofrece la característica de *interpolación* de Docker Compose. Con esta característica, los valores de un archivo de Compose se pueden establecer mediante variables e interpolarlos en el tiempo de ejecución. Para obtener más información sobre esta característica, consulte [Interpolación](https://docs.docker.com/compose/compose-file/12-interpolation/) en el sitio web de documentación de Docker.

**importante**  
Si quiere utilizar esta característica con sus aplicaciones, tenga en cuenta que tendrá que implementar un enfoque que utilice enlaces de plataforma.  
Esto es necesario debido a una mitigación que implementamos en el motor de la plataforma. La mitigación garantiza la compatibilidad con versiones anteriores para los clientes que no conocen la nueva característica de interpolación y que ya tienen aplicaciones que utilizan variables de entorno con el carácter `$`. El motor de plataforma actualizado evita la interpolación de forma predeterminada al reemplazar el personaje `$` por caracteres `$$`.

El siguiente es un ejemplo de un script de enlace de plataforma que puede configurar para permitir el uso de la característica de interpolación.

```
#!/bin/bash

: '
example data format in .env file
key1=value1
key2=value2
'
envfile="/var/app/staging/.env"
tempfile=$(mktemp)

while IFS= read -r line; do
  # split each env var string at '='
  split_str=(${line//=/ })
  if [ ${#split_str[@]} -eq 2 ]; then
    # replace '$$' with '$'
    replaced_str=${split_str[1]//\$\$/\$}
    # update the value of env var using ${replaced_str}
    line="${split_str[0]}=${replaced_str}"
  fi
  # append the updated env var to the tempfile
  echo "${line}" ≫"${tempfile}"
done < "${envfile}"
# replace the original .env file with the tempfile
mv "${tempfile}" "${envfile}"
```

Coloque los enlaces de la plataforma en estos dos directorios:
+ `.platform/confighooks/predeploy/`
+ `.platform/hooks/predeploy/`

Para obtener más información, consulte [Enlaces de la plataforma](platforms-linux-extend.hooks.md) en el tema *Ampliar las plataformas Linux* de esta guía.

## Creación de registros para informes de estado avanzados con Docker Compose
<a name="docker-env-cfg.healthd-logging"></a>

 El [agente de salud de Elastic Beanstalk](health-enhanced.md#health-enhanced-agent) proporciona métricas de estado del sistema operativo y de las aplicaciones para entornos de Elastic Beanstalk. Se basa en los formatos de registro del servidor web que transmiten información en un formato específico.

Elastic Beanstalk presupone que ejecuta un proxy de servidor web como un contenedor. Por consiguiente, el proxy del servidor web NGINX está deshabilitado para los entornos de Docker que ejecutan Docker Compose. Debe configurar el servidor para que escriba registros en la ubicación y con el formato que utiliza el agente de estado de Elastic Beanstalk. De esta forma, podrá aprovechar al máximo los informes de estado mejorados, aunque el proxy del servidor web esté deshabilitado.

Para obtener instrucciones al respecto, consulte [Configuración de los registros de servidor web](health-enhanced-serverlogs.md#health-enhanced-serverlogs.configure) 

## Registro personalizado del contenedor de Docker con Docker Compose
<a name="docker-env-cfg.dc-customized-logging"></a>

Para solucionar problemas de manera eficiente y supervisar sus servicios en contenedores, puede [solicitar registros de instancias](using-features.logging.md) de Elastic Beanstalk desde la consola de administración del entorno o desde la CLI de EB. Los registros de instancias se componen de registros de paquetes y registros de cola, combinados y empaquetados, para permitirle ver registros y eventos recientes de una manera eficiente y rápida.

 Elastic Beanstalk crea los directorios de registro en la instancia del contenedor, uno para cada servicio definido en el archivo `docker-compose.yml`, en `/var/log/eb-docker/containers/<service name>`. Si utiliza la característica Docker Compose en la plataforma de Docker en Amazon Linux 2, puede montar estos directorios en la ubicación dentro de la estructura de archivos del contenedor donde se escriben los registros. Si monta directorios de registro para escribir datos de registro, Elastic Beanstalk podrá recopilar datos de registro de estos directorios.

**Cómo configurar los archivos de registros del servicio como archivos de cola y registros de paquetes recuperables**

1. Edite el archivo `docker-compose.yml`.

1. Debajo de la clave `volumes` de su servicio, agregue un montaje de enlace de la manera siguiente:

    ` "${EB_LOG_BASE_DIR}/<service name>:<log directory inside container> ` 

   En el siguiente archivo `docker-compose.yml` de ejemplo:
   +  `nginx-proxy` es *<service name>* 
   +  `/var/log/nginx` es *<log directory inside container>* 

   ```
   services:
     nginx-proxy:
       image: "nginx"
       volumes:
         - "${EB_LOG_BASE_DIR}/nginx-proxy:/var/log/nginx"
   ```


+  El directorio `var/log/nginx` contiene los registros del servicio *nginx-proxy* en el contenedor y se corresponde con el directorio `/var/log/eb-docker/containers/nginx-proxy` del host. 
+  Todos los registros de este directorio ahora se pueden recuperar como registros de paquete y cola a través de la funcionalidad [Solicitar registros de instancia](using-features.logging.md) de Elastic Beanstalk. 



**Notas**  
*\$1\$1EB\$1LOG\$1BASE\$1DIR\$1* es una variable de entorno establecida por Elastic Beanstalk con el valor `/var/log/eb-docker/containers`.
Elastic Beanstalk crea automáticamente el directorio `/var/log/eb-docker/containers/<service name>` para cada servicio del archivo `docker-compose.yml`.

## Imágenes de Docker
<a name="docker-images"></a>

Las ramificaciones de la plataforma Docker administradas por Docker y ECS para Elastic Beanstalk admiten el uso de imágenes de Docker almacenadas en un repositorio de imágenes en línea público o privado.

Especifique las imágenes por su nombre en `Dockerrun.aws.json`. Tenga en cuenta estas convenciones:
+ Las imágenes de los repositorios oficiales de Docker Hub utilizan un solo nombre (por ejemplo, `ubuntu` o `mongo`).
+ Las imágenes de otros repositorios de Docker Hub se identifican con un nombre de organización (por ejemplo, `amazon/amazon-ecs-agent`).
+ Las imágenes de otros repositorios online se designan además con un nombre de dominio (por ejemplo, `quay.io/assemblyline/ubuntu` o `account-id.dkr.ecr.us-east-2.amazonaws.com/ubuntu:trusty`). 

En entornos que utilizan únicamente la plataforma Docker, también puede crear su propia imagen durante la creación del entorno con un archivo Dockerfile. Para obtener más información, consulte [Creación de imágenes personalizadas con un Dockerfile](single-container-docker-configuration.md#single-container-docker-configuration.dockerfile). La plataforma Docker administrada por ECS no admite esta funcionalidad.

## Configuración de actualizaciones administradas para entornos de Docker
<a name="docker-managed-updates"></a>

Con las [actualizaciones de plataforma administradas](environment-platform-update-managed.md), puede configurar el entorno para que se actualice automáticamente a la última versión de una plataforma de manera programada.

En el caso de los entornos de Docker, es posible que decida si una actualización de plataforma automática debe suceder en varias versiones de Docker, si la nueva versión de la plataforma incluye una nueva versión de Docker. Elastic Beanstalk admite actualizaciones de plataformas administradas en todas las versiones de Docker cuando se actualiza desde un entorno que ejecuta una versión de plataforma Docker más reciente que 2.9.0. Cuando una nueva versión de la plataforma incluye una nueva versión de Docker, Elastic Beanstalk aumenta el número de versión de actualización secundaria. Por lo tanto, para permitir las actualizaciones de plataforma administradas en diferentes versiones de Docker, habilítelas para las actualizaciones de versiones secundarias y de parche. Para evitar las actualizaciones de plataforma administradas en diferentes versiones de Docker, habilítelas para que solo apliquen las actualizaciones de versión de parche.

Por ejemplo, el siguiente [archivo de configuración](ebextensions.md) habilita las actualizaciones de plataforma administradas a las 9:00 h UTC cada martes para las actualizaciones de versiones secundarias y de parche, lo que permite las actualizaciones administradas en diferentes versiones de Docker:

**Example managed-platform-update.ebextensions/ .config**  

```
option_settings:
  aws:elasticbeanstalk:managedactions:
    ManagedActionsEnabled: true
    PreferredStartTime: "Tue:09:00"
  aws:elasticbeanstalk:managedactions:platformupdate:
    UpdateLevel: minor
```

En los entornos que ejecutan versiones de plataforma de Docker 2.9.0 o anteriores, Elastic Beanstalk nunca realiza las actualizaciones de plataforma administradas si la nueva versión de plataforma incluye una nueva versión de Docker.

## Espacios de nombres de la configuración de Docker
<a name="docker-namespaces"></a>

Puede usar un [archivo de configuración](ebextensions.md) para definir opciones de configuración y realizar otras tareas de configuración en las instancias durante las implementaciones. Las opciones de configuración pueden ser [específicas de la plataforma](command-options-specific.md) o aplicarse a [todas las plataformas](command-options-general.md) del servicio de Elastic Beanstalk en su conjunto. Las opciones de configuración se organizan en *espacios de nombres*.

**nota**  
 Esta información solo se aplica al entorno de Docker que no ejecuta Docker Compose. Esta opción tiene un comportamiento diferente con los entornos de Docker que ejecutan Docker Compose. Para obtener más información sobre los servicios proxy con Docker Compose, consulte [Opciones de contenedor](#docker-software-config.container). 

La plataforma Docker admite las opciones de los siguientes espacios de nombres, además de las [opciones admitidas para todos los entornos de Elastic Beanstalk](command-options-general.md):
+ `aws:elasticbeanstalk:environment:proxy`: Elija el servidor proxy para su entorno. Docker admite que se ejecute Nginx o ningún servidor proxy.

El siguiente archivo de configuración de ejemplo configura un entorno de Docker de modo que no ejecute ningún servidor proxy.

**Example .ebextensions/docker-settings.config**  

```
option_settings:
  aws:elasticbeanstalk:environment:proxy:
    ProxyServer: none
```

## Configuración de Docker en la AMI de Amazon Linux (anterior a Amazon Linux 2)
<a name="docker-alami"></a>

Si su entorno de Elastic Beanstalk Docker utiliza una versión de la plataforma AMI de Amazon Linux (anterior a Amazon Linux 2), lea la información adicional de esta sección.

### Uso de un archivo de autenticación para un repositorio privado
<a name="docker-alami.images-private"></a>

Esta información le interesa si está [usando imágenes de un repositorio privado](docker-configuration.remote-repo.md). A partir de la versión 1.7 de Docker, el comando **docker login** cambió el nombre del archivo de autenticación y el formato del archivo. Las versiones de la plataforma Docker en la AMI de Amazon Linux (anteriores a Amazon Linux 2) requieren el archivo de configuración anterior en formato `~/.dockercfg`.

Con la versión 1.7 de Docker y otras posteriores, el comando **docker login** crea el archivo de autenticación en `~/.docker/config.json` con el siguiente formato.

```
{
    "auths":{
      "server":{
        "auth":"key"
      }
    }
  }
```

Con la versión 1.6.2 de Docker y anteriores, el comando **docker login** crea el archivo de autenticación en `~/.dockercfg` con el siguiente formato.

```
{
    "server" :
    {
      "auth" : "auth_token",
      "email" : "email"
    }
  }
```

Para convertir un archivo `config.json`, elimine la clave `auths` externa, añada una clave `email` y adapte el documento JSON para que se ajuste al formato antiguo.

En las versiones de la plataforma Docker de Amazon Linux 2, Elastic Beanstalk utiliza el nombre y el formato más recientes del archivo de autenticación. Si está utilizando una versión de plataforma Docker de Amazon Linux 2, puede usar el archivo de autenticación que el comando **docker login** crea sin aplicar ninguna conversión.

### Configuración de volúmenes de almacenamiento adicionales
<a name="docker-alami.volumes"></a>

Para mejorar el rendimiento de la AMI de Amazon Linux, Elastic Beanstalk configura dos volúmenes de almacenamiento de Amazon EBS para las instancias de Amazon EC2 del entorno de Docker. Además del volumen raíz que se aprovisiona para todos los entornos de Elastic Beanstalk, se aprovisiona un segundo volumen de 12 GB llamado `xvdcz` para el almacenamiento de imágenes en entornos de Docker.

Si necesita más espacio de almacenamiento o un mayor número de IOPS para las imágenes de Docker, puede personalizar el volumen de almacenamiento de imágenes utilizando la opción de configuración `BlockDeviceMapping` del espacio de nombres [aws:autoscaling:launchconfiguration](command-options-general.md#command-options-general-autoscalinglaunchconfiguration).

Por ejemplo, el siguiente [archivo de configuración](ebextensions.md) aumenta el tamaño del volumen de almacenamiento a 100 GB con 500 IOPS provisionadas:

**Example .ebextensions/blockdevice-xvdcz.config**  

```
option_settings:
  aws:autoscaling:launchconfiguration:
    BlockDeviceMappings: /dev/xvdcz=:100::io1:500
```

Si utiliza la opción `BlockDeviceMappings` para configurar volúmenes adicionales para la aplicación, debería incluir un mapeo de `xvdcz` para asegurarse de que se ha creado. En el siguiente ejemplo, se configuran dos volúmenes: el volumen de almacenamiento de imágenes `xvdcz` con la configuración predeterminada y un volumen de aplicaciones adicional de 24 GB llamado `sdh`:

**Example .ebextensions/blockdevice-sdh.config**  

```
option_settings:
  aws:autoscaling:launchconfiguration:
    BlockDeviceMappings: /dev/xvdcz=:12:true:gp2,/dev/sdh=:24
```

**nota**  
Cuando cambie la configuración de este espacio de nombres, Elastic Beanstalk sustituirá todas las instancias del entorno por instancias que ejecuten la nueva configuración. Para obtener más información, consulte [Cambios de configuración](environments-updating.md).