Cómo implementar una aplicación de Python Flask API en Docker

Si eres nuevo en Docker y los contenedores, aprender a implementar una aplicación de API de Python Flask en Docker es una excelente manera de comenzar. Docker te permite contenerizar aplicaciones con tecnología liviana y seguridad para una implementación rápida de aplicaciones.

En este tutorial, aprenderás a convertirte en tu propio maestro para configurar e implementar aplicaciones de API de Python Flask en contenedores Docker.

¡Prepárate y comienza la implementación!

Prerrequisitos

Si deseas seguir paso a paso, necesitarás tener instalado lo siguiente:

  • Máquina Ubuntu con Docker instalado. Este tutorial utiliza Ubuntu 18.04.5 LTS con Docker v19.03.8.
  • Python v3.9 o posterior instalado en la máquina Ubuntu. Este tutorial utilizará Python v3.9.2 en una máquina Ubuntu.
  • Elinks instalado en la máquina Ubuntu utilizado para probar la API en este tutorial.

Creando una aplicación API de Python Flask (API GET y POST)

Comienza este tutorial creando una aplicación Python Flask. Flask es un marco de aplicación web micro WSGI ligero escrito en Python. Flask proporciona herramientas y características útiles para crear aplicaciones web en Python.

Antes de crear una aplicación Python Flask, instalarás Python Flask y un entorno virtual de Python donde Flask ejecutará una aplicación.

1. Inicia sesión en tu máquina Ubuntu utilizando tu cliente SSH favorito.

2. A continuación, ejecuta los siguientes comandos para crear un directorio llamado ~/docker_python_flask_demo y cambiarte a ese. Este directorio contendrá todos los archivos requeridos por Python y Docker para ejecutar una aplicación.

mkdir ~/docker_python_flask_demo
cd ~/docker_python_flask_demo

3. Ejecuta el comando pip de abajo para instalar un entorno virtual de Python (virtualenv) que Flask necesita para ejecutar las aplicaciones. Un entorno virtual de Python ofrece su propio binario de Python y paquetes instalados por aplicación para evitar conflictos con otras aplicaciones.

pip install virtualenv
Installing the environment needed by Flask to execute the applications

4. Ejecuta el comando virtualenv de abajo para crear y activar un entorno virtual utilizando el módulo venv.

virtualenv venv
Creating the virtual environment for Python

5. Ahora, ejecuta el comando de abajo para instalar el paquete Python flask con el administrador de paquetes pip.

pip install flask

6. Ejecute el siguiente comando para activar los paquetes en su entorno virtual antes de poder instalarlos o usarlos. Esto modifica la variable de entorno VIRTUAL_ENV para que apunte a su entorno virtual y antepone el binario de Python del entorno virtual al camino, de modo que ejecute el binario correcto.

source venv/bin/activate

7. Cree un archivo más, llamado requirements.txt, y defina la dependencia de la aplicación Flask, como se muestra a continuación.

Flask==2.0.2

8. Cree un archivo de texto ~/docker_python_flask_demo/app.py y llénelo con el siguiente código en Python.

El siguiente código en Python importa la clase flask y crea una instancia de la clase llamada app. La instancia de la clase app contiene dos funciones login() que se ejecutan cuando los usuarios envían solicitudes en la página /login.

La función success() se ejecuta luego, mostrando el mensaje de bienvenida “nombre-del-usuario” en el navegador.


from flask import Flask , redirect , url_for , request # Importando la clase flask
# app es el objeto o instancia de Flask
app = Flask(__name__)
# app.route informa a Flask sobre la URL que debe usar la función
@app.route('/success/<name>')
# Creando una función llamada success
def success(name):
    return 'welcome %s' % name

@app.route('/login', methods = ['GET','POST'])
# Creando una función llamada login
def login():
    if request.method == 'POST':
       user = request.form['adamlistek']
       return redirect(url_for('success', name = user)) 
    else:
       return "INVALID"
# Los programas se ejecutan desde aquí en un servidor de desarrollo (localmente en su sistema)
# con la depuración habilitada.
  
if __name__ == '__main__':
   app.run(debug = True)

9. Crea un archivo más llamado ~/docker_python_flask_demo/form.html y copia/pega el siguiente código.

Al ejecutar el código HTML a continuación se crea un formulario con dos campos de entrada; uno es para proporcionar tu nombre y el otro es un botón de enviar.

Tan pronto como proporciones un nombre de usuario y presiones el botón de enviar, se envía una solicitud POST, y Flask ejecuta otra función y abre una nueva página web en http://localhost:5000/success/<username>.

<html>
  <body>
    <form action="http://localhost:5000/login" method="post">
      <p>Please Enter your name</p>
      <p><input type="text" name="adamlistek" /></p>
      <p><input type="submit" value="Submit" /></p>
    </form>
  </body>
</html>

10. Finalmente, ejecuta el comando Python a continuación para verificar que la aplicación (app.py) funcione localmente en tu sistema.

Python app.py

Como puedes ver a continuación, la aplicación se está ejecutando correctamente en la máquina Ubuntu pero no en Docker. Lanzarás la misma aplicación en Docker en las siguientes secciones.

Running the Python application on the ubuntu machine.

Creación de un Dockerfile para Implementar la Aplicación de la API de Python Flask

Acabas de crear y verificar que la aplicación Python Flask funcione localmente en tu máquina. Pero antes de implementar la aplicación en Docker, primero crearás un Dockerfile para definir todos los conjuntos de instrucciones para construir la imagen de Docker.

Crea un archivo llamado Dockerfile en el directorio ~/docker_python_flask_demo, y copia/pega el contenido siguiente en el Dockerfile.

Docker utilizará este Dockerfile para ejecutar todas las instrucciones o comandos necesarios para construir una nueva imagen de Docker sobre la imagen base (ubuntu:18.04).

# Establece la imagen base para las instrucciones subsiguientes
FROM ubuntu:18.04
# Establece el directorio de trabajo en el contenedor
WORKDIR /app
RUN apt-get update -y
RUN apt-get install -y python-pip python-dev
# Copia los archivos al directorio de trabajo
COPY form.html /app/form.html
# Copia los archivos de dependencias al directorio de trabajo
COPY requirements.txt /app/requirements.txt
# Instala las dependencias
RUN pip install -r requirements.txt
# Copia todo al directorio de trabajo
COPY . /app
# Comando a ejecutar al iniciar el contenedor
CMD [ "python" , "./app.py" ]

Ahora, ejecuta el comando tree a continuación para verificar que todos los archivos necesarios para ejecutar la aplicación Python Flask estén contenidos en el directorio de trabajo (~/docker_python_flask_demo).

tree  
Verifying all Required Files to Run the Flask Application Exist

Construyendo una Imagen de Docker para la Aplicación de API Python Flask

Ahora tienes los archivos necesarios para implementar una aplicación Python Flask, pero estos archivos no harán nada a menos que construyas una imagen. Ejecutarás el comando docker build para construir una imagen de Docker basada en las instrucciones que has establecido en el Dockerfile.

Ejecuta el comando docker build a continuación para construir una imagen de Docker en el directorio de trabajo (.). Este comando etiqueta (-t) la imagen como flask-image versión 1 (:v1).

sudo docker build -t flask-image:v1 .
Building the Docker Image

Ahora, ejecuta el comando docker a continuación para listar todas las imágenes disponibles.

sudo docker images

A continuación, puedes ver varios atributos devueltos, como REPOSITORIO. Observa que el nombre del REPOSITORIO es flask-image y está etiquetado con una versión (v1), como se muestra a continuación.

Verifying the New Docker Image (flask-image)

Ejecución de la Aplicación Python Flask en un Contenedor Docker

Después de crear una imagen de Docker, ahora puedes ejecutar la aplicación Python Flask en un contenedor Docker. Un contenedor Docker empaqueta el código y sus dependencias para ejecutar aplicaciones rápidamente.

1. Ejecuta el comando docker run a continuación para realizar lo siguiente:

  • Inicia el contenedor en modo desconectado (-d), para que se ejecute como un proceso en segundo plano y devuelva la salida de la consola al crearlo.
  • Mapea el puerto del host de Docker (-p 5000:5000) con el puerto del contenedor.
  • Arranca el contenedor Docker (flask-image:v1)
sudo docker run -d -p 5000:5000 flask-image:v1

2. A continuación, ejecuta el comando docker a continuación para listar todos los contenedores en el motor de Docker. Verifica si Docker creó el contenedor correctamente.

sudo docker ps -a
Verifying the Docker container in the Docker engine

3. Por último, ejecuta el siguiente comando para abrir tu navegador web en la máquina Ubuntu usando elinks.

elinks form.html

El comando abre el navegador web en la terminal y solicita un nombre, como se muestra a continuación.

Ingresa tu nombre y presiona el botón Enviar.

Accessing the login web page with the form to enter your name

4. Como puedes ver a continuación, después de presionar el botón Enviar, la función de inicio de sesión redirige a la función de éxito en la aplicación Flask.

Displaying the welcome message in the web browser

Conclusión

Este tutorial tuvo como objetivo ayudarte a través del proceso de configuración de un contenedor Docker de API Flask de Python utilizando imágenes de Docker. También has aprendido cómo lanzar contenedores Python Flask usando Dockerfiles, lo que te permite editar y construir contenedores personalizados de tu elección.

Entonces, ¿qué otras aplicaciones tienes en mente para implementar en contenedores Docker? ¿Quizás un contenedor Docker MongoDB?

Source:
https://adamtheautomator.com/python-flask-api/