Configuration Docker gérée par ECS - AWS Elastic Beanstalk

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Configuration Docker gérée par ECS

Dockerrun.aws.json est un fichier de configuration Elastic Beanstalk qui décrit comment déployer un ensemble de conteneurs Docker hébergés dans un cluster ECS dans un environnement Elastic Beanstalk. La plateforme Elastic Beanstalk crée une définition de tâche ECS, qui inclut une définition de conteneur ECS. Ces définitions sont décrites dans le fichier de configuration Dockerrun.aws.json.

La définition de conteneur contenue dans le fichier Dockerrun.aws.json décrit les conteneurs à déployer sur chaque instance Amazon EC2 du cluster ECS. Dans ce cas, une instance Amazon EC2 est également appelée instance de conteneur hôte, car elle héberge les conteneurs Docker. Le fichier de configuration décrit également les volumes de données à créer sur l'instance de conteneur hôte pour le montage des conteneurs Docker. Pour plus d'informations et un diagramme des composants d'un environnement Docker géré par ECS sur Elastic Beanstalk, consultez Plateforme Docker gérée par ECS plus haut dans ce chapitre.

Un fichier Dockerrun.aws.json peut être utilisé de façon autonome ou compressé avec un code source supplémentaire dans une archive unique. Le code source archivé dans un fichier Dockerrun.aws.json est déployé dans les instances de conteneur Amazon EC2 et accessible dans le répertoire /var/app/current/.

Dockerrun.aws.json v2

Le fichier Dockerrun.aws.json comprend les sections suivantes :

AWSEBDockerrunVersion

Spécifie le numéro de version comme valeur 2 pour les environnements Docker gérés par ECS.

volumes

Permet de créer des volumes à partir de dossiers de l'instance de conteneur Amazon EC2 ou à partir du bundle de fichiers source (déployé sur /var/app/current). Montez ces volumes sur les chemins de vos conteneurs Docker à l'aide des mountPoints de la section containerDefinitions.

containerDefinitions

Un tableau de définitions de conteneurs.

authentification (facultatif)

Dans Amazon S3, emplacement d'un fichier .dockercfg contenant les données d'authentification pour un référentiel privé.

Les sections containerDefinitions et volumes du fichier Dockerrun.aws.json utilisent le même format que les sections correspondantes d'un fichier de définition de tâche Amazon ECS. Pour en savoir plus sur le format de définition de tâche et obtenir la liste complète des paramètres de définition de tâche, consultez Définitions des tâches Amazon ECS (français non garanti) dans le Guide du développeur Amazon Elastic Container Service.

Format de volume

Le paramètre volume crée des volumes soit à partir de dossiers dans l'instance de conteneur Amazon EC2, soit à partir de votre solution groupée source (déployée sur /var/app/current).

Les volumes sont spécifiés dans le format suivant :

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

Montez ces volumes sur les chemins de vos conteneurs Docker à l'aide des mountPoints de la définition de conteneur.

Elastic Beanstalk configure des volumes supplémentaires pour les journaux (un pour chaque conteneur). Ils doivent être montés par vos conteneurs Docker afin d'écrire les journaux dans l'instance de l'hôte.

Pour plus de détails, consultez le champ mountPoints dans la section Format de définition de conteneur qui suit.

Format des définitions de conteneur

Les exemples suivants illustrent un sous-ensemble de paramètres fréquemment utilisés dans la section containerDefinitions. D'autres paramètres facultatifs sont disponibles.

La plateforme Beanstalk crée une définition de tâche ECS, qui inclut une définition de conteneur ECS. Beanstalk prend en charge un sous-ensemble de paramètres pour la définition du conteneur ECS. Pour plus d'informations, consultez Définitions de conteneurs dans le Guide du développeur Amazon Elastic Container Service.

Un fichier Dockerrun.aws.json contient un tableau d'un ou plusieurs objets de définition de conteneur comportant les champs suivants :

nom

Nom du conteneur. Consultez Paramètres de définition de conteneur standards pour obtenir plus d'informations sur la longueur maximale et les caractères autorisés.

image

Nom d'une image Docker dans un référentiel Docker en ligne à partir de laquelle vous créez un conteneur Docker. Notez ces conventions :

  • Les images dans les référentiels officiels sur Docker Hub utilisent un nom unique (par exemple, ubuntu ou mongo).

  • Les images dans les autres référentiels sur Docker Hub sont qualifiées par un nom d'organisation (par exemple, amazon/amazon-ecs-agent.

  • Les images dans les autres référentiels en ligne sont qualifiées par un nom de domaine (par exemple, quay.io/assemblyline/ubuntu).

environment

Tableau des variables d'environnement à transmettre au conteneur.

Par exemple, l'entrée suivante définit une variable d'environnement avec le nom Container et la valeur PHP :

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

True si la tâche doit s'arrêter en cas d'échec du conteneur. Les conteneurs non essentiels peuvent s'arrêter ou se bloquer sans conséquences sur les autres conteneurs de l'instance.

memory

Quantité de mémoire sur l'instance de conteneur à réserver pour le conteneur. Spécifiez un entier non nul pour l'un des paramètres memory ou memoryReservation (ou les deux) dans les définitions de conteneur.

memoryReservation

La limite flexible (en MiB) de mémoire à réserver pour le conteneur. Spécifiez un entier non nul pour l'un des paramètres memory ou memoryReservation (ou les deux) dans les définitions de conteneur.

mountPoints

Volumes à monter à partir de l'instance de conteneur Amazon EC2 et emplacement dans lequel ils doivent être montés dans le système de fichiers du conteneur Docker. Lorsque vous montez des volumes qui contiennent des contenus applicatifs, votre conteneur peut lire les données que vous chargez dans votre bundle source. Lorsque vous montez des volumes de journal pour écrire des données de journaux, Elastic Beanstalk peut collecter les données de journaux à partir de ces volumes.

Elastic Beanstalk crée les volumes de fichiers journaux sur l'instance de conteneur (un pour chaque conteneur Docker), à l'emplacement /var/log/containers/containername. Ces volumes sont nommés awseb-logs-containername et doivent être montés à l'emplacement où les journaux sont écrits dans le système de fichiers du conteneur.

Par exemple, le point de montage suivant mappe l'emplacement du journal nginx dans le conteneur sur le volume généré par Elastic Beanstalk pour le conteneur nginx-proxy.

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

Mappe les ports réseau du conteneur sur les ports de l'hôte.

links

Liste des conteneurs à lier les uns aux autres. Les conteneurs liés peuvent s'identifier entre eux et communiquer en toute sécurité.

volumesFrom

Montez tous les volumes à partir d'un autre conteneur. Par exemple, pour monter les volumes à partir d'un conteneur nommé web:

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

Format d'authentification : utilisation d'images à partir d'un référentiel privé

La section authentication contient les données d'authentification pour un référentiel privé. Cette entrée est facultative.

Ajoutez les informations relatives au compartiment Amazon S3 contenant le fichier d'authentification dans le paramètre authentication du fichier Dockerrun.aws.json. Assurez-vous que le paramètre authentication contient une clé et un compartiment Amazon S3 valides. Le compartiment Amazon S3 doit être hébergé dans la même région que l'environnement qui l'utilise. Elastic Beanstalk ne télécharge pas de fichiers à partir de compartiments Amazon S3 hébergés dans d'autres régions.

Utilise le format suivant :

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

Pour plus d'informations sur la génération et le chargement du fichier d'authentification, consultez Utilisation d'images à partir d'un référentiel privé dans la rubrique Configuration de l'environnement de ce chapitre.

Exemple de Dockerrun.aws.json v2

L'extrait suivant est un exemple illustrant la syntaxe du fichier Dockerrun.aws.json pour une instance avec deux conteneurs.

{ "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" } ] } ] }