46 lines
1.5 KiB
Docker
46 lines
1.5 KiB
Docker
# --- Phase 1: build des dépendances ---
|
|
# Utilise une image Python complète avec Poetry
|
|
FROM python:3.13-slim AS builder
|
|
|
|
# Définir le répertoire de travail
|
|
WORKDIR /app
|
|
|
|
# Installer Poetry
|
|
RUN pip install poetry==1.8.3
|
|
|
|
# Copier uniquement les fichiers de définition de projet
|
|
COPY pyproject.toml poetry.lock ./
|
|
|
|
# Créer un environnement virtuel dans un emplacement spécifique
|
|
RUN python -m venv /venv
|
|
|
|
# Activer le venv et installer les dépendances (sans dev)
|
|
# Cela permet de mettre en cache cette couche si les dépendances ne changent pas
|
|
RUN . /venv/bin/activate && \
|
|
poetry export -f requirements.txt --output requirements.txt --without-hashes && \
|
|
pip install -r requirements.txt
|
|
|
|
# --- Phase 2: image finale d'éxécution ---
|
|
# Utiliser une image slim car nous n'avons plus besoin des outils de build
|
|
FROM python:3.13-slim
|
|
|
|
# Définir le répertoire de travail
|
|
WORKDIR /app
|
|
|
|
# Copier l'environnement virtuel complet de la phase de build
|
|
COPY --from=builder /venv /venv
|
|
|
|
# Copier le code source de l'application
|
|
# Assumant que le code FastAPI est dans src/
|
|
COPY src/ ./src
|
|
|
|
# Ajouter /app/src au PYTHONPATH pour que Python trouve le module "app"
|
|
ENV PYTHONPATH="${PYTHONPATH}:/app/src"
|
|
|
|
# Exposer le port sur lequel FastAPI (uvicorn) va tourner
|
|
EXPOSE 8000
|
|
|
|
# Commande pour lancer l'application
|
|
# On utilise le binaire uvicorn du venv
|
|
# EB (plateforme Docker) s'attend par défaut à ce que l'app tourne sur le port 8000
|
|
CMD ["/venv/bin/uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] |