AgentSkillsCN

docker-deploy

面向专业终端用户的生产级 Tauri 桌面应用,具备应用分发与发布意识的权威

SKILL.md
--- frontmatter
name: docker-deploy
description: Conteneurisation Python avec Dockerfile slim, uvicorn, variables d'environnement. Triggers: Docker, conteneur, déploiement, image, container
version: 1.0.0

Docker Deployment

Overview

Pattern de conteneurisation pour une application FastAPI/Python avec image slim, installation optimisée des dépendances, et lancement via uvicorn.

File Structure

code
/
├── Dockerfile           # Définition de l'image
├── src/cuve-api/
│   ├── requirements.txt # Dépendances Python
│   ├── app/
│   │   └── main.py      # Point d'entrée (app.main:app)

Implementation Pattern

Dockerfile complet

dockerfile
# Utilise une image Python slim pour minimiser la taille
FROM python:3.12-slim

# Évite les fichiers .pyc + logs immédiats
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

# Variables d'environnement applicatives
ENV CUVE_MODE=sim

WORKDIR /app

# Dépendances système minimales
RUN apt-get update \
 && apt-get install -y --no-install-recommends curl \
 && rm -rf /var/lib/apt/lists/*

# Installer les deps Python d'abord (meilleur cache Docker)
COPY src/cuve-api/requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir -r /app/requirements.txt

# Copier le code
COPY . /app

# Dossier de travail où se trouve app.main:app
WORKDIR /app/src/cuve-api

EXPOSE 8000

CMD ["python", "-m", "uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]

Commandes de build et run

bash
# Build de l'image
docker build -t cuve-api .

# Run en mode simulation
docker run -p 8000:8000 cuve-api

# Run en mode réel avec variables d'environnement
docker run -p 8000:8000 \
  -e CUVE_MODE=real \
  -e CUVE_SENSOR_URL=http://192.168.1.50/json \
  -v $(pwd)/data:/app/src/cuve-api/data \
  cuve-api

# Run avec fichier .env
docker run -p 8000:8000 --env-file .env cuve-api

Optimisations de cache

L'ordre des instructions est important pour le cache Docker :

  1. Image de base
  2. Variables d'environnement système
  3. Dépendances système (apt-get)
  4. requirements.txt seul (copié séparément)
  5. Installation pip
  6. Code source complet

Cet ordre permet de ne pas réinstaller les dépendances si seul le code change.

Health check (optionnel)

dockerfile
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  CMD curl -f http://localhost:8000/health || exit 1

Rules

Do

  • Utiliser python:X.Y-slim pour réduire la taille de l'image
  • Définir PYTHONDONTWRITEBYTECODE=1 et PYTHONUNBUFFERED=1
  • Copier requirements.txt avant le code pour optimiser le cache
  • Utiliser --no-cache-dir avec pip
  • Nettoyer les caches apt (rm -rf /var/lib/apt/lists/*)
  • Exposer le port explicitement avec EXPOSE
  • Utiliser --host 0.0.0.0 pour écouter sur toutes les interfaces

Don't

  • Ne pas utiliser d'image latest en production
  • Ne pas copier .env ou secrets dans l'image
  • Ne pas utiliser pip install sans --no-cache-dir
  • Ne pas oublier de définir le WORKDIR correct pour uvicorn

File Location

  • Dockerfile : /Dockerfile (racine du projet)
  • Requirements : src/cuve-api/requirements.txt
<!-- Generated by skill-master command Version: 1.0.0 Sources: - Dockerfile - src/cuve-api/requirements.txt Last updated: 2026-02-02 -->