Configuración de Docker administrado por ECS - AWS Elastic Beanstalk

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 Docker administrado por ECS

Dockerrun.aws.json es un archivo de configuración de Elastic Beanstalk que describe cómo implementar un conjunto de contenedores de Docker alojados en un clúster ECS en un entorno de Elastic Beanstalk. La plataforma Elastic Beanstalk crea una definición de tarea de ECS, que incluye una definición de contenedor de ECS. Estas definiciones se describen en el archivo de configuración Dockerrun.aws.json.

La definición de contenedor del archivo Dockerrun.aws.json describe los contenedores que se van a implementar en cada instancia de Amazon EC2 del clúster de ECS. En este caso, una instancia de Amazon EC2 también se denomina instancia de contenedor de host, porque aloja los contenedores de Docker. El archivo de configuración también describe los volúmenes de datos que se deben crear en la instancia de contenedor de host para el montaje de los contenedores de Docker. Para obtener más información y un diagrama de los componentes de un entorno de Docker gestionado por ECS en Elastic Beanstalk, consulte la sección Plataforma Docker administrada por ECS anteriormente en este capítulo.

Se puede usar un archivo Dockerrun.aws.json tal como está o incluirlo en un solo archivo junto con el código fuente adicional. El código fuente archivado con un Dockerrun.aws.json se implementa en instancias de contenedor de Amazon EC2; y está accesible en el directorio /var/app/current/.

Dockerrun.aws.json v2

En el archivo Dockerrun.aws.json se incluyen las siguientes secciones:

AmazonWebServiceEBDockerrunVersion

Especifica el número de versión como el valor 2 para los entornos Docker administrados por ECS.

volumes

Crea volúmenes a partir de carpetas de la instancia de contenedor de Amazon EC2 o a partir del paquete de código fuente (implementado en /var/app/current). Monte estos volúmenes en rutas que estén dentro de los contenedores de Docker mediante mountPoints en la sección containerDefinitions.

containerDefinitions

Una matriz de definiciones de contenedor.

autenticación (opcional)

La ubicación en Amazon S3 de un archivo .dockercfg que contiene los datos de autenticación de un repositorio privado.

Las secciones Definición de contenedor y Volúmenes de Dockerrun.aws.json utilizan el mismo formato que las secciones correspondientes de un archivo de definición de tareas de Amazon ECS. Para obtener más información sobre el formato de definición de tarea y una lista completa de los parámetros de definición de tareas, consulte Definiciones de tareas de Amazon ECS en la Guía para el desarrollador del servicio de contenedores de Amazon Elastic.

Formato del volumen

El parámetro volumen crea volúmenes a partir de carpetas de la instancia de contenedor de Amazon EC2 o a partir del paquete de código fuente (implementado en /var/app/current).

Los volúmenes se especifican en el siguiente formato:

"volumes": [ { "name": "volumename", "host": { "sourcePath": "/path/on/host/instance" } } ],

Monte estos volúmenes en rutas que estén dentro de los contenedores de Docker mediante mountPoints en la definición de contenedor.

Elastic Beanstalk configura volúmenes adicionales para los logs, uno para cada contenedor. Estos los deben montar los contenedores de Docker para poder escribir logs en la instancia del host.

Para obtener más información, consulte el campo mountPoints de la sección Formato de definición de contenedor que aparece a continuación.

Formato de definición de contenedor

Los siguientes ejemplos muestran un subconjunto de parámetros que se utilizan habitualmente en la sección Definiciones de contenedor. Hay disponibles otros parámetros opcionales.

La plataforma Beanstalk crea una definición de tarea de ECS, que incluye una definición de contenedor de ECS. Beanstalk admite un subconjunto de parámetros para la definición del contenedor de ECS. Para obtener más información, consulte Definiciones de contenedor en la Guía para desarrolladores de Amazon Elastic Container Service.

Un archivo Dockerrun.aws.json contiene una matriz de uno o varios objetos de definición de contenedor con los siguientes campos:

name

El nombre del contenedor. Consulte Standard Container Definition Parameters (Parámetros de definición de contenedores estándar) para obtener información sobre la longitud máxima y los caracteres permitidos.

image

El nombre de una imagen de Docker en un repositorio Docker insertado desde el que va a crear un contenedor Docker. 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 cualifican más con un nombre de dominio (por ejemplo, quay.io/assemblyline/ubuntu).

environment

Una matriz de variables de entorno que se va a pasar al contenedor.

Por ejemplo, la siguiente entrada define una variable de entorno con el nombre Container y el valor PHP:

"environment": [ { "name": "Container", "value": "PHP" } ],
essential

Es True si la tarea se debe detener si el contenedor produce un error. Los contenedores Nonessential puedan terminar o bloquearse sin que ello afecte al resto de los contenedores de la instancia.

memory

Cantidad de memoria de la instancia de contenedor que se va a reservar para el contenedor. Especifique un entero distinto de cero para uno o ambos parámetros memory o memoryReservation en las definiciones de contenedor.

memoryReservation

El límite flexible (en MiB) de memoria que reservar para el contenedor. Especifique un entero distinto de cero para uno o ambos parámetros memory o memoryReservation en las definiciones de contenedor.

mountPoints

Volúmenes de la instancia de contenedor de Amazon EC2; que se van a montar y la ubicación en el sistema de archivos del contenedor de Docker en la que se van a montar. Cuando se montan volúmenes que incluyen contenido de aplicaciones, el contenedor puede leer los datos que se cargan en el paquete de código fuente. Cuando se montan volúmenes de logs para escribir datos de log, Elastic Beanstalk puede recopilar datos de log de estos volúmenes.

Elastic Beanstalk crea volúmenes de logs en la instancia de contenedor, uno para cada contenedor de Docker, en /var/log/containers/containername. Estos volúmenes se denominan awseb-logs-containername y deben montarse en la ubicación dentro de la estructura de archivos del contenedor donde se escriben los logs.

Por ejemplo, el siguiente punto de montaje asigna la ubicación de los registros de nginx en el contenedor al volumen generado por Elastic Beanstalk para el contenedor nginx-proxy.

{ "sourceVolume": "awseb-logs-nginx-proxy", "containerPath": "/var/log/nginx" }
portMappings

Asigna puertos de red del contenedor a puertos del host.

links

Lista de contenedores que se van a vincular. Los contenedores vinculados pueden detectarse entre sí y comunicarse de forma segura.

volumesFrom

Esta opción le permite montar todos los volúmenes desde un contenedor diferente. Por ejemplo, para montar volúmenes desde un contenedor con el nombre web:

"volumesFrom": [ { "sourceContainer": "web" } ],

Formato de autenticación: uso de imágenes de un repositorio privado

La sección authentication contiene los datos de autenticación de un repositorio privado. Esta entrada es opcional.

Añada la información sobre el bucket de Amazon S3; que contiene el archivo de autenticación en el parámetro authentication del archivo Dockerrun.aws.json. Asegúrese de que el parámetro authentication contiene un bucket de Amazon S3 y una clave válidos. El bucket de Amazon S3; debe estar alojado en la misma región que el entorno que lo está utilizando. Elastic Beanstalk no descargará archivos de los buckets de Amazon S3 alojados en otras regiones.

Usa el siguiente formato:

"authentication": { "bucket": "DOC-EXAMPLE-BUCKET", "key": "mydockercfg" },

Para obtener información sobre cómo generar y cargar el archivo de autenticación, consulte Uso de imágenes de un repositorio privado en el tema Configuración del entorno de este capítulo.

Ejemplo Dockerrun.aws.json v2

El siguiente fragmento es un ejemplo que ilustra la sintaxis del archivo Dockerrun.aws.json para una instancia con dos contenedores.

{ "AWSEBDockerrunVersion": 2, "volumes": [ { "name": "php-app", "host": { "sourcePath": "/var/app/current/php-app" } }, { "name": "nginx-proxy-conf", "host": { "sourcePath": "/var/app/current/proxy/conf.d" } } ], "containerDefinitions": [ { "name": "php-app", "image": "php:fpm", "environment": [ { "name": "Container", "value": "PHP" } ], "essential": true, "memory": 128, "mountPoints": [ { "sourceVolume": "php-app", "containerPath": "/var/www/html", "readOnly": true } ] }, { "name": "nginx-proxy", "image": "nginx", "essential": true, "memory": 128, "portMappings": [ { "hostPort": 80, "containerPort": 80 } ], "links": [ "php-app" ], "mountPoints": [ { "sourceVolume": "php-app", "containerPath": "/var/www/html", "readOnly": true }, { "sourceVolume": "nginx-proxy-conf", "containerPath": "/etc/nginx/conf.d", "readOnly": true }, { "sourceVolume": "awseb-logs-nginx-proxy", "containerPath": "/var/log/nginx" } ] } ] }