Configuration Docker - 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

Cette section décrit comment préparer votre image et votre conteneur Docker pour les déployer dans Elastic Beanstalk.

Environnement Docker avec Docker Compose

Cette section décrit comment préparer votre image et votre conteneur Docker pour les déployer dans Elastic Beanstalk. Toute application web que vous déployez sur Elastic Beanstalk dans un environnement Docker doit inclure un fichier docker-compose.yml si vous utilisez également l'outil Docker Compose. Vous pouvez déployer votre application web en tant que service conteneurisé sur Elastic Beanstalk en effectuant l'une des actions suivantes :

  • Créez un fichier docker-compose.yml afin de déployer une image Docker à partir d'un référentiel hébergé dans Elastic Beanstalk. Aucun autre fichier n'est requis si tous vos déploiements proviennent d'images dans des référentiels publics. (Si votre déploiement doit obtenir une image à partir d'un référentiel privé, vous devez inclure des fichiers de configuration supplémentaires pour l'authentification. Pour plus d'informations, consultez Utilisation d'images provenant d'un référentiel privé.) Pour de plus amples informations sur le fichier docker-compose.yml, veuillez consulter Compose file reference sur le site web Docker.

  • Créez un fichier Dockerfile pour permette à Elastic Beanstalk de créer et d'exécuter une image personnalisée. Ce fichier est facultatif. Cela dépend des besoins de votre déploiement. Pour de plus amples informations sur le fichier Dockerfile, veuillez consulter Dockerfile reference sur le site web Docker.

  • Créez un fichier .zip contenant vos fichiers d'application, toutes les dépendances du fichier d'application, le Dockerfile et le fichier docker-compose.yml. Si vous utilisez l'interface de ligne de commande (CLI) EB pour déployer votre application, elle crée un fichier .zip automatiquement. Les deux fichiers doivent être à la racine, ou au niveau supérieur, de l'archive .zip.

    Si vous utilisez uniquement un fichier docker-compose.yml pour déployer votre application, vous n'avez pas besoin de créer un fichier .zip.

Cette rubrique est une référence de syntaxe. Pour obtenir des procédures détaillées sur le lancement d'environnements Docker à l'aide d'Elastic Beanstalk, veuillez consulter Utilisation de la branche de plateforme Docker.

Pour en savoir plus sur Docker Compose et savoir comment l'installer, veuillez consulter les sites Docker Overview of Docker Compose et Install Docker Compose.

Note

Si vous n'utilisez pas Docker Compose pour configurer vos environnements Docker, vous ne devez pas non plus utiliser le fichier docker-compose.yml. Au lieu de cela, utilisez le fichier Dockerrun.aws.json, le fichier Dockerfile ou les deux.

Pour plus d'informations, consultez Configuration des plateformes Docker (sans Docker Compose) .

Utilisation d'images à partir d'un référentiel privé

Elastic Beanstalk doit s'authentifier auprès du registre en ligne qui héberge le référentiel privé avant de pouvoir extraire et déployer vos images à partir d'un référentiel privé. Nous fournissons des exemples pour deux options de stockage et de récupération des informations d'identification pour votre environnement Elastic Beanstalk afin qu'il s'authentifie auprès d'un référentiel.

  • Le AWS Secrets Manager

  • le fichier Dockerrun.aws.json v3 ;

Vous pouvez configurer Elastic Beanstalk pour qu'il se connecte à votre référentiel privé avant de commencer le processus de déploiement. Cela permet à Elastic Beanstalk d'accéder aux images à partir du référentiel et de les déployer dans votre environnement Elastic Beanstalk.

Cette configuration initie des événements dans la phase de prégénération du processus de déploiement Elastic Beanstalk. La configuration a lieu dans le répertoire de configuration .ebextentions. La configuration utilise des scripts de hook de plateforme qui appellent docker login à s'authentifier auprès du registre en ligne qui héberge le référentiel privé. Voici une répartition détaillée de ces étapes de configuration.

Pour configurer Elastic Beanstalk afin qu'il s'authentifie auprès de votre référentiel privé avec AWS Secrets Manager
Note

Des autorisations spécifiques doivent être accordées pour effectuer ces étapes. Pour plus d'informations, consultez les références suivantes.

  1. Créez votre structure de répertoire .ebextensions comme suit.

    ├── .ebextensions │ └── env.config ├── .platform │ ├── confighooks │ │ └── prebuild │ │ └── 01login.sh │ └── hooks │ └── prebuild │ └── 01login.sh ├── docker-compose.yml
  2. Utilisez-le AWS Secrets Manager pour enregistrer les informations d'identification de votre référentiel privé afin qu'Elastic Beanstalk puisse les récupérer en cas de besoin. Pour cela, exécutez la commande create-secret AWS CLI de Secrets Manager.

    aws secretsmanager create-secret \ --name MyTestSecret \ --description "My image repo credentials created with the CLI." \ --secret-string "{\"USER\":\"EXAMPLE-USERNAME\",\"PASSWD\":\"EXAMPLE-PASSWORD\"}"
  3. Créez le fichier env.config suivant et placez-le dans le répertoire .ebextensions comme indiqué dans la structure de répertoire précédente. Cette configuration utilise l'espace de noms aws:elasticbeanstalk:application:environment pour initialiser les variables d'environnement Elastic Beanstalk USER et PASSWD à l'aide de références dynamiques à AWS Secrets Manager. Pour plus d'informations sur les références secretsmanager dynamiques, voir Récupérer un AWS Secrets Manager secret dans une AWS CloudFormation ressource du Guide de l'AWS Secrets Manager utilisateur.

    Note

    Dans le script, USER et PASSWD doivent correspondre aux mêmes chaînes que celles utilisées dans la commande secretsmanager create-secret précédente.

    option_settings: aws:elasticbeanstalk:application:environment: USER: '{{resolve:secretsmanager:MyTestSecret:SecretString:USER}}' PASSWD: '{{resolve:secretsmanager:MyTestSecret:SecretString:PASSWD}}'
  4. Créez le fichier de script 01login.sh suivant et placez-le dans les répertoires suivants (comme illustré également dans la structure de répertoires précédente) :

    • .platform/confighooks/prebuild

    • .platform/hooks/prebuild

    ### example 01login.sh #!/bin/bash USER=/opt/elasticbeanstalk/bin/get-config environment -k USER /opt/elasticbeanstalk/bin/get-config environment -k PASSWD | docker login -u $USER --password-stdin

    Le script 01login.sh appelle le script de plateforme get-config pour récupérer les informations d'identification du référentiel, puis se connecter au référentiel. Il stocke le nom d'utilisateur dans la variable de script USER. Dans la ligne suivante, il récupère le mot de passe. Au lieu de stocker le mot de passe dans une variable de script, le script le dirige directement vers la commande docker login dans le flux d’entrée stdin. L'option --password-stdin utilise le flux d'entrée, vous n'avez donc pas besoin de stocker le mot de passe dans une variable. Pour en savoir plus sur l'authentification à l'aide de l'interface de ligne de commande Docker, consultez Docker Login (Connexion à Docker) sur le site Web de documentation Docker.

    Remarques
    • Tous les fichiers de script doivent disposer d'une autorisation d'exécution. Utilisez la commande chmod +x pour définir l'autorisation d'exécution sur vos fichiers hook. Pour toutes les versions de platesformes basées sur Amazon Linux 2 publiées à partir du 29 avril 2022, Elastic Beanstalk accorde automatiquement des autorisations d'exécution à tous les scripts de hook de plateforme. Dans ce cas, vous n'avez pas besoin d'accorder manuellement les autorisations d'exécution. Pour obtenir la liste de ces versions de plateforme, consultez les notes de mise à jour April 29, 2022 - Linux platform (29 avril 2022 – Plateforme Linux) dans le AWS Elastic Beanstalk Release Notes Guide (Guide de notes de mise à jour ).

    • Les fichiers hook peuvent être des fichiers binaires ou des fichiers script commençant par une ligne #! et contenant leur chemin d'interpréteur, par exemple #!/bin/bash.

    • Pour de plus amples informations, veuillez consulter Hooks de plateforme dans Extension des plateformes Linux Elastic Beanstalk.

Une fois qu'Elastic Beanstalk s'est authentifié auprès du registre en ligne qui héberge le référentiel privé, vous pouvez extraire et déployer vos images.

Cette section décrit une autre approche pour authentifier Elastic Beanstalk auprès d'un référentiel privé. Avec cette approche, vous générez un fichier d'authentification avec la commande Docker, puis téléchargez le fichier d'authentification dans un compartiment Amazon S3. Vous devez également inclure les informations du compartiment dans votre fichier Dockerrun.aws.json v3.

Pour générer un fichier d'authentification et le fournir à Elastic Beanstalk
  1. Générez un fichier d'authentification avec la commande docker login. Pour les référentiels sur Docker Hub, exécutez docker login:

    $ docker login

    Pour d'autres registres, incluez l'URL du serveur de registre :

    $ docker login registry-server-url
    Note

    Si votre environnement Elastic Beanstalk utilise la version de plateforme Docker AMI Amazon Linux (antérieure à Amazon Linux 2), lisez les informations dans Configuration Docker sur l'AMI Amazon Linux (antérieure à Amazon Linux 2).

    Pour plus d'informations sur le fichier d'authentification, consultez Store images on Docker Hub et docker login sur le site web de Docker.

  2. Chargez une copie du fichier d'authentification nommé .dockercfg dans un compartiment Amazon S3 sécurisé.

    • Le compartiment Amazon S3 doit être hébergé dans le même Région AWS environnement que celui qui l'utilise. Elastic Beanstalk ne peut pas télécharger de fichiers à partir d'un compartiment Amazon S3 hébergé dans d'autres régions.

    • Accordez des autorisations pour l'opération s3:GetObject au rôle IAM dans le profil d'instance. Pour plus d'informations, consultez Gestion des profils d'instance Elastic Beanstalk.

  3. Incluez les informations sur le compartiment Amazon S3 dans le paramètre Authentication de votre fichier Dockerrun.aws.json v3.

    Voici un exemple de fichier Dockerrun.aws.json v3.

    { "AWSEBDockerrunVersion": "3", "Authentication": { "bucket": "DOC-EXAMPLE-BUCKET", "key": "mydockercfg" } }
    Note

    Le paramètre AWSEBDockerrunVersion indique la version du fichier Dockerrun.aws.json.

    • La plateforme Docker Amazon Linux 2 utilise le fichier Dockerrun.aws.json v3 pour les environnements qui utilisent Docker Compose. Elle utilise le fichier Dockerrun.aws.json v1 pour les environnements qui n'utilisent pas Docker Compose.

    • La plateforme AMI Docker Amazon Linux 2 Docker multiconteneurs utilise le fichier Dockerrun.aws.json v2.

Une fois qu'Elastic Beanstalk peut s'authentifier auprès du registre en ligne qui héberge le référentiel privé, vos images peuvent être déployées et extraites.

Création d'images personnalisées avec un Dockerfile

Vous devez créer un Dockerfile si vous ne disposez d'aucune image existante hébergée dans un référentiel.

L'extrait suivant représente un exemple de Dockerfile. Si vous suivez les instructions de la page Utilisation de la branche de plateforme Docker, vous pouvez charger ce fichier Dockerfile comme indiqué. Elastic Beanstalk exécute le jeu 2048 lorsque vous utilisez ce fichier Dockerfile.

Pour plus d'informations sur les instructions que vous pouvez inclure dans le Dockerfile, consultez la référence sur Dockerfile sur le site web de Docker.

FROM ubuntu:12.04 RUN apt-get update RUN apt-get install -y nginx zip curl RUN echo "daemon off;" >> /etc/nginx/nginx.conf RUN curl -o /usr/share/nginx/www/master.zip -L https://codeload.github.com/gabrielecirulli/2048/zip/master RUN cd /usr/share/nginx/www/ && unzip master.zip && mv 2048-master/* . && rm -rf 2048-master master.zip EXPOSE 80 CMD ["/usr/sbin/nginx", "-c", "/etc/nginx/nginx.conf"]
Note

Vous pouvez exécuter des versions à plusieurs étapes à partir d'un seul Dockerfile pour produire des images de plus petite taille avec une réduction significative de la complexité. Pour plus d'informations, consultez Utiliser des versions à plusieurs étapes sur le site web de la documentation Docker.

Configuration des plateformes Docker (sans Docker Compose)

Si votre environnement Docker Elastic Beanstalk n'utilise pas Docker Compose, lisez les informations supplémentaires des sections suivantes.

Toute application web que vous déployez dans Elastic Beanstalk dans un environnement Docker doit inclure un fichier Dockerfile ou Dockerrun.aws.json. Pour déployer votre application web à partir d'un conteneur Docker dans Elastic Beanstalk, effectuez l'une des actions suivantes :

  • Créez un fichier Dockerfile pour permette à Elastic Beanstalk de créer et d'exécuter une image personnalisée.

  • Créez un fichier Dockerrun.aws.json afin de déployer une image Docker à partir d'un référentiel hébergé dans Elastic Beanstalk.

  • Créez un fichier .zip contenant vos fichiers d'application, toutes les dépendances du fichier d'application, le Dockerfile et le fichier Dockerrun.aws.json. Si vous utilisez l'interface de ligne de commande (CLI) EB pour déployer votre application, elle crée un fichier .zip automatiquement.

    Si vous utilisez uniquement un Dockerfile ou un fichier Dockerrun.aws.json pour déployer votre application, vous n'avez pas besoin de créer un fichier .zip.

Cette rubrique est une référence de syntaxe. Pour obtenir des procédures détaillées sur le lancement d'environnements Docker, veuillez consulter Utilisation de la branche de plateforme Docker.

Sections

    Un fichier Dockerrun.aws.json décrit comment déployer une image Docker distante en tant qu'application Elastic Beanstalk. Ce fichier JSON est spécifique à Elastic Beanstalk. Si votre application s'exécute sur une image qui est disponible dans un référentiel hébergé, vous pouvez spécifier l'image dans un fichier Dockerrun.aws.json v1 et omettre le Dockerfile.

    Les clés et valeurs valides pour le fichier Dockerrun.aws.json v1 incluent les opérations suivantes.

    AWSEBDockerrunVersion

    (Obligatoire) Indique la valeur 1 comme numéro de version pour les environnements Docker à conteneur unique.

    Authentification

    (Obligatoire uniquement pour les référentiels privés) Indique l'objet Amazon S3 qui stocke le fichier .dockercfg.

    Voir Utilisation d'images à partir d'un référentiel privé.

    Image

    Spécifie l'image de base Docker sur un référentiel Docker existant, à partir de laquelle vous créez un conteneur Docker. Spécifiez la valeur de la clé Name au format <organisation>/<nom de l'image> pour les images sur Docker Hub ou <site>/nom de l'organisation>/<nom de l'image> pour les autres sites.

    Lorsque vous spécifiez une image dans le fichier Dockerrun.aws.json, chaque instance de votre environnement Elastic Beanstalk exécute docker pull pour exécuter l'image. Vous pouvez également inclure la clé Update. La valeur par défaut est true et demande à Elastic Beanstalk de vérifier le référentiel, d'extraire les mises à jour de l'image et de remplacer toutes les images mises en cache.

    Lorsque vous utilisez un fichier Dockerfile, ne spécifiez pas la clé Image dans le fichier Dockerrun.aws.json. Elastic Beanstalk crée et utilise toujours l'image décrite dans le fichier Dockerfile, lorsqu'il existe.

    Ports

    (Obligatoire si vous spécifiez la clé Image) Répertorie les ports à exposer sur le conteneur Docker. Elastic Beanstalk ContainerPortutilise cette valeur pour connecter le conteneur Docker au proxy inverse exécuté sur l'hôte.

    Vous pouvez spécifier plusieurs ports de conteneur, mais Elastic Beanstalk utilise uniquement le premier port. Il utilise ce port pour connecter votre conteneur au proxy inverse de l'hôte et acheminer les demandes depuis le réseau Internet public. Si vous utilisez unDockerfile, la première ContainerPortvaleur doit correspondre à la première entrée Dockerfile de la liste EXPOSE.

    Vous pouvez éventuellement spécifier une liste de ports dans HostPort. HostPortles entrées spécifient les ports hôtes auxquels ContainerPortles valeurs sont mappées. Si vous ne spécifiez aucune HostPortvaleur, la valeur par défaut est la même ContainerPort.

    { "Image": { "Name": "image-name" }, "Ports": [ { "ContainerPort": 8080, "HostPort": 8000 } ] }
    Volumes

    Mappez les volumes d'une instance EC2 à votre conteneur Docker. Spécifiez un ou plusieurs groupes de volumes à mapper.

    { "Volumes": [ { "HostDirectory": "/path/inside/host", "ContainerDirectory": "/path/inside/container" } ] ...
    Journalisation

    Spécifiez le répertoire du conteneur dans lequel votre application écrit les journaux. Elastic Beanstalk télécharge tous les journaux de ce répertoire sur Amazon S3 lorsque vous demandez des journaux de processus ou de groupe. Si vous effectuez une rotation des journaux dans un dossier nommé rotated au sein de ce répertoire, vous pouvez également configurer Elastic Beanstalk afin de charger les journaux concernés dans Amazon S3 pour un stockage permanent. Pour plus d'informations, consultez Affichage des journaux des instances Amazon EC2 dans votre environnement Elastic Beanstalk.

    Commande

    Spécifiez une commande à exécuter dans le conteneur. Si vous spécifiez un point d'entrée, la valeur Command (Commande) est ajoutée comme argument dans Entrypoint (Point d'entrée). Pour plus d'informations, consultezCMD dans la documentation Docker.

    Entrypoint

    Spécifiez une commande par défaut à exécuter lorsque le conteneur démarre. Pour plus d'informations, consultez ENTRYPOINT dans la documentation Docker.

    L'extrait suivant est un exemple illustrant la syntaxe du fichier Dockerrun.aws.json pour un conteneur unique.

    { "AWSEBDockerrunVersion": "1", "Image": { "Name": "janedoe/image", "Update": "true" }, "Ports": [ { "ContainerPort": "1234" } ], "Volumes": [ { "HostDirectory": "/var/app/mydb", "ContainerDirectory": "/etc/mysql" } ], "Logging": "/var/log/nginx", "Entrypoint": "/app/bin/myapp", "Command": "--argument" }

    Vous pouvez fournir à Elastic Beanstalk le fichier Dockerrun.aws.json uniquement, ou une archive .zip contenant les fichiers Dockerrun.aws.json et Dockerfile. Si vous fournissez les deux fichiers, le Dockerfile décrit l'image Docker et le fichier Dockerrun.aws.json fournit des informations supplémentaires pour le déploiement, comme indiqué ultérieurement dans cette section.

    Note

    Les deux fichiers doivent être à la racine, ou au niveau supérieur, de l'archive .zip. Ne créez pas l'archive à partir d'un répertoire contenant les fichiers. Au lieu de cela, parcourez ce répertoire et créez l'archive dans le répertoire.

    Si vous fournissez les deux fichiers, ne spécifiez aucune image dans le fichier Dockerrun.aws.json. Elastic Beanstalk crée et utilise l'image décrite dans le fichier Dockerfile et ignore celle spécifiée dans le fichier Dockerrun.aws.json.

    Ajoutez les informations relatives au compartiment Amazon S3 contenant le fichier d'authentification dans le paramètre Authentication du fichier Dockerrun.aws.json v1. 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 AWS 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.

    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é.

    L'exemple suivant décrit comment utiliser un fichier d'authentification nommé mydockercfg dans un compartiment nommé DOC-EXAMPLE-BUCKET afin d'utiliser une image privée dans un registre tiers.

    { "AWSEBDockerrunVersion": "1", "Authentication": { "Bucket": "DOC-EXAMPLE-BUCKET", "Key": "mydockercfg" }, "Image": { "Name": "quay.io/johndoe/private-image", "Update": "true" }, "Ports": [ { "ContainerPort": "1234" } ], "Volumes": [ { "HostDirectory": "/var/app/mydb", "ContainerDirectory": "/etc/mysql" } ], "Logging": "/var/log/nginx" }