Uso de la plataforma Docker - AWS Elastic Beanstalk

Uso de la plataforma Docker

importante

Las versiones de la plataforma de Amazon Linux 2 son totalmente diferentes de las versiones de la plataforma AMI de Amazon Linux (anterior a Amazon Linux 2). Estas generaciones distintas de plataformas son incompatibles de varias maneras. Si va a migrar a una versión de la plataforma de Amazon Linux 2, asegúrese de leer la información en Migración de la aplicación de Linux de Elastic Beanstalk a Amazon Linux 2.

AWS Elastic Beanstalk puede lanzar entornos Docker al crear una imagen descrita en un archivo Dockerfile o al extraer una imagen de Docker remota. Si va a implementar una imagen de Docker remota, no tiene que incluir un archivo Dockerfile. En su lugar, si también utiliza Docker Compose, use un archivo docker-compose.yml, que especifica la imagen que se va a usar y las opciones de configuración adicionales. Si no utiliza Docker Compose con sus entornos de Docker, use un archivo Dockerrun.aws.json en su lugar.

Prerequisites

En este tutorial, se da por sentado que usted posee algunos conocimientos sobre las operaciones básicas de la interfaz de la línea de comandos de Elastic Beanstalk (CLI de EB) y Docker. Si aún no lo ha hecho, siga las instrucciones que se indican en Introducción a Elastic Beanstalk para lanzar su primer entorno de Elastic Beanstalk. En este tutorial se utiliza la CLI de EB, pero también puede crear entornos y cargar aplicaciones mediante la consola de Elastic Beanstalk.

Para realizar este tutorial, también necesitará los siguientes componentes de Docker:

  • Una instalación local activa de Docker. Para obtener más información, consulte Descripción de Docker en la página de documentos de Docker.

  • Acceso a Docker Hub. Deberá crear un ID de Docker para poder acceder a Docker Hub. Para obtener más información, consulte Compartir la aplicación en la página de documentos de Docker.

Para obtener más información acerca de la configuración de los entornos Docker en las plataformas Elastic Beanstalk, consulte Configuración de Docker en este mismo capítulo.

Contener una aplicación de Elastic Beanstalk

En este ejemplo, creamos una imagen de Docker de la aplicación Flask de ejemplo de Implementación de una aplicación Flask en Elastic Beanstalk. La aplicación se compone de un archivo principa, application.py. También es necesario un archivo Dockerfile. Coloque ambos archivos en la raíz de un directorio.

~/eb-docker-flask/ |-- Dockerfile |-- application.py

ejemplo ~/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")

ejemplo ~/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"]

Prueba local de contenedor

Utilice la CLI de Elastic Beanstalk (EB CLI) para configurar su repositorio local para su implementación en Elastic Beanstalk. Configure el archivo Dockerfile de la aplicación en la raíz del directorio.

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

(Opcional) Utilice el comando eb local run para crear y ejecutar el contenedor de forma local.

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

Para obtener más información acerca del comando eb local, consulte eb local. El comando no es compatible con Windows. Si lo prefiere, puede crear y ejecutar el contenedor con los comandos docker build y docker run. Para obtener más información, consulte la documentación de Docker.

(Opcional) Aunque el contenedor se está ejecutando, utilice el comando eb local open para ver la aplicación en un navegador web. Si lo prefiere, abra http://localhost:5000/ en un navegador web.

~/eb-docker-flask$ eb local open

Implementación de un contenedor con un archivo de Docker

Después de probar su aplicación localmente, implemente en un entorno de Elastic Beanstalk. Elastic Beanstalk utiliza las instrucciones de su Dockerfile para crear y ejecutar la imagen.

Use el comando eb create para crear un entorno e implementar su aplicación.

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

Una vez que se lanza el entorno, utilice el comando eb open para verlo en un explorador Web.

~/eb-docker-flask$ eb open

Prueba de un imagen de Docker remota

A continuación, crearemos una imagen de Docker de la aplicación Flask de la sección anterior y la enviaremos a Docker Hub.

Notes
  • Los siguientes pasos crearán una imagen de Docker disponible públicamente.

  • Utilizará los comandos Docker de su instalación local de Docker, junto con las credenciales de Docker Hub. Para obtener más información, consulte la sección Prerequisites anterior.

Una vez que hemos creado y enviado nuestra imagen, podemos implementarla en Elastic Beanstalk con un archivo docker-compose.yml, si se utiliza Docker Compose con el entorno de Docker. Si no utiliza Docker Compose con su entorno de Docker, use un archivo Dockerrun.aws.json en su lugar. Para crear una imagen de Docker de la aplicación Flask de la sección anterior y enviarla a Docker Hub, ejecute los siguientes comandos. Vamos a usar el mismo directorio del ejemplo anterior, pero puede usar cualquier directorio con el código de la aplicación. Ingrese su ID de Docker en docker-id para iniciar sesión en Docker Hub.

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

Antes de enviar la imagen, es posible que deba ejecutar docker login. Se le pedirán las credenciales de Docker Hub si ejecuta el comando sin parámetros.

Si utiliza la herramienta Docker Compose para administrar su entorno de Docker, ahora puede implementar su aplicación utilizando solo un archivo docker-compose.yml. Para obtener más información sobre los archivos docker-compose.yml, consulte Configuración de Docker.

Si no utiliza Docker Compose, use un archivo Dockerrun.aws.json en su lugar. Para obtener más información, consulte Implementación mediante el uso de Dockerrun.aws.json v1 (sin Docker Compose).

Cree un nuevo directorio y un archivo docker-compose.yml.

ejemplo ~/remote-docker/docker-compose.yml

version: '3.8' services: beanstalk-flask: image: "username/beanstalk-flask" ports: - "80:5000"

Si no utiliza la herramienta Docker Compose para administrar su entorno de Docker, ahora puede implementar su aplicación utilizando solo un archivo Dockerrun.aws.json. Para obtener más información sobre los archivos Dockerrun.aws.json, consulte Configuración de plataformas de Docker (sin Docker Compose) .

Cree un nuevo directorio y un archivo Dockerrun.aws.json.

ejemplo ~/remote-docker/Dockerrun.aws.json

{ "AWSEBDockerrunVersion": "1", "Image": { "Name": "username/beanstalk-flask", "Update": "true" }, "Ports": [ { "ContainerPort": "5000" } ] }

Utilice la CLI de EB para configurar el repositorio local con el fin de implementarse en Elastic Beanstalk.

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

(Opcional) Utilice eb local run para crear y ejecutar el contenedor de forma local. Para obtener más información acerca del comando eb local, consulte eb local.

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

(Opcional) Aunque el contenedor se está ejecutando, utilice el comando eb local open para ver la aplicación en un navegador web. Si lo prefiere, abra http://localhost:5000/ en un navegador web.

~/remote-docker$ eb local open

Implementar una imagen remota de Docker en Elastic Beanstalk

Después de probar su contenedor localmente, implemente en un entorno de Elastic Beanstalk. Elastic Beanstalk utiliza el docker-compose.yml archivo para extraer y ejecutar la imagen si está utilizando Docker Compose. De lo contrario, Elastic Beanstalk utiliza el Dockerrun.aws.json en su lugar.

Use la CLI de EB para crear un entorno e implementar la imagen.

~/remote-docker$ eb create environment-name

Una vez que su entorno se haya lanzado, utilice eb open para verlo en un navegador web.

~/remote-docker$ eb open

Eliminar recursos

Cuando termine de trabajar con Elastic Beanstalk, puede terminar su entorno. Elastic Beanstalk termina todos los recursos de AWS asociados al entorno, tales como las instancias de Amazon EC2, las instancias de base de datos, los equilibradores de carga, los grupos de seguridad y las alarmas.

Para terminar su entorno de Elastic Beanstalk

  1. Abra la consola de Elastic Beanstalk y, en la lista Regions (Regiones), seleccione su región de AWS.

  2. En el panel de navegación, elija Environments (Entornos) y, a continuación, elija el nombre del entorno en la lista.

    nota

    Si tiene muchos entornos, utilice la barra de búsqueda para filtrar la lista de entornos.

  3. Elija Environment actions (Acciones de entorno) y, a continuación, Terminate environment (Terminar entorno).

  4. Utilice el cuadro de diálogo en pantalla para confirmar la terminación del entorno.

Con Elastic Beanstalk, puede crear fácilmente un nuevo entorno para su aplicación en cualquier momento.

O, con la CLI de EB:

~/remote-docker$ eb terminate environment-name