Utilisation de la branche de plateforme 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.

Utilisation de la branche de plateforme Docker

AWS Elastic Beanstalk peut lancer des environnements Docker en créant une image décrite dans un Dockerfile ou en extrayant une image Docker à distance. Si vous déployez une image Docker à distance, vous n'avez pas besoin d'inclure un Dockerfile. Au lieu de cela, si vous utilisez également Docker Compose, utilisez un fichier docker-compose.yml, qui spécifie une image à utiliser et des options de configuration supplémentaires. Si vous n'utilisez pas Docker Compose avec vos environnements Docker, utilisez plutôt un fichier Dockerrun.aws.json.

Prérequis

Ce tutoriel suppose que vous ayez quelques connaissances des opérations Elastic Beanstalk de base, de l'interface de ligne de commande Elastic Beanstalk (EB CLI) et de Docker. Si ce n'est pas déjà fait, suivez les instructions dans Mise en route avec Elastic Beanstalk pour lancer votre premier environnement Elastic Beanstalk. Ce tutoriel utilise l'interface de ligne de commande (CLI) EB, mais vous pouvez également créer des environnements et télécharger des applications à l'aide de la console Elastic Beanstalk.

Pour suivre ce tutoriel, vous aurez également besoin des composants Docker suivants :

  • Une installation locale en état de fonctionnement de Docker. Pour de plus amples informations, veuillez consulter Get Docker (Obtenir Docker) sur le site web de documentation de Docker.

  • Accès à Docker Hub. Vous devez créer un ID Docker pour accéder au Docker Hub. Pour de plus amples informations, veuillez consulter Share the application (Partager l'application) sur le site Web de documentation de Docker.

Pour en savoir plus sur la configuration des environnements Docker sur des plateformes Elastic Beanstalk, consultez Configuration Docker dans ce même chapitre.

Mise en conteneur d'une application Elastic Beanstalk

Pour cet exemple, nous allons créer une image Docker de l'exemple d'application Flask généré à la section Déploiement d'une application Flask sur Elastic Beanstalk. L'application se compose d'un fichier principal, application.py. Nous avons également besoin d'un Dockerfile. Placez les deux fichiers à la racine d'un répertoire.

~/eb-docker-flask/ |-- Dockerfile |-- application.py
Exemple ~/eb-docker-flask/application.py
from flask import Flask # Print a nice greeting def say_hello(username = "World"): return '<p>Hello %s!</p>\n' % username # Some bits of text for the page header_text = ''' <html>\n<head> <title>EB Flask Test</title> </head>\n<body>''' instructions = ''' <p><em>Hint</em>: This is a RESTful web service! Append a username to the URL (for example: <code>/Thelonious</code>) to say hello to someone specific.</p>\n''' home_link = '<p><a href="/">Back</a></p>\n' footer_text = '</body>\n</html>' # Elastic Beanstalk looks for an 'application' that is callable by default application = Flask(__name__) # Add a rule for the index page application.add_url_rule('/', 'index', (lambda: header_text + say_hello() + instructions + footer_text)) # Add a rule when the page is accessed with a name appended to the site # URL application.add_url_rule('/<username>', 'hello', (lambda username: header_text + say_hello(username) + home_link + footer_text)) # Run the application if __name__ == "__main__": # Setting debug to True enables debug output. This line should be # removed before deploying a production application. application.debug = True application.run(host="0.0.0.0")
Exemple ~/eb-docker-flask/Dockerfile
FROM python:3.6 COPY . /app WORKDIR /app RUN pip install Flask==1.0.2 EXPOSE 5000 CMD ["python", "application.py"]

Test d'un conteneur en local

Utilisez l'interface de ligne de commande (CLI) Elastic Beanstalk (EB) pour configurer votre référentiel local pour le déploiement dans Elastic Beanstalk. Définissez le Dockerfile de votre application à la racine du répertoire.

~/eb-docker-flask$ eb init -p docker application-name

(Facultatif) Utilisez la commande eb local run pour créer et exécuter votre conteneur en local.

~/eb-docker-flask$ eb local run --port 5000
Note

Pour en savoir plus sur la commande eb local, consultez eb local. La commande n'est pas prise en charge sur Windows. Vous pouvez également créer et exécuter votre conteneur avec les commandes docker build et docker run. Pour plus d'informations, consultez la documentation Docker.

(Facultatif) Lorsque votre conteneur est en cours d'exécution, utilisez la commande eb local open pour afficher votre application dans un navigateur web. Vous pouvez également ouvrir http://localhost:5000/ dans un navigateur web.

~/eb-docker-flask$ eb local open

Déploiement d'un conteneur avec un Dockerfile

Après avoir testé votre application localement, déployez-la dans un environnement Elastic Beanstalk. Elastic Beanstalk utilise les instructions de votre fichier Dockerfile pour construire et exécuter l'image.

Utilisez la commande eb create pour créer un environnement et déployer votre application.

~/eb-docker-flask$ eb create environment-name

Après le lancement de votre environnement, utilisez la commande eb open pour l'afficher dans un navigateur web.

~/eb-docker-flask$ eb open

Test d'une image Docker distante

Nous allons ensuite créer une image Docker de l'application Flask générée à partir de la section précédente et la transmettre à Docker Hub.

Remarques
  • Les étapes suivantes créent une image Docker disponible publiquement.

  • Vous utiliserez les commandes Docker de votre installation Docker locale, ainsi que vos informations d'identification Docker Hub. Pour en savoir plus, consultez la section Prérequis précédente.

Une fois que nous avons créé et transmis notre image, nous pouvons la déployer dans Elastic Beanstalk avec un fichier docker-compose.yml, si vous utilisez Docker Compose avec votre environnement Docker. Si vous n'utilisez pas Docker Compose avec votre environnement Docker, utilisez un fichier Dockerrun.aws.json. Pour créer une image Docker de l'application Flask et la transmettre à Docker Hub, exécutez les commandes suivantes. Nous utiliserons le même répertoire que celui de l'exemple précédent, mais vous pouvez utiliser n'importe quel répertoire avec le code de votre application. Saisissez votre ID Docker pour docker-id pour vous connecter à Docker Hub.

~/eb-docker-flask$ docker build -t docker-id/beanstalk-flask:latest . ~/eb-docker-flask$ docker push docker-id/beanstalk-flask:latest
Note

Avant de transmettre votre image, il se peut que vous deviez exécuter docker login. Vous serez invité à saisir vos informations d'identification Docker Hub si vous exécutez la commande sans paramètres.

Si vous utilisez l'outil Docker Compose pour gérer votre environnement Docker, vous pouvez maintenant déployer votre application en utilisant uniquement un fichier docker-compose.yml. Pour en savoir plus sur les fichiers docker-compose.yml, consultez Configuration Docker.

Si vous n'utilisez pas Docker Compose, utilisez un fichier Dockerrun.aws.json. Pour plus d'informations, consultez Déploiement à l'aide de Dockerrun.aws.json v1 (sans Docker Compose).

Créez un répertoire et un fichier docker-compose.yml.

Exemple ~/remote-docker/docker-compose.yml
version: '3.8' services: beanstalk-flask: image: "username/beanstalk-flask" ports: - "80:5000"

Si vous n'utilisez pas l'outil Docker Compose pour gérer votre environnement Docker, vous pouvez maintenant déployer votre application en utilisant uniquement un fichier Dockerrun.aws.json. Pour en savoir plus sur les fichiers Dockerrun.aws.json, veuillez consulter Configuration des plateformes Docker (sans Docker Compose) .

Créez un répertoire et un fichier Dockerrun.aws.json.

Exemple ~/remote-docker/Dockerrun.aws.json
{ "AWSEBDockerrunVersion": "1", "Image": { "Name": "username/beanstalk-flask", "Update": "true" }, "Ports": [ { "ContainerPort": "5000" } ] }

Utilisez l'interface de ligne de commande (CLI) EB pour configurer votre référentiel local pour le déploiement dans Elastic Beanstalk.

~/remote-docker$ eb init -p docker application-name

(Facultatif) Utilisez eb local run pour créer et exécuter votre conteneur en local. Pour de plus amples informations sur la commande eb local, veuillez consulter eb local.

~/remote-docker$ eb local run --port 5000

(Facultatif) Lorsque votre conteneur est en cours d'exécution, utilisez la commande eb local open pour afficher votre application dans un navigateur web. Vous pouvez également ouvrir http://localhost:5000/ dans un navigateur web.

~/remote-docker$ eb local open

Déploiement d'une image Docker distante sur Elastic Beanstalk

Après avoir testé votre conteneur localement, déployez-le dans un environnement Elastic Beanstalk. Elastic Beanstalk utilise le fichier docker-compose.yml pour extraire et exécuter votre image si vous utilisez Docker Compose. Sinon, Elastic Beanstalk utilise le fichier Dockerrun.aws.json.

Utilisez l'interface de ligne de commande (CLI) EB pour créer un environnement et déployer votre image.

~/remote-docker$ eb create environment-name

Une fois que votre environnement est lancé, utilisez eb open pour l'afficher dans un navigateur web.

~/remote-docker$ eb open

Nettoyage

Lorsque vous avez fini d'utiliser Elastic Beanstalk, vous pouvez arrêter votre environnement. Elastic Beanstalk arrête toutes les ressources AWS associées à votre environnement, telles que les instances Amazon EC2, les instances de base de données, les équilibreurs de charge, les groupes de sécurité et les alarmes.

Pour arrêter votre environnement Elastic Beanstalk
  1. Ouvrez la console Elastic Beanstalk et, dans la liste Regions (Régions), sélectionnez votre Région AWS.

  2. Dans le panneau de navigation, choisissez Environments (Environnements), puis choisissez le nom de votre environnement dans la liste.

    Note

    Si vous avez plusieurs environnements, utilisez la barre de recherche pour filtrer la liste des environnements.

  3. Choisissez Actions (Actions), puis Terminate Environment (Résilier l’environnement).

  4. Utilisez la boîte de dialogue à l'écran pour confirmer la résiliation de l'environnement.

Avec Elastic Beanstalk, vous pouvez facilement créer un nouvel environnement pour votre application à tout moment.

Ou, avec l'interface de ligne de commande (CLI) EB :

~/remote-docker$ eb terminate environment-name