Configuración de Docker administrado por ECS
Un archivo Dockerrun.aws.json
es un archivo JSON específico de Elastic Beanstalk que describe cómo implementar un conjunto de contenedores Docker como una aplicación de Elastic Beanstalk. Puede utilizar un archivo Dockerrun.aws.json
de la v2 para un entorno Docker administrado por ECS.
Dockerrun.aws.json
describe los contenedores que se van a implementar en cada instancia de contenedor (instancia Amazon EC2 que aloja contenedores de Docker) del entorno, así como los volúmenes de datos que se van a crear en la instancia del host para los contenedores que se van a montar.
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/
. Utilice la sección volumes
del archivo de configuración para proporcionar volúmenes de archivo para los contenedores de Docker que se ejecutan en la instancia del host. Utilice la sección mountPoints
de las definiciones de contenedor integradas para mapear estos volúmenes a puntos de montaje que pueden utilizar las aplicaciones de los contenedores de Docker.
Temas
Dockerrun.aws.json
v2
El archivo Dockerrun.aws.json
incluye tres secciones:
- AWSEBDockerrunVersion
-
Especifica el número de versión como el valor
2
para los entornos Docker administrados por ECS. - containerDefinitions
-
Una matriz de definiciones de contenedor, detalladas a continuación.
- 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 utilizandomountPoints
en la definición de contenedor.nota 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 Formato de definición de contenedor.
Los volúmenes se especifican en el siguiente formato:
"volumes": [ { "name": "
volumename
", "host": { "sourcePath": "/path/on/host/instance
" } } ], - autenticación
-
(opcional) La ubicación en Amazon S3 de un archivo
.dockercfg
que contiene los datos de autenticación de un repositorio privado. Usa el siguiente formato:"authentication": { "bucket": "
", "key": "DOC-EXAMPLE-BUCKET
mydockercfg
" },Para obtener más información, consulte Uso de imágenes de un repositorio privado.
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"
}
]
}
]
}
Uso de imágenes de un repositorio privado
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.
Para obtener información sobre cómo generar y cargar el archivo de autenticación, consulte Uso de imágenes de un repositorio privado.
Formato de definición de contenedor
Las secciones de 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.
Los siguientes ejemplos muestran un subconjunto de parámetros que se utilizan habitualmente. Hay disponibles otros parámetros opcionales. 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 Amazon ECS Task Definitions (Definiciones de tareas de Amazon ECS) en Amazon Elastic Container Service Developer Guide (Guía para el desarrollador del servicio de contenedores de Amazon Elastic).
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
omongo
). -
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 valorPHP
:"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
omemoryReservation
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
omemoryReservation
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/
. Estos volúmenes se denominancontainername
awseb-logs-
y deben montarse en la ubicación dentro de la estructura de archivos del contenedor donde se escriben los logs.containername
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" } ],