Développer une Application FastAPI dans un Conteneur Docker (2023)

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.

Top Articles
Latest Posts
Article information

Author: Jamar Nader

Last Updated: 10/10/2023

Views: 5989

Rating: 4.4 / 5 (55 voted)

Reviews: 94% of readers found this page helpful

Author information

Name: Jamar Nader

Birthday: 1995-02-28

Address: Apt. 536 6162 Reichel Greens, Port Zackaryside, CT 22682-9804

Phone: +9958384818317

Job: IT Representative

Hobby: Scrapbooking, Hiking, Hunting, Kite flying, Blacksmithing, Video gaming, Foraging

Introduction: My name is Jamar Nader, I am a fine, shiny, colorful, bright, nice, perfect, curious person who loves writing and wants to share my knowledge and understanding with you.