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.
QuickStart: Déployer une application Docker Compose sur Elastic Beanstalk
Ce QuickStart didacticiel explique le processus de création d'une application Docker Compose multi-conteneurs et de son déploiement dans un AWS Elastic Beanstalk environnement. Vous allez créer une application Web Flask avec un proxy inverse nginx pour montrer comment Docker Compose simplifie l'orchestration de plusieurs conteneurs.
Note
Les exemples de didacticiels sont destinés à des fins de démonstration. N'utilisez pas l'application pour le trafic de production.
Votre AWS compte
Si vous n'êtes pas encore AWS client, vous devez créer un AWS compte. L'inscription vous permet d'accéder à Elastic Beanstalk AWS et aux autres services dont vous avez besoin.
Si vous avez déjà un AWS compte, vous pouvez passer àPrérequis.
Inscrivez-vous pour un Compte AWS
Si vous n'en avez pas Compte AWS, procédez comme suit pour en créer un.
Pour vous inscrire à un Compte AWS
Ouvrez l'https://portal.aws.amazon.com/billing/inscription.
Suivez les instructions en ligne.
Dans le cadre de la procédure d’inscription, vous recevrez un appel téléphonique ou un SMS et vous saisirez un code de vérification en utilisant le clavier numérique du téléphone.
Lorsque vous vous inscrivez à un Compte AWS, un Utilisateur racine d'un compte AWSest créé. Par défaut, seul l’utilisateur racine a accès à l’ensemble des Services AWS et des ressources de ce compte. La meilleure pratique de sécurité consiste à attribuer un accès administratif à un utilisateur, et à utiliser uniquement l’utilisateur racine pour effectuer les tâches nécessitant un accès utilisateur racine.
AWS vous envoie un e-mail de confirmation une fois le processus d'inscription terminé. À tout moment, vous pouvez consulter l'activité actuelle de votre compte et gérer votre compte en accédant à https://aws.amazon.com/
Création d’un utilisateur doté d’un accès administratif
Après vous être inscrit à un Compte AWS, sécurisez Utilisateur racine d'un compte AWS AWS IAM Identity Center, activez et créez un utilisateur administratif afin de ne pas utiliser l'utilisateur root pour les tâches quotidiennes.
Sécurisez votre Utilisateur racine d'un compte AWS
-
Connectez-vous en AWS Management Console
tant que propriétaire du compte en choisissant Utilisateur root et en saisissant votre adresse Compte AWS e-mail. Sur la page suivante, saisissez votre mot de passe. Pour obtenir de l’aide pour vous connecter en utilisant l’utilisateur racine, consultez Connexion en tant qu’utilisateur racine dans le Guide de l’utilisateur Connexion à AWS .
-
Activez l’authentification multifactorielle (MFA) pour votre utilisateur racine.
Pour obtenir des instructions, voir Activer un périphérique MFA virtuel pour votre utilisateur Compte AWS root (console) dans le guide de l'utilisateur IAM.
Création d’un utilisateur doté d’un accès administratif
-
Activez IAM Identity Center.
Pour obtenir des instructions, consultez Activation d’ AWS IAM Identity Center dans le Guide de l’utilisateur AWS IAM Identity Center .
-
Dans IAM Identity Center, octroyez un accès administratif à un utilisateur.
Pour un didacticiel sur l'utilisation du Répertoire IAM Identity Center comme source d'identité, voir Configurer l'accès utilisateur par défaut Répertoire IAM Identity Center dans le Guide de AWS IAM Identity Center l'utilisateur.
Connexion en tant qu’utilisateur doté d’un accès administratif
-
Pour vous connecter avec votre utilisateur IAM Identity Center, utilisez l’URL de connexion qui a été envoyée à votre adresse e-mail lorsque vous avez créé l’utilisateur IAM Identity Center.
Pour obtenir de l'aide pour vous connecter en utilisant un utilisateur d'IAM Identity Center, consultez la section Connexion au portail AWS d'accès dans le guide de l'Connexion à AWS utilisateur.
Attribution d’un accès à d’autres utilisateurs
-
Dans IAM Identity Center, créez un ensemble d’autorisations qui respecte la bonne pratique consistant à appliquer les autorisations de moindre privilège.
Pour obtenir des instructions, consultez Création d’un ensemble d’autorisations dans le Guide de l’utilisateur AWS IAM Identity Center .
-
Attribuez des utilisateurs à un groupe, puis attribuez un accès par authentification unique au groupe.
Pour obtenir des instructions, consultez Ajout de groupes dans le Guide de l’utilisateur AWS IAM Identity Center .
Prérequis
Pour suivre les procédures décrites dans ce guide, vous aurez besoin d'un shell ou d'un terminal de ligne de commande pour exécuter des commandes. Dans les listes, les commandes sont précédées d'un symbole d'invite ($) et du nom du répertoire actuel, le cas échéant.
~/eb-project$ this is a command
this is output
Sous Linux et macOS, vous pouvez utiliser le shell et le gestionnaire de package de votre choix. Sur Windows, vous pouvez installer le sous-système Windows pour Linux
INTERFACE DE LIGNE DE COMMANDE (CLI) EB
Ce tutoriel utilise également l'interface de ligne de commande Elastic Beanstalk (CLI EB). Pour de plus amples informations sur l'installation et la configuration de la CLI EB, veuillez consulter Installation de la CLI EB avec un script de configuration (recommandé) et Configuration de l'interface de ligne de commande EB.
Docker et Docker Compose
Pour suivre ce didacticiel, vous aurez besoin d'une installation locale fonctionnelle de Docker et Docker Compose. Pour plus d'informations, consultez Télécharger Docker et installer Docker
Vérifiez que Docker et Docker Compose sont installés et en cours d'exécution en exécutant les commandes suivantes.
~$ docker info
~$ docker compose version
Étape 1 : créer une application Docker Compose
Dans cet exemple, nous créons une application multi-conteneurs à l'aide de Docker Compose composée d'une application Web Flask et d'un proxy inverse nginx. Cela montre comment Docker Compose simplifie l'orchestration de plusieurs conteneurs qui fonctionnent ensemble.
L'application inclut une configuration de surveillance de l'état qui permet à Elastic Beanstalk de collecter des métriques d'application détaillées à partir de votre proxy nginx.
La structure de l'application est la suivante :
~/eb-docker-compose-flask/
|-- docker-compose.yml
|-- web/
| |-- Dockerfile
| |-- app.py
| `-- requirements.txt
|-- proxy/
| |-- Dockerfile
| `-- nginx.conf
`-- .platform/
`-- hooks/
`-- postdeploy/
`-- 01_setup_healthd_permissions.sh
Créez la structure du répertoire et ajoutez les fichiers suivants :
Créez d'abord le docker-compose.yml
fichier principal qui définit les services et leurs relations.
Exemple ~/eb-docker-compose-flask/docker-compose.yml
services: web: build: ./web expose: - "5000" nginx-proxy: build: ./proxy ports: - "80:80" volumes: - "/var/log/nginx:/var/log/nginx" depends_on: - web
Créez l'application Web Flask dans le web
répertoire. Ajoutez le contenu suivant à votre app.py
fichier.
Exemple ~/eb-docker-compose-flask/web/app.py
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello Elastic Beanstalk! This is a Docker Compose application'
Ajoutez le contenu suivant à votre service WebDockerfile
.
Exemple ~/eb-docker-compose-flask/web/Dockerfile
FROM public.ecr.aws/docker/library/python:3.12 COPY . /app WORKDIR /app RUN pip install Flask==3.1.1 EXPOSE 5000 CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"]
Créez le proxy inverse nginx dans le répertoire. proxy
Ajoutez le contenu suivant à votre nginx.conf
fichier.
Cette configuration inclut une configuration de surveillance de l'état qui permet à Elastic Beanstalk de collecter des métriques détaillées sur les applications. Pour plus d'informations sur la personnalisation des formats des journaux de surveillance de l'état, consultezFormat de journal d'intégrité améliorée.
Exemple ~/eb-docker-compose-flask/proxy/nginx.conf
events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; map $http_upgrade $connection_upgrade { default "upgrade"; } # Health monitoring log format for Elastic Beanstalk log_format healthd '$msec"$uri"$status"$request_time"$upstream_response_time"$http_x_forwarded_for'; upstream flask_app { server web:5000; } server { listen 80 default_server; root /usr/share/nginx/html; # Standard access log access_log /var/log/nginx/access.log; # Health monitoring log for Elastic Beanstalk if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") { set $year $1; set $month $2; set $day $3; set $hour $4; } access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd; location / { proxy_pass http://flask_app; proxy_http_version 1.1; proxy_set_header Connection $connection_upgrade; proxy_set_header Upgrade $http_upgrade; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } }
Ajoutez le contenu suivant à votre service proxyDockerfile
.
Exemple ~/eb-docker-compose-flask/proxy/Dockerfile
FROM public.ecr.aws/nginx/nginx:alpine COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 80
Enfin, créez un script de connexion à la plateforme pour configurer les répertoires de journaux et les autorisations nécessaires à la surveillance de l'état de santé. Les hooks de plateforme vous permettent d'exécuter des scripts personnalisés pendant le processus de déploiement. Pour plus d'informations sur les hooks de plateforme, consultezHooks de plateforme.
Exemple ~/eb-docker-compose-flask/.platform/hooks/postdeploy/01_setup_healthd_permissions.sh
#!/bin/bash set -ex NGINX_CONTAINER=$(docker ps --filter "name=nginx-proxy" -q) if [ -z "$NGINX_CONTAINER" ]; then echo "Error: No nginx-proxy container found running" exit 1 fi NGINX_UID=$(docker exec ${NGINX_CONTAINER} id -u nginx) NGINX_GID=$(docker exec ${NGINX_CONTAINER} id -g nginx) mkdir -p /var/log/nginx/healthd chown -R ${NGINX_UID}:${NGINX_GID} /var/log/nginx
Étape 2 : Exécutez votre application localement
Utilisez la commande docker compose updocker-compose.yml
fichier.
~/eb-docker-compose-flask$
docker compose up --build
--buildCette option garantit que Docker Compose crée les images du conteneur avant de démarrer les services. Vous devriez voir une sortie indiquant le démarrage du service Web et du service nginx-proxy.
Accédez à http://localhost
dans votre navigateur. Vous devriez voir le texte « Hello Elastic Beanstalk ! Il s'agit d'une application Docker Compose ». Le proxy nginx reçoit votre demande sur le port 80 et la transmet à l'application Flask exécutée sur le port 5000.
Lorsque vous avez terminé le test, arrêtez l'application Ctrl+C en appuyant sur le terminal ou exécutez la commande suivante dans un autre terminal :
~/eb-docker-compose-flask$
docker compose down
Étape 3 : Déployez votre application Docker Compose avec l'EB CLI
Exécutez les commandes suivantes pour créer un environnement Elastic Beanstalk pour cette application.
Pour créer un environnement et déployer votre application Docker Compose
-
Initialisez votre référentiel de la CLI EB avec la commande eb init :
~/eb-docker-compose-flask$
eb init -p docker docker-compose-tutorial --region
Application docker-compose-tutorial has been created.us-east-2
Cette commande crée une application nommée
docker-compose-tutorial
et configure votre référentiel local pour créer des environnements avec la dernière version de la plateforme Docker. -
(Facultatif) Exécutez à eb init nouveau pour configurer une paire de clés par défaut afin de pouvoir utiliser SSH pour vous connecter à l' EC2 instance qui exécute votre application.
~/eb-docker-compose-flask$
eb init
Do you want to set up SSH for your instances? (y/n):y
Select a keypair. 1) my-keypair 2) [ Create new KeyPair ]Sélectionnez une paire de clés si vous en avez déjà une, ou suivez les invites pour en créer une. Si vous ne voyez pas l'invite ou que vous avez besoin de modifier vos paramètres ultérieurement, exécutez eb init -i.
-
Créez un environnement et déployez-y votre application avec eb create. Elastic Beanstalk
docker-compose.yml
détecte automatiquement votre fichier et déploie votre application multi-conteneurs.~/eb-docker-compose-flask$
eb create docker-compose-tutorial
Il faut environ cinq minutes à Elastic Beanstalk pour créer votre environnement et déployer votre application multi-conteneurs.
Étape 4 : Testez votre application sur Elastic Beanstalk
Lorsque le processus de création de votre environnement est terminé, ouvrez votre site Web aveceb open.
~/eb-docker-compose-flask$ eb open
Excellent ! Vous avez déployé une application Docker Compose multi-conteneurs avec Elastic Beanstalk ! Celle-ci ouvre une fenêtre de navigation en utilisant le nom de domaine créé pour votre application. Vous devriez voir le message de votre application Flask, diffusé via le proxy inverse nginx.
Étape 5 : nettoyer
Vous pouvez mettre fin à votre environnement lorsque vous avez fini d'utiliser votre application. Elastic Beanstalk AWS met fin à toutes les ressources associées à votre environnement.
Pour mettre fin à votre environnement Elastic Beanstalk avec l'EB CLI, exécutez la commande suivante.
~/eb-docker-compose-flask$ eb terminate
AWS ressources pour votre application
Vous venez de créer une seule instance d'application exécutant plusieurs conteneurs. Il s'agit d'un exemple d'application simple avec une seule EC2 instance, il ne nécessite donc pas d'équilibrage de charge ni de dimensionnement automatique. Pour les applications à instance unique, Elastic Beanstalk crée les ressources suivantes : AWS
-
EC2 instance — Une machine EC2 virtuelle Amazon configurée pour exécuter des applications Web sur la plateforme de votre choix.
Chaque plateforme exécute un ensemble distinct de logiciels, de fichiers de configuration et de scripts pour prendre en charge une version de langage, une infrastructure ou un conteneur web spécifiques, ou une combinaison de ces éléments. La plupart des plateformes utilisent Apache ou nginx comme proxy inverse qui traite le trafic web devant votre application web, lui transmet les demandes, traite les ressources statiques et génère des journaux d'accès et d'erreurs.
-
Groupe de sécurité d'instance : groupe EC2 de sécurité Amazon configuré pour autoriser le trafic entrant sur le port 80. Cette ressource permet au trafic HTTP provenant de l'équilibreur de charge d'atteindre l' EC2 instance qui exécute votre application Web. Par défaut, le trafic n'est pas autorisé sur les autres ports.
-
Compartiment Amazon S3 – Emplacement de stockage pour votre code source, les journaux et autres artefacts qui sont créés lorsque vous utilisez Elastic Beanstalk.
-
CloudWatch Alarmes Amazon : deux CloudWatch alarmes qui surveillent la charge sur les instances de votre environnement et sont déclenchées si la charge est trop élevée ou trop faible. Lorsqu'une alarme est déclenchée, votre groupe Auto Scaling s'adapte en fonction, à la hausse ou à la baisse.
-
AWS CloudFormation stack — Elastic AWS CloudFormation Beanstalk utilise pour lancer les ressources de votre environnement et propager les modifications de configuration. Les ressources sont définies dans un modèle, que vous pouvez afficher dans la console AWS CloudFormation
. -
Nom de domaine : nom de domaine qui permet d'accéder à votre application Web dans le formulaire
subdomain
.region
.elasticbeanstalk.com.
Elastic Beanstalk gère toutes ces ressources. Lorsque vous arrêtez votre environnement, Elastic Beanstalk arrête toutes les ressources qu'il contient. Votre application Docker Compose exécute plusieurs conteneurs sur une seule EC2 instance, Elastic Beanstalk gérant automatiquement l'orchestration.
Étapes suivantes
Dès que vous disposez d'un environnement exécutant une application, vous pouvez à tout moment déployer une nouvelle version de l'application ou une application totalement différente. Le déploiement d'une nouvelle version d'application est très rapide car il ne nécessite ni le provisionnement ni le redémarrage des instances. EC2 Vous pouvez également explorer votre nouvel environnement à l'aide de la console Elastic Beanstalk. Pour connaître les étapes détaillées, consultez la section Explorez votre environnement dans le chapitre Mise en route de ce guide.
Une fois que vous avez déployé un ou deux exemples d'applications et que vous êtes prêt à commencer à développer et à exécuter des applications Docker Compose localement, consultezPréparation de votre image Docker pour le déploiement sur Elastic Beanstalk.
Déployez avec la console Elastic Beanstalk
Vous pouvez également utiliser la console Elastic Beanstalk pour lancer une application Docker Compose. Créez un fichier ZIP contenant votre docker-compose.yml
fichier ainsi que tous les répertoires et fichiers associés, puis téléchargez-le lors de la création d'une nouvelle application. Pour connaître les étapes détaillées, voir Création d'un exemple d'application dans le chapitre Mise en route de ce guide.