Exécution d'un environnement Docker localement avec l'interface de ligne de commande (CLI) EB - 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.

Exécution d'un environnement Docker localement avec l'interface de ligne de commande (CLI) EB

Vous pouvez utiliser l'interface de ligne de commande Elastic Beanstalk (CLI) (EB) pour exécuter des conteneurs Docker configurés dans votre application AWS Elastic Beanstalk localement. L'interface de ligne de commande (CLI) EB utilise le fichier de configuration Docker (Dockerfile ou Dockerrun.aws.json) et le code source dans votre répertoire de projet pour exécuter votre application localement dans Docker.

Conditions requises pour exécuter des applications Docker localement

  • Linux OS ou Mac OS X

  • Interface de ligne de commande (CLI) EB version 3.3 ou plus

    Exécutez eb init dans votre répertoire de projet pour initialiser un référentiel de l'interface de ligne de commande (CLI) EB. Si vous n'avez jamais utilisé l'interface de ligne de commande (CLI) EB, veuillez consulter Gestion des environnements Elastic Beanstalk avec l'interface de ligne de commande EB.

  • Docker version 1.6 ou ultérieure

    Ajoutez vous-même au groupe docker, déconnectez-vous et puis reconnectez-vous afin de garantir que vous pouvez exécuter des commandes Docker sans sudo :

    $ sudo usermod -a -G docker $USER

    Exécutez docker ps pour vérifier que le démon Docker est opérationnel :

    $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  • Une application Docker

    Si vous n'avez pas d'application Docker dans un dossier de projet sur votre ordinateur local, consultez Déploiement d'applications Elastic Beanstalk à partir de conteneurs Docker pour une introduction à l'utilisation de Docker avec AWS Elastic Beanstalk.

  • Profil de docker (facultatif)

    Si votre application utilise des images Docker dans un référentiel privé, exécutez docker login et suivez les invites pour créer un profil d'authentification.

  • w3m (facultatif)

    W3m est un navigateur web que vous pouvez utiliser pour afficher votre application web en cours d'exécution au sein d'un terminal de ligne de commande avec eb local run. Si vous utilisez la ligne de commande dans un environnement de bureau, vous n'avez pas besoin de w3m.

Les conteneurs Docker s'exécutent localement sans émuler les ressources AWS qui sont allouées lorsque vous déployez une application Elastic Beanstalk, y compris des groupes de sécurité et des données ou des niveaux de travail.

Vous pouvez configurer vos conteneurs locaux pour vous connecter à une base de données en passant la chaîne de connexion nécessaires ou d'autres variables avec l'option envvars, mais vous devez vous assurer que toutes les ressources dans AWS sont accessibles à partir de votre ordinateur local en ouvrant les ports appropriés dans leurs groupes de sécurité affectés ou en attachant une passerelle par défaut ou une adresse IP Elastic.

Préparation d'une application Docker en vue de son utilisation avec l'interface de ligne de commande (CLI) EB

Préparez vos données source et votre fichier de configuration Docker comme si vous étiez en train de les déployer sur Elastic Beanstalk. Cette rubrique utilise l'exemple de proxy PHP et nginx du Tutoriel Docker multiconteneurs, qui figure également dans ce chapitre. Vous pouvez utiliser les mêmes commandes avec n'importe quelle application Docker, Docker multiconteneurs ou Docker préconfiguré.

Exécution d'une application Docker localement

Exécutez votre application Docker localement avec la commande eb local run à partir du répertoire de projet :

~/project$ eb local run Creating elasticbeanstalk_phpapp_1... Creating elasticbeanstalk_nginxproxy_1... Attaching to elasticbeanstalk_phpapp_1, elasticbeanstalk_nginxproxy_1 phpapp_1 | [23-Apr-2015 23:24:25] NOTICE: fpm is running, pid 1 phpapp_1 | [23-Apr-2015 23:24:25] NOTICE: ready to handle connections

L'interface de ligne de commande (CLI) EB lit la configuration Docker et exécute les commandes Docker nécessaires pour exécuter votre application. La première fois que vous exécutez un projet localement, Docker télécharge des images à partir d'un référentiel distance et les stocke sur votre ordinateur local. Ce processus peut prendre plusieurs minutes.

Note

La commande eb local run prend deux paramètres facultatifs, port et envvars.

Pour remplacer le port par défaut pour une application Docker multi-conteneurs, utilisez l'option port :

$ eb local run --port 8080

Cette commande indique l'interface de ligne de commande (CLI) EB pour utiliser le port 8080 sur l'hôte et le mapper avec le port exposé sur le conteneur. Si vous ne spécifiez pas un port, l'interface de ligne de commande (CLI) EB utilise le port du conteneur pour l'hôte. Cette option ne fonctionne qu'avec les applications utilisant la plateforme Docker.

Pour passer des variables d'environnement aux conteneurs d'application, utilisez l'option envvars :

$ eb local run --envvars RDS_HOST=$RDS_HOST,RDS_DB=$RDS_DB,RDS_USER=$RDS_USER,RDS_PASS=$RDS_PASS

Utilisez des variables de l'environnement pour configurer une connexion de base de données, définissez des options de débogage ou transmettez des secrets en toute sécurité à votre application. Pour de plus amples informations sur les options prises en charge par les sous-commandes eb local, veuillez consulter eb local.

Une fois que les conteneurs sont opérationnels dans Docker, ils sont prêts à prendre des demandes des clients. Le processus eb local reste ouvert aussi longtemps que les conteneurs sont en cours d'exécution. Si vous avez besoin d'arrêter le processus et les conteneurs, appuyez sur Ctrl+C.

Ouvrez un second terminal pour exécuter des commandes supplémentaires pendant que le processus eb local est en cours d'exécution. Utilisez eb local status pour afficher l'état de votre application :

~/project$ eb local status Platform: 64bit Amazon Linux 2014.09 v1.2.1 running Multi-container Docker 1.3.3 (Generic) Container name: elasticbeanstalk_nginxproxy_1 Container ip: 127.0.0.1 Container running: True Exposed host port(s): 80 Full local URL(s): 127.0.0.1:80 Container name: elasticbeanstalk_phpapp_1 Container ip: 127.0.0.1 Container running: True Exposed host port(s): None Full local URL(s): None

Vous pouvez utiliser docker ps afin de voir l'état des conteneurs du point de vue de Docker :

~/project$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6a8e71274fed nginx:latest "nginx -g 'daemon of 9 minutes ago Up 9 minutes 0.0.0.0:80->80/tcp, 443/tcp elasticbeanstalk_nginxproxy_1 82cbf620bdc1 php:fpm "php-fpm" 9 minutes ago Up 9 minutes 9000/tcp elasticbeanstalk_phpapp_1

Ensuite, affichez votre application en action avec eb local open:

~/project$ eb local open

Cette commande ouvre votre application dans le navigateur web par défaut. Si vous exécutez un terminal dans un environnement de bureau, il peut s'agir de Firefox, de Google Chrome ou de Safari. Si vous exécutez un terminal dans un environnement sans tête ou via une connexion SSH, un navigateur de ligne de commande, comme w3m, sera utilisé s'il est disponible.

Revenez au terminal exécutant le processus de demande pendant un moment et notez le résultat supplémentaire :

phpapp_1 | 172.17.0.36 - 21/Apr/2015:23:46:17 +0000 "GET /index.php" 200

Cela montre que l'application web dans le conteneur Docker a reçu une demande HTTP GET pour index.php qui a été renvoyée avec succès avec un état 200 (sans erreur).

Exécutez eb local logs pour voir où l'interface de ligne de commande (CLI) EB écrit les journaux.

~/project$ eb local logs Elastic Beanstalk will write logs locally to /home/user/project/.elasticbeanstalk/logs/local. Logs were most recently created 3 minutes ago and written to /home/user/project/.elasticbeanstalk/logs/local/150420_234011665784.

Nettoyage après l'exécution d'une application Docker localement

Lorsque vous avez terminé le test de votre application localement, vous pouvez arrêter les applications et supprimer les images téléchargées par Docker lorsque vous utilisez eb local run. La suppression des images est optionnelle. Vous pouvez souhaiter les conserver pour les utiliser ultérieurement.

Revenez au terminal exécutant le processus eb local et appuyez sur Ctrl+C pour arrêter l'application :

^CGracefully stopping... (press Ctrl+C again to force) Stopping elasticbeanstalk_nginxproxy_1... Stopping elasticbeanstalk_phpapp_1... Aborting. [1]+ Exit 5 eb local run

L'interface de ligne de commande (CLI) EB tente d'arrêter chaque conteneur en cours d'exécution normalement à l'aide de commandes Docker. Si vous avez besoin d'arrêter un processus immédiatement, appuyez à nouveau sur Ctrl+C.

Une fois que vous avez arrêté les applications, les conteneurs Docker doivent aussi arrêter de s'exécuter. Vérifiez cela avec docker ps:

$ docker ps --all CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 73d515d99d2a nginx:latest "nginx -g 'daemon of 21 minutes ago Exited (0) 11 minutes ago elasticbeanstalk_nginxproxy_1 7061c76220de php:fpm "php-fpm" 21 minutes ago Exited (0) 11 minutes ago elasticbeanstalk_phpapp_1

L'option all montre des conteneurs arrêtés (si vous omettez cette option, le résultat sera vide). Dans l'exemple ci-dessus, Docker montre que les deux conteneurs ont terminé avec un état 0 (sans erreur).

Si vous avez terminé d'utiliser les commandes locales de l'interface de ligne de commande (CLI) EB et Docker, vous pouvez supprimer les images Docker de votre ordinateur local pour économiser de l'espace.

Pour supprimer les images Docker de votre ordinateur local
  1. Affichez les images que vous avez téléchargées à l'aide de docker images:

    $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE php fpm 68bc5150cffc 1 hour ago 414.1 MB nginx latest 637d3b2f5fb5 1 hour ago 93.44 MB
  2. Supprimez les deux conteneurs Docker avec docker rm:

    $ docker rm 73d515d99d2a 7061c76220de 73d515d99d2a 7061c76220de
  3. Supprimez les images avec docker rmi:

    $ docker rmi 68bc5150cffc 637d3b2f5fb5 Untagged: php:fpm Deleted: 68bc5150cffc0526c66b92265c3ed8f2ea50f3c71d266aa655b7a4d20c3587b0 Untagged: nginx:latest Deleted: 637d3b2f5fb5c4f70895b77a9e76751a6e7670f4ef27a159dad49235f4fe61e0