🐳 Déploiement Docker - Classificateur de Déchets IA
Guide complet pour dockeriser et déployer l'interface de classification de déchets avec Docker.
📋 Prérequis
- Docker : Installé sur votre machine
- Docker Compose : Pour la gestion des services
- Modèles entraînés : Assurez-vous que vos modèles v1 et v2 sont disponibles
🚀 Démarrage rapide
1. Construction et lancement automatique
# Construire l'image et démarrer le conteneur
./run_docker.sh build && ./run_docker.sh start
# Ou en une seule commande
docker-compose up --build -d
2. Accès à l'interface
Ouvrez votre navigateur à l'adresse : http://localhost:8501
🔧 Commandes disponibles
Script de gestion
# Construire l'image Docker
./run_docker.sh build
# Démarrer le conteneur
./run_docker.sh start
# Arrêter le conteneur
./run_docker.sh stop
# Redémarrer le conteneur
./run_docker.sh restart
# Voir les logs en temps réel
./run_docker.sh logs
# Vérifier le statut
./run_docker.sh status
# Nettoyer les ressources Docker
./run_docker.sh clean
# Afficher l'aide
./run_docker.sh help
Commandes Docker Compose
# Démarrer en arrière-plan
docker-compose up -d
# Voir les logs
docker-compose logs -f
# Arrêter
docker-compose down
# Reconstruire et redémarrer
docker-compose up --build -d
# Voir le statut
docker-compose ps
📁 Structure des fichiers
code/
├── app.py # Interface Streamlit principale
├── requirements.txt # Dépendances Python
├── Dockerfile # Configuration Docker
├── docker-compose.yml # Configuration Docker Compose
├── .dockerignore # Fichiers à ignorer lors du build
├── run_docker.sh # Script de gestion Docker
├── README_DOCKER.md # Cette documentation
└── models/ # Dossier des modèles (créé automatiquement)
├── waste_classifier_v1.h5
└── waste_classifier_v2.h5
⚙️ Configuration
Variables d'environnement
Vous pouvez configurer l'application via des variables d'environnement :
# URLs des modèles
export MODEL_V1_URL="https://votre-url.com/model_v1.h5"
export MODEL_V2_URL="https://votre-url.com/model_v2.h5"
# Port de l'application
export STREAMLIT_SERVER_PORT=8501
Fichier docker-compose.yml
version: '3.8'
services:
waste-classifier:
build: .
ports:
- "8501:8501"
volumes:
- model_cache:/app/models
environment:
- MODEL_V1_URL=https://votre-url.com/model_v1.h5
- MODEL_V2_URL=https://votre-url.com/model_v2.h5
restart: unless-stopped
🔄 Gestion des modèles
Option 1 : Modèles locaux
- Créez le dossier
models/ - Copiez vos modèles :
mkdir -p models cp training_output/training/models/waste_classifier_best.h5 models/waste_classifier_v1.h5 cp training_output_v2/v2.0/training/v2.0/models/waste_classifier_v2.0_best.h5 models/waste_classifier_v2.h5
Option 2 : Téléchargement automatique
L'application télécharge automatiquement les modèles depuis les URLs configurées.
Option 3 : Volume Docker
Les modèles sont persistés dans un volume Docker pour éviter les re-téléchargements.
📊 Monitoring et logs
Voir les logs
# Logs en temps réel
./run_docker.sh logs
# Ou avec docker-compose
docker-compose logs -f
Vérifier la santé
# Statut du conteneur
./run_docker.sh status
# Health check
docker inspect waste-classifier-app | grep -A 10 Health
Métriques de performance
# Utilisation des ressources
docker stats waste-classifier-app
# Informations détaillées
docker inspect waste-classifier-app
🐛 Dépannage
Problèmes courants
Port déjà utilisé
# Changer le port dans docker-compose.yml ports: - "8502:8501" # Utiliser le port 8502Modèles non trouvés
- Vérifiez que les modèles sont dans le dossier
models/ - Vérifiez les URLs dans les variables d'environnement
- Vérifiez que les modèles sont dans le dossier
Erreur de mémoire
# Augmenter la limite de mémoire docker run --memory=4g waste-classifierConteneur ne démarre pas
# Voir les logs d'erreur docker-compose logs # Redémarrer proprement ./run_docker.sh clean ./run_docker.sh build ./run_docker.sh start
Nettoyage
# Nettoyer tout (conteneurs, images, volumes)
./run_docker.sh clean
# Nettoyer seulement les conteneurs arrêtés
docker container prune -f
# Nettoyer les images non utilisées
docker image prune -f
🚀 Déploiement en production
1. Build pour la production
# Build avec optimisations
docker build -t waste-classifier:prod --target production .
2. Déploiement sur un serveur
# Copier les fichiers sur le serveur
scp -r . user@server:/path/to/app/
# Sur le serveur
cd /path/to/app
./run_docker.sh build
./run_docker.sh start
3. Configuration Nginx (optionnel)
server {
listen 80;
server_name votre-domaine.com;
location / {
proxy_pass http://localhost:8501;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
🔒 Sécurité
1. Utilisateur non-root
Le conteneur s'exécute avec un utilisateur non-root pour la sécurité.
2. Variables d'environnement sensibles
# Utiliser un fichier .env
echo "MODEL_V1_URL=https://votre-url-secure.com/model_v1.h5" > .env
echo "MODEL_V2_URL=https://votre-url-secure.com/model_v2.h5" >> .env
3. Limitation des ressources
# Dans docker-compose.yml
services:
waste-classifier:
deploy:
resources:
limits:
memory: 2G
cpus: '1.0'
📈 Optimisations
1. Image multi-stage
# Stage 1: Build
FROM python:3.11-slim as builder
# ... installation des dépendances
# Stage 2: Production
FROM python:3.11-slim
# ... copie des fichiers nécessaires
2. Cache des dépendances
# Copier requirements.txt d'abord pour utiliser le cache Docker
COPY requirements.txt .
RUN pip install -r requirements.txt
3. Compression des modèles
# Dans votre script d'entraînement
model.save('model_compressed.h5', include_optimizer=False)
🌐 Intégration avec d'autres services
1. Base de données
# Ajouter dans docker-compose.yml
services:
database:
image: postgres:13
environment:
POSTGRES_DB: waste_classifier
volumes:
- db_data:/var/lib/postgresql/data
waste-classifier:
depends_on:
- database
environment:
- DATABASE_URL=postgresql://user:pass@database:5432/waste_classifier
2. Redis pour le cache
services:
redis:
image: redis:alpine
ports:
- "6379:6379"
waste-classifier:
depends_on:
- redis
environment:
- REDIS_URL=redis://redis:6379
📞 Support
- Logs :
./run_docker.sh logs - Statut :
./run_docker.sh status - Nettoyage :
./run_docker.sh clean
Bon déploiement Docker ! 🐳