Introduction
Dans ce tutoriel, nous allons explorer le développement d'une application FastAPI en utilisant Docker pour la conteneurisation. Cette approche offre une gestion efficace des dépendances et une portabilité accrue de l'application. Assurez-vous d'avoir Docker, docker-compose, Poetry et Python 3.11.2 installés sur votre machine avant de commencer.
Mise en Place du Projet
Commencez par créer un nouveau répertoire de projet et initialisez-le avec Poetry. Configurez l'environnement virtuel pour qu'il soit créé à l'intérieur du répertoire du projet. Suivez le tutoriel pour installer les dépendances nécessaires.
Structure du Projet
Créez un répertoire 'app' contenant un fichier 'app.py' qui hébergera le code de votre application FastAPI. Ajoutez également un répertoire 'templates' avec un fichier 'index.html' pour la gestion des modèles.
Code de app.py
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
app = FastAPI()
templates = Jinja2Templates(directory="templates")
@app.get("/", response_class=HTMLResponse)
async def read_root(request: Request):
return templates.TemplateResponse("index.html", {"request": request})
Code de index.html
<!DOCTYPE html>
<html>
<head>
<title>FastAPI Docker Tutorial</title>
</head>
<body>
<h1>FastAPI Docker Tutorial</h1>
<p>Bienvenue dans le tutoriel FastAPI Docker !</p>
</body>
</html>
Installation des Dépendances
Utilisez Poetry pour installer toutes les dépendances du projet à l'intérieur d'un environnement virtuel géré par Poetry.
Création du Dockerfile
Créez un fichier 'Dockerfile' dans le répertoire du projet avec le contenu suivant :
FROM python:3.11.2-buster
ENV DEBIAN_FRONTEND='noninteractive'
RUN apt-get update && apt install -y curl
RUN curl -sSL https://install.python-poetry.org | python
ENV PATH="${PATH}:/root/.local/bin"
RUN poetry config virtualenvs.in-project true
WORKDIR /app
COPY . .
RUN poetry install
EXPOSE 8000
Ce Dockerfile se base sur l'image officielle Python 3.11.2, installe Poetry à l'intérieur du conteneur, configure le répertoire de travail et copie les fichiers du projet. Enfin, il expose le port 8000.
Création du docker-compose.yml
Créez un fichier 'docker-compose.yml' dans le répertoire du projet avec le contenu suivant :
version: "3.8"
services:
tutorial:
build:
context: .
dockerfile: Dockerfile
ports:
- "8000:8000"
volumes:
- .:/app
- /app/.venv
command: [ "poetry", "run", "uvicorn", "--host", "0.0.0.0", "--port", "8000", "app.app:app", "--reload" ]
Ce fichier 'docker-compose.yml' définit un service appelé 'tutorial', spécifie l'utilisation du Dockerfile du répertoire actuel et expose le port 8000. Il monte également deux volumes, assurant la persistance de l'environnement virtuel et l'accès au répertoire du projet.
Démarrage du Conteneur
Lancez le conteneur avec la commande suivante :
docker-compose up --build
Cela construira et démarrera le service 'tutorial' dans un conteneur Docker. Vous devriez voir une sortie indiquant que le serveur Uvicorn est en cours d'exécution.
Test de l'Application
Avec le conteneur en cours d'exécution, testez l'application en ouvrant un navigateur Web et accédant à . Vous devriez voir la page d'accueil de votre application FastAPI.
Arrêt du Conteneur
Pour arrêter le conteneur, utilisez la commande suivante :
docker-compose down
Félicitations ! Vous avez réussi à conteneuriser une application Python FastAPI en utilisant Docker et docker-compose. Ce processus offre une gestion efficace des dépendances, une portabilité accrue et une facilité de déploiement.