Conteneurisation avec Docker

1. Objectifs

  • Uniformiser les environnements de développement et de production
  • Simplifier le déploiement multi-composants
  • Isoler les dépendances et garantir la portabilité

2. Images construites

Chaque composant possède son propre Dockerfile :

  • backend/Dockerfile : API FastAPI
  • frontend/Dockerfile : Application React
  • scraper/Dockerfile : Scrapy Allociné

Exemple de Dockerfile backend :

FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt ./
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8001"]

3. Docker Compose

L’orchestration locale est réalisée via docker-compose.yml à la racine du projet :

docker-compose up -d

Ce fichier permet de lancer simultanément :

  • Backend (FastAPI)
  • Frontend (React)
  • PostgreSQL
  • MongoDB
  • Scraper (job one-shot)

Extrait du docker-compose.yml :

services:
  backend:
    build: ./projet/backend
    ports:
      - "8001:8001"
    depends_on:
      - db
  frontend:
    build: ./projet/frontend
    ports:
      - "3000:3000"
  db:
    image: postgres:15
    ports:
      - "5432:5432"
  mongo:
    image: mongo:latest
    ports:
      - "27017:27017"

Les volumes et réseaux sont automatiquement créés pour l’isolation et la persistance des données.