Préparation de votre image Docker pour le déploiement sur Elastic Beanstalk - 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.

Préparation de votre image Docker pour le déploiement sur Elastic Beanstalk

Cette section explique comment préparer votre image Docker en vue de son déploiement sur Elastic Beanstalk avec Docker en cours d'exécution ou une branche 023 de la AL2 plateforme. AL2 Les fichiers de configuration dont vous aurez besoin varient selon que vos images sont locales, distantes et si vous utilisez Docker Compose.

Note

Pour un exemple de procédure qui lance un environnement Docker, consultez la QuickStart pour Docker rubrique.

Gérer vos images avec Docker Compose dans Elastic Beanstalk

Vous pouvez choisir d'utiliser Docker Compose pour gérer différents services dans un seul YAML fichier. Pour en savoir plus sur Docker Compose, voir Pourquoi utiliser Compose ? sur le site Web de Docker.

  • Créez un docker-compose.yml. Ce fichier est obligatoire si vous utilisez Docker Compose pour gérer votre application avec Elastic Beanstalk. Si tous vos déploiements proviennent d'images stockées dans des référentiels publics, aucun autre fichier de configuration n'est requis. Si les images source de votre déploiement se trouvent dans un référentiel privé, vous devrez effectuer une configuration supplémentaire. Pour plus d'informations, consultez la section Utilisation d'images provenant d'un dépôt privé. Pour de plus amples informations sur le fichier docker-compose.yml, veuillez consulter Compose file reference sur le site web Docker.

  • DockerfileC'est facultatif. Créez-en une si vous avez besoin d'Elastic Beanstalk pour créer et exécuter une image personnalisée locale. Pour de plus amples informations sur le fichier Dockerfile, veuillez consulter Dockerfile reference sur le site web Docker.

  • Il se peut que vous deviez créer un .zip fichier. Si vous utilisez uniquement un Dockerfile fichier pour déployer votre application, il n'est pas nécessaire d'en créer un. Si vous utilisez des fichiers de configuration supplémentaires, le fichier .zip doit inclure le docker-compose.yml fichierDockerfile, vos fichiers d'application et toutes les dépendances des fichiers d'application. Les Dockerfile et docker-compose.yml doivent se trouver à la racine, ou au niveau supérieur, de l'archive .zip. Si vous utilisez l'EB CLI pour déployer votre application, il crée un fichier .zip pour vous.

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.

Gérer des images sans Docker Compose dans Elastic Beanstalk

Si vous n'utilisez pas Docker Compose pour gérer vos images Docker, vous devez configurer un Dockerrun.aws.json fichierDockerfile, ou les deux.

  • Créez une image Dockerfile personnalisée pour qu'Elastic Beanstalk crée et exécute une image personnalisée localement.

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

  • Il se peut que vous deviez créer un .zip fichier. Si vous n'utilisez que l'un des deux fichiers, le Dockerfile ou leDockerrun.aws.json, vous n'avez pas besoin de créer un fichier .zip. Si vous utilisez les deux fichiers, vous avez besoin d'un fichier .zip. Le fichier .zip doit inclure à la fois le Dockerfile et leDockerrun.aws.json, ainsi que le fichier contenant vos fichiers d'application, ainsi que toutes les dépendances des fichiers d'application. Si vous utilisez l'EB CLI pour déployer votre application, il crée un .zip fichier pour vous.

Dockerrun.aws.jsonfichier de configuration v1

Un fichier Dockerrun.aws.json décrit comment déployer une image Docker distante en tant qu'application Elastic Beanstalk. Ce JSON fichier 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.

Versions Dockerrun.aws.json

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

  • Les plateformes Docker AL2 et AL2 023 utilisent les versions suivantes du fichier.

    • Dockerrun.aws.json v3— environnements utilisant Docker Compose.

    • Dockerrun.aws.json v1— environnements qui n'utilisent pas Docker Compose.

  • ECSexécuté sur Amazon Linux 2 et ECSexécuté sur AL2 023 utilise le Dockerrun.aws.json v2 fichier. La plate-forme retirée ECS-The Multicontainer Docker Amazon Linux AMI (AL1) utilisait également cette même version.

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

AWSEBDockerrunVersion

(Obligatoire) Spécifiez le numéro de version 1 si vous n'utilisez pas Docker Compose pour gérer votre image.

Authentification

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

Voir Utilisation d'images provenant d'un dépôt privé dans Elastic Beanstalk la section Utilisation d'images provenant d'un dépôt privé plus loin dans ce chapitre.

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 <organization>/<image name> pour les images sur Docker Hub, ou <site>/<organization name>/<image name> 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 EXPOSEliste.

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 EC2 instance à 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 Afficher les journaux des EC2 instances Amazon 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, consultez CMDla documentation Docker.

Entrypoint

Spécifiez une commande par défaut à exécuter lorsque le conteneur démarre. Pour plus d'informations, consultez ENTRYPOINTla 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.

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 QuickStart pour 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.