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 fichierdocker-compose.yml
, veuillez consulter Compose file referencesur 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 fichierDockerfile
, veuillez consulter Dockerfile referencesur le site web Docker. -
Créez un fichier
.zip
contenant vos fichiers d'application, toutes les dépendances du fichier d'application, leDockerfile
et le fichierdocker-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
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.
-
À l'Étape 2, vous aurez besoin d'autorisations pour créer un secret. Pour plus d'informations, consultez Exemple : Autorisation pour créer des secrets dans le Guide de l'utilisateur AWS Secrets Manager .
-
À l'Étape 3, vous aurez besoin d'autorisations pour récupérer des secrets à l'aide de références dynamiques
secretsmanager
. Pour plus d'informations, consultez la rubrique Exemple : Autorisation pour récupérer des valeurs de secrets dans le Guide de l'utilisateur AWS Secrets Manager .
-
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
-
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\
"}" -
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 BeanstalkUSER
etPASSWD
à l'aide de références dynamiques à AWS Secrets Manager. Pour plus d'informations sur les référencessecretsmanager
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
etPASSWD
doivent correspondre aux mêmes chaînes que celles utilisées dans la commandesecretsmanager
create-secret précédente.option_settings: aws:elasticbeanstalk:application:environment: USER: '{{resolve:secretsmanager:MyTestSecret:SecretString:USER}}' PASSWD: '{{resolve:secretsmanager:MyTestSecret:SecretString:PASSWD}}'
-
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 scriptUSER
. 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éestdin
. 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
-
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. -
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.
-
-
Incluez les informations sur le compartiment Amazon S3 dans le paramètre
Authentication
de votre fichierDockerrun.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 fichierDockerrun.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 fichierDockerrun.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
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
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, leDockerfile
et le fichierDockerrun.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 fichierDockerrun.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
. - 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écutedocker pull
pour exécuter l'image. Vous pouvez également inclure la clé Update. La valeur par défaut esttrue
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 fichierDockerrun.aws.json
. Elastic Beanstalk crée et utilise toujours l'image décrite dans le fichierDockerfile
, 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 un
Dockerfile
, la première ContainerPortvaleur doit correspondre à la première entréeDockerfile
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"
}