Comment déployer une application API Flask Python sur Docker

Si vous êtes nouveau dans Docker et les conteneurs, apprendre à déployer une application API Python Flask sur Docker est un excellent moyen de commencer. Docker vous permet de conteneuriser des applications avec une technologie légère et sécurisée pour un déploiement rapide des applications.

Dans ce tutoriel, vous apprendrez à devenir votre propre maître dans la configuration et le déploiement d’applications API Python Flask sur des conteneurs Docker.

Préparez-vous et commencez le déploiement!

Prérequis

Si vous souhaitez suivre étape par étape, vous aurez besoin des éléments suivants installés:

  • Machine Ubuntu avec Docker installé. Ce tutoriel utilise Ubuntu 18.04.5 LTS avec Docker v19.03.8.
  • Python v3.9 ou ultérieur installé sur la machine Ubuntu. Ce tutoriel utilisera Python v3.9.2 sur une machine Ubuntu.
  • Le package Elinks installé sur la machine Ubuntu utilisée pour tester l’API dans ce tutoriel.

Création d’une application API Python Flask (API GET et POST)

Démarrez ce tutoriel en créant une application Python Flask. Flask est un framework d’application web micro WSGI léger écrit en Python. Flask offre des outils pratiques et des fonctionnalités pour créer des applications web en Python.

Avant de créer une application Python Flask, vous installerez un environnement virtuel Python Flask dans lequel Flask exécutera l’application.

1. Connectez-vous à votre machine Ubuntu à l’aide de votre client SSH préféré.

2. Ensuite, exécutez les commandes suivantes pour créer un répertoire nommé ~/docker_python_flask_demo et basculez vers celui-ci. Ce répertoire contiendra tous les fichiers requis par Python et Docker pour exécuter une application.

mkdir ~/docker_python_flask_demo
cd ~/docker_python_flask_demo

3. Exécutez la commande pip ci-dessous pour installer un environnement virtuel Python (virtualenv) nécessaire à Flask pour exécuter les applications. Un environnement virtuel Python offre son propre binaire Python et des packages installés par application pour éviter les conflits avec d’autres applications.

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

4. Exécutez la commande virtualenv ci-dessous pour créer et activer un environnement virtuel en utilisant le module venv.

virtualenv venv
Creating the virtual environment for Python

5. Maintenant, exécutez la commande ci-dessous pour installer le package Python flask avec le gestionnaire de packages pip.

pip install flask

6. Exécutez la commande suivante pour activer les packages dans votre environnement virtuel avant de pouvoir les installer ou les utiliser. Cela modifie la variable d’environnement VIRTUAL_ENV pour pointer vers votre environnement virtuel et préfixe le binaire Python de l’environnement virtuel au chemin afin que vous exécutiez le binaire correct.

source venv/bin/activate

7. Créez un autre fichier, nommé requirements.txt, et définissez la dépendance de l’application Flask, comme indiqué ci-dessous.

Flask==2.0.2

8. Créez un fichier texte ~/docker_python_flask_demo/app.py et remplissez le fichier avec le code Python ci-dessous.

Le code Python ci-dessous importe la classe Python flask et crée une instance de classe nommée app. L’instance de classe app contient deux fonctions login() exécutées lorsque les utilisateurs envoient des requêtes sur la page /login.

La fonction success() s’exécute ensuite, affichant le message de bienvenue « nom-de-l’utilisateur » sur le navigateur.


from flask import Flask , redirect , url_for , request # Importation de la classe flask
# app est l'objet ou l'instance de Flask
app = Flask(__name__)
# app.route informe Flask de l'URL à utiliser par la fonction
@app.route('/success/<name>')
# Création d'une fonction nommée success
def success(name):
    return 'welcome %s' % name

@app.route('/login', methods = ['GET','POST'])
# Création d'une fonction nommée login 
def login():
    if request.method == 'POST':
       user = request.form['adamlistek']
       return redirect(url_for('success', name = user)) 
    else:
       return "INVALID"
# Les programmes s'exécutent à partir d'ici dans un serveur de développement (en local sur votre système) 
# avec le débogage activé. 
  
if __name__ == '__main__':
   app.run(debug = True)

9. Créez un autre fichier nommé ~/docker_python_flask_demo/form.html et copiez/collez le code ci-dessous.

L’exécution du code HTML ci-dessous crée un formulaire avec deux entrées ; l’une est du texte pour fournir votre nom, et l’autre est un bouton de soumission.

Dès que vous fournissez un nom d’utilisateur et appuyez sur le bouton de soumission, une demande POST est envoyée et Flask exécute une autre fonction et ouvre une nouvelle page web sur 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. Enfin, exécutez la commande Python ci-dessous pour vérifier que l’application (app.py) fonctionne localement sur votre système.

Python app.py

Comme vous pouvez le voir ci-dessous, l’application fonctionne avec succès sur la machine Ubuntu mais pas sur Docker. Vous lancerez la même application sur Docker dans les sections suivantes.

Running the Python application on the ubuntu machine.

Création d’un Dockerfile pour déployer l’application API Python Flask

Vous venez de créer et de vérifier que l’application Python Flask fonctionne localement sur votre machine. Mais avant de déployer l’application sur Docker, vous allez d’abord créer un Dockerfile pour définir tous les ensembles d’instructions pour construire l’image Docker.

Créez un fichier nommé Dockerfile dans le répertoire ~/docker_python_flask_demo, et copiez/collez le contenu ci-dessous dans le Dockerfile.

Docker utilisera ce Dockerfile pour exécuter toutes les instructions ou commandes nécessaires afin de construire une nouvelle image Docker sur la base de l’image de base (ubuntu:18.04).

# Définit l'image de base pour les instructions suivantes
FROM ubuntu:18.04
# Définit le répertoire de travail dans le conteneur
WORKDIR /app
RUN apt-get update -y
RUN apt-get install -y python-pip python-dev
# Copie les fichiers dans le répertoire de travail
COPY form.html /app/form.html
# Copie les fichiers de dépendances dans le répertoire de travail
COPY requirements.txt /app/requirements.txt
# Installe les dépendances
RUN pip install -r requirements.txt
# Copie tout dans le répertoire de travail
COPY . /app
# Commande à exécuter au démarrage du conteneur
CMD [ "python" , "./app.py" ]

À présent, exécutez la commande tree ci-dessous pour vérifier que tous les fichiers nécessaires pour exécuter l’application Python Flask sont présents dans le répertoire de travail (~/docker_python_flask_demo).

tree  
Verifying all Required Files to Run the Flask Application Exist

Construction d’une image Docker pour l’application API Python Flask

Vous disposez désormais des fichiers nécessaires pour déployer une application Python Flask, mais ces fichiers ne feront rien à moins que vous ne construisiez une image. Vous utiliserez la commande docker build pour construire une image Docker en fonction des instructions que vous avez définies dans le Dockerfile.

Exécutez la commande docker build ci-dessous pour construire une image Docker dans le répertoire de travail (.). Cette commande étiquette (-t) l’image comme flask-image version 1 (:v1).

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

Maintenant, exécutez la commande docker ci-dessous pour lister toutes les images disponibles.

sudo docker images

Ci-dessous, vous pouvez voir différentes attributs renvoyés, tels que REPOSITORY. Remarquez que le nom du REPOSITORY est flask-image et est étiqueté avec une version (v1), comme indiqué ci-dessous.

Verifying the New Docker Image (flask-image)

Exécution de l’application Python Flask dans un conteneur Docker

Après avoir créé une image Docker, vous pouvez maintenant exécuter l’application flash Python dans un conteneur Docker. Un conteneur Docker regroupe le code et ses dépendances pour exécuter des applications rapidement.

1. Exécutez la commande docker run ci-dessous pour effectuer ce qui suit :

  • Démarrer le conteneur en mode détaché (-d), donc il s’exécute en arrière-plan et renvoie la sortie de la console lors de la création.
  • Associer le port hôte Docker (-p 5000:5000) avec le port du conteneur.
  • Lance le conteneur Docker (flask-image:v1)
sudo docker run -d -p 5000:5000 flask-image:v1

2. Ensuite, exécutez la commande docker ci-dessous pour répertorier tous les conteneurs dans le moteur Docker. Vérifiez si Docker a créé le conteneur avec succès.

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

3. Enfin, exécutez la commande ci-dessous pour ouvrir votre navigateur Web dans la machine Ubuntu à l’aide d’elinks.

elinks form.html

La commande ouvre le navigateur Web dans le terminal et demande un nom, comme indiqué ci-dessous.

Entrez votre nom et appuyez sur le bouton Soumettre.

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

4. Comme vous pouvez le voir ci-dessous, après avoir appuyé sur le bouton Soumettre, la fonction de connexion redirige vers la fonction de réussite dans l’application Flask.

Displaying the welcome message in the web browser

Conclusion

Ce tutoriel visait à vous aider à travers le processus de configuration d’un conteneur Docker Python Flask API en utilisant des images Docker. Vous avez également abordé comment lancer des conteneurs Python Flask en utilisant des fichiers Dockerfile, ce qui vous permet de modifier et de créer des conteneurs personnalisés selon votre choix.

Quelles autres applications avez-vous en tête pour déployer sur un conteneur Docker ? Peut-être un conteneur Docker MongoDB ?

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