Exécution d'une application Flask dans un conteneur Docker

DockerBeginner
Pratiquer maintenant

Introduction

Dans ce tutoriel, nous explorerons le processus d'exécution d'une application Flask à l'intérieur d'un conteneur Docker. Nous aborderons les bases de Docker, créerons une application Flask, puis conteneuriserons l'application Flask pour profiter des avantages que Docker offre.

Comprendre Docker

Docker est une plateforme open-source populaire qui permet aux développeurs de construire, déployer et exécuter des applications dans un environnement conteneurisé. Les conteneurs sont des paquets logiciels légers, autonomes et exécutables qui incluent tout ce dont une application a besoin pour fonctionner, y compris le code, l'environnement d'exécution, les outils système et les bibliothèques.

Qu'est-ce que Docker ?

Docker est un outil conçu pour simplifier la création, le déploiement et l'exécution d'applications à l'aide de conteneurs. Les conteneurs permettent à un développeur d'emballer une application avec toutes les parties nécessaires, telles que les bibliothèques et autres dépendances, et de les distribuer en un seul paquet.

Architecture Docker

L'architecture Docker se compose des composants suivants :

graph TD A[Client Docker] --> B[Daemon Docker] B --> C[Images Docker] B --> D[Conteneurs Docker] B --> E[Registres Docker]
  • Client Docker : L'interface utilisateur pour interagir avec le système Docker.
  • Daemon Docker : Le processus en arrière-plan qui gère les objets Docker, tels que les images, les conteneurs, les réseaux et les volumes.
  • Images Docker : Les modèles pour créer des conteneurs Docker.
  • Conteneurs Docker : Les instances exécutables des images Docker.
  • Registres Docker : Les référentiels pour stocker et distribuer les images Docker.

Avantages de l'utilisation de Docker

  1. Environnements cohérents : Docker garantit que les applications fonctionnent de la même manière, quel que soit l'infrastructure sous-jacente.
  2. Scalabilité : Les conteneurs Docker peuvent être facilement mis à l'échelle pour répondre à la demande changeante.
  3. Portabilité : Les conteneurs Docker peuvent s'exécuter sur n'importe quel système disposant de Docker installé, ce qui facilite le déplacement des applications entre différents environnements.
  4. Efficacité : Les conteneurs Docker sont légers et utilisent moins de ressources que les machines virtuelles traditionnelles.
  5. Isolation : Les conteneurs Docker offrent un haut degré d'isolation, garantissant que les applications s'exécutent dans un environnement sécurisé et cohérent.

Démarrer avec Docker

Pour commencer avec Docker, vous devez installer le moteur Docker sur votre système. Vous pouvez télécharger Docker sur le site officiel (https://www.docker.com/get-started) et suivre les instructions d'installation pour votre système d'exploitation.

Une fois Docker installé, vous pouvez commencer à construire et à exécuter des conteneurs Docker. Voici un exemple simple d'exécution d'un conteneur Docker avec l'image Ubuntu :

docker run -it ubuntu

Cette commande va télécharger l'image Ubuntu à partir du registre Docker, créer un nouveau conteneur et démarrer une session de shell interactive à l'intérieur du conteneur.

Création d'une application Flask

Flask est un framework web Python populaire, léger, flexible et facile à utiliser. Dans cette section, nous allons créer une application Flask simple.

Configuration de l'environnement de développement

Tout d'abord, configurons l'environnement de développement. Nous utiliserons Python 3.9 et Flask 2.0.2 pour cet exemple.

## Installation de Python 3.9
sudo apt-get update
sudo apt-get install -y python3.9

## Installation de Flask
pip3 install flask==2.0.2

Création d'une application Flask

Maintenant, créons une application Flask simple. Créez un nouveau fichier appelé app.py et ajoutez le code suivant :

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return 'Bonjour, LabEx !'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

Dans cet exemple, nous importons la classe Flask du module flask, créons une nouvelle instance Flask et définissons une route pour l'URL racine (/) qui renvoie la chaîne "Bonjour, LabEx !". Enfin, nous exécutons l'application à l'aide de la méthode app.run().

Exécution de l'application Flask

Pour exécuter l'application Flask, exécutez la commande suivante dans votre terminal :

python3 app.py

Cela démarrera le serveur de développement Flask et rendra votre application accessible à l'adresse http://localhost:5000/.

Ajout de fonctionnalités

Vous pouvez facilement ajouter plus de fonctionnalités à votre application Flask en définissant des routes supplémentaires et en ajoutant de la logique métier. Par exemple, vous pouvez créer une route qui accepte les entrées utilisateur, effectue un traitement et renvoie une réponse.

from flask import Flask, request

app = Flask(__name__)

@app.route('/')
def index():
    return 'Bonjour, LabEx !'

@app.route('/greet', methods=['POST'])
def greet():
    name = request.form['name']
    return f'Bonjour, {name} !'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

Dans cet exemple, nous avons ajouté une nouvelle route /greet qui accepte une requête POST avec un paramètre name. L'application renvoie ensuite un message de salutation avec le nom fourni.

Contenir l'application Flask

Maintenant que nous avons une application Flask de base, contenons-la à l'aide de Docker. La conteneurisation d'une application nous permet de l'emballer, ainsi que ses dépendances, dans une unité autonome facilement déployable et scalable.

Création d'un Dockerfile

Pour conteneuriser notre application Flask, nous devons créer un Dockerfile. Un Dockerfile est un document texte qui contient toutes les commandes qu'un utilisateur pourrait appeler en ligne de commande pour assembler une image.

Créez un nouveau fichier appelé Dockerfile et ajoutez le contenu suivant :

## Utiliser l'image Python officielle comme image de base
FROM python:3.9-slim

## Définir le répertoire de travail à /app
WORKDIR /app

## Copier le fichier requirements.txt dans le conteneur
COPY requirements.txt .

## Installer les dépendances Python
RUN pip install --no-cache-dir -r requirements.txt

## Copier le code de l'application Flask dans le conteneur
COPY app.py .

## Exposer le port sur lequel l'application Flask fonctionnera
EXPOSE 5000

## Définir la commande pour exécuter l'application Flask
CMD ["python", "app.py"]

Dans ce Dockerfile, nous :

  1. Utilisons l'image Python 3.9 slim officielle comme image de base.
  2. Définissons le répertoire de travail sur /app.
  3. Copions le fichier requirements.txt dans le conteneur.
  4. Installons les dépendances Python.
  5. Copions le fichier app.py dans le conteneur.
  6. Exposons le port 5000 pour l'application Flask.
  7. Définissons la commande pour exécuter l'application Flask.

Construction de l'image Docker

Construisons maintenant l'image Docker pour notre application Flask. Dans votre terminal, exécutez la commande suivante :

docker build -t labex-flask-app .

Cette commande construira une image Docker avec l'étiquette labex-flask-app en utilisant le Dockerfile dans le répertoire courant.

Exécution du conteneur Docker

Une fois l'image construite, nous pouvons exécuter l'application Flask dans un conteneur Docker :

docker run -p 5000:5000 labex-flask-app

Cette commande démarrera un nouveau conteneur basé sur l'image labex-flask-app et mappera le port 5000 de l'hôte au port 5000 dans le conteneur.

Vous pouvez maintenant accéder à l'application Flask à l'adresse http://localhost:5000/.

Déploiement de l'image Docker

Une fois votre application Flask conteneurisée, vous pouvez déployer l'image Docker sur un registre de conteneurs, comme Docker Hub ou un registre privé, puis déployer l'application dans un environnement de production.

Résumé

À la fin de ce tutoriel, vous comprendrez parfaitement comment conteneuriser une application Flask à l'aide de Docker. Vous serez capable de construire une image Docker pour votre application Flask, de l'exécuter dans un conteneur Docker et de tirer parti des avantages de Docker pour le développement et le déploiement de Flask.