Ejecución local de un entorno Docker con la CLI de EB - AWS Elastic Beanstalk

Ejecución local de un entorno Docker con la CLI de EB

Puede utilizar la interfaz de línea de comandos de Elastic Beanstalk (EB de CLI) para ejecutar localmente los contenedores Docker configurados en la aplicación de AWS Elastic Beanstalk. La CLI de EB utiliza el archivo de configuración de Docker (Dockerfile o Dockerrun.aws.json) y el código fuente del directorio del proyecto para ejecutar su aplicación localmente en Docker.

Requisitos previos para ejecutar locamente aplicaciones Docker

  • Linux OS o Mac OS X

  • EB CLI versión 3.3 o superior

    Ejecute eb init en el directorio del proyecto para inicializar un repositorio de CLI de EB. Si no ha usado la CLI de EB con anterioridad, consulte Administración de entornos de Elastic Beanstalk con la CLI de EB.

  • Docker versión 1.6 o superior

    Añádase usted mismo al grupo docker, cierre la sesión y vuelva a iniciar sesión para asegurarse de que puede ejecutar comandos de Docker sin sudo:

    $ sudo usermod -a -G docker $USER

    Ejecute docker ps para verificar que el daemon de Docker está en funcionamiento:

    $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  • Una aplicación Docker

    Si no dispone de una aplicación Docker en una carpeta del proyecto de su equipo local, consulte Implementación de aplicaciones de Elastic Beanstalk desde contenedores Docker para obtener una introducción sobre cómo usar Docker con AWS Elastic Beanstalk.

  • Perfil de Docker (opcional)

    Si la aplicación utiliza imágenes de Docker que están en un repositorio privado, ejecute docker login y siga las instrucciones para crear un perfil de autenticación.

  • w3m (opcional)

    W3m es un navegador web que puede utilizar para ver la aplicación web en ejecución en un terminal de línea de comandos con eb local run. Si utiliza la línea de comandos en un entorno de escritorio, no necesita w3m.

Los contenedores Docker se ejecutan localmente sin emular los recursos de AWS que se aprovisionan cuando implementa una aplicación en Elastic Beanstalk, incluidos los grupos de seguridad y los niveles de datos o empleados.

Puede configurar los contenedores locales para que se conecten a una base de datos pasando la cadena de conexión necesaria u otras variables con la opción envvars, pero debe asegurarse de que los recursos de AWS estén accesibles desde su equipo local abriendo los puertos correspondientes en los grupos de seguridad asignados o asociando una gateway predeterminada o dirección IP elástica.

Preparación de una aplicación Docker para usarla con la CLI de EB

Prepare el archivo de configuración y los datos de origen de Docker tal como piensa implementarlos en Elastic Beanstalk. En este tema se utiliza el ejemplo del proxy PHP y nginx del tutorial de Multicontainer Docker, que también se encuentra en este capítulo. Puede utilizar los mismos comandos con cualquier aplicación Docker, Multicontainer Docker o Docker preconfigurada.

Ejecución local de una aplicación Docker

Ejecute la aplicación Docker localmente con el comando eb local run desde el directorio del proyecto:

~/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

La CLI de EB lee la configuración de Docker y ejecuta los comandos de Docker necesarios para ejecutar su aplicación. La primera vez que ejecuta un proyecto localmente, Docker descarga imágenes de un repositorio remoto y las almacena en su equipo local. Este proceso puede tardar varios minutos.

nota

El comando eb local run toma dos parámetros opcionales, port y envvars.

Para invalidar el puerto predeterminado para una aplicación de Docker, use la opción port:

$ eb local run --port 8080

Este comando indica a la CLI de EB que use el puerto 8080 del host y lo asigne al puerto expuesto en el contenedor. Si no especifica un puerto, la CLI de EB utiliza el puerto del contenedor del host. Esta opción funciona solo con aplicaciones que utilizan la plataforma Docker.

Para pasar variables de entorno a los contenedores de la aplicación, utilice la opción envvars:

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

Utilice variables de entorno para configurar una conexión a la base de datos, establecer opciones de depuración o pasar claves secretas de forma segura a su aplicación. Para obtener más información sobre las opciones admitidas por los subcomandos eb local, consulte eb local.

Una vez que los contenedores estén funcionando en Docker, estarán listos para recibir solicitudes de los clientes. El proceso eb local permanece abierto mientras los contenedores se estén ejecutando. Si necesita detener el proceso y los contenedores, pulse Ctrl+C.

Abra un segundo terminal para ejecutar comandos adicionales mientras el proceso eb local se está ejecutando. Utilice eb local status para ver el estado de su aplicación:

~/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

Puede utilizar docker ps para ver el estado de los contenedores desde el punto de vista 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

A continuación, vea la aplicación en acción con eb local open:

~/project$ eb local open

Este comando abre la aplicación en el navegador web predeterminado. Si ejecuta un terminal en un entorno de escritorio, este puede ser Firefox, Safari o Google Chrome. Si ejecuta un terminal en un entorno sin encabezado o a través de una conexión SSH, se usará un navegador de línea de comandos, como w3m,, si hay uno disponible.

Vuelva al terminal que ejecuta el proceso de la aplicación y anote la salida adicional:

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

Esta salida muestra que la aplicación web en el contenedor Docker recibió una solicitud GET HTTP para index.php que finalizó correctamente con un estado 200 (sin error).

Ejecute eb local logs para ver dónde la CLI de EB escribe los logs.

~/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.

Limpieza después de la ejecución local de una aplicación Docker

Cuando haya terminado de probar la aplicación localmente, puede detener las aplicaciones y eliminar las imágenes descargadas por Docker mediante eb local run. La eliminación de las imágenes es opcional. Es posible que desee conservarlas para usarlas en el futuro.

Vuelva al terminal que ejecuta el proceso eb local y pulse Ctrl+C para detener la aplicación:

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

La CLI de EB intenta detener cada contenedor en ejecución de forma limpia con comandos de Docker. Si necesita detener un proceso inmediatamente, pulse de nuevo Ctrl+C.

Después de detener las aplicaciones, también se debe detener la ejecución de los contenedores. Verifique esto con 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

La opción all muestra los contenedores detenidos (si ha omitido esta opción, la salida estará vacía). En el ejemplo anterior, Docker muestra que los contenedores dejaron de ejecutarse con un estado 0 (sin error).

Si ha terminado de usar Docker y los comandos locales de la CLI de EB, puede eliminar las imágenes de Docker de su equipo local para ahorrar espacio.

Para eliminar las imágenes de Docker de su equipo local

  1. Vea las imágenes que ha descargado mediante 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. Elimine los dos contenedores Docker con docker rm:

    $ docker rm 73d515d99d2a 7061c76220de 73d515d99d2a 7061c76220de
  3. Elimine las imágenes con docker rmi:

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