waste-classifier / run_docker.sh
360TechEnv's picture
Upload run_docker.sh with huggingface_hub
ce475c5 verified
#!/bin/bash
# Script de build et lancement Docker pour l'interface de classification de déchets
# Usage: ./run_docker.sh [build|start|stop|restart|logs|clean]
set -e # Arrêter en cas d'erreur
# Configuration
CONTAINER_NAME="waste-classifier-app"
IMAGE_NAME="waste-classifier"
PORT=8501
# Couleurs pour les messages
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Fonctions utilitaires
log_info() {
echo -e "${BLUE}ℹ️ $1${NC}"
}
log_success() {
echo -e "${GREEN}✅ $1${NC}"
}
log_warning() {
echo -e "${YELLOW}⚠️ $1${NC}"
}
log_error() {
echo -e "${RED}❌ $1${NC}"
}
# Vérifier que Docker est installé
check_docker() {
if ! command -v docker &> /dev/null; then
log_error "Docker n'est pas installé. Veuillez l'installer d'abord."
exit 1
fi
if ! command -v docker-compose &> /dev/null; then
log_error "Docker Compose n'est pas installé. Veuillez l'installer d'abord."
exit 1
fi
}
# Build de l'image Docker
build_image() {
log_info "Construction de l'image Docker..."
# Vérifier que les fichiers nécessaires existent
if [ ! -f "app.py" ]; then
log_error "Fichier app.py non trouvé"
exit 1
fi
if [ ! -f "requirements.txt" ]; then
log_error "Fichier requirements.txt non trouvé"
exit 1
fi
# Build avec docker-compose
docker-compose build --no-cache
log_success "Image Docker construite avec succès"
}
# Démarrer le conteneur
start_container() {
log_info "Démarrage du conteneur..."
# Vérifier si le conteneur est déjà en cours d'exécution
if docker ps -q -f name=$CONTAINER_NAME | grep -q .; then
log_warning "Le conteneur est déjà en cours d'exécution"
return 0
fi
# Démarrer avec docker-compose
docker-compose up -d
# Attendre que le conteneur soit prêt
log_info "Attente du démarrage du conteneur..."
sleep 10
# Vérifier la santé du conteneur
if docker ps -q -f name=$CONTAINER_NAME | grep -q .; then
log_success "Conteneur démarré avec succès"
log_info "Interface disponible sur: http://localhost:$PORT"
else
log_error "Échec du démarrage du conteneur"
exit 1
fi
}
# Arrêter le conteneur
stop_container() {
log_info "Arrêt du conteneur..."
docker-compose down
log_success "Conteneur arrêté"
}
# Redémarrer le conteneur
restart_container() {
log_info "Redémarrage du conteneur..."
stop_container
start_container
}
# Afficher les logs
show_logs() {
log_info "Affichage des logs..."
docker-compose logs -f
}
# Nettoyer les ressources Docker
clean_docker() {
log_info "Nettoyage des ressources Docker..."
# Arrêter et supprimer le conteneur
docker-compose down
# Supprimer l'image
if docker images -q $IMAGE_NAME | grep -q .; then
docker rmi $IMAGE_NAME
log_success "Image supprimée"
fi
# Nettoyer les volumes non utilisés
docker volume prune -f
# Nettoyer les images non utilisées
docker image prune -f
log_success "Nettoyage terminé"
}
# Afficher l'aide
show_help() {
echo "Usage: $0 [COMMAND]"
echo ""
echo "Commands:"
echo " build Construire l'image Docker"
echo " start Démarrer le conteneur"
echo " stop Arrêter le conteneur"
echo " restart Redémarrer le conteneur"
echo " logs Afficher les logs"
echo " clean Nettoyer les ressources Docker"
echo " status Afficher le statut du conteneur"
echo " help Afficher cette aide"
echo ""
echo "Exemples:"
echo " $0 build && $0 start # Construire et démarrer"
echo " $0 logs # Voir les logs en temps réel"
echo " $0 clean # Nettoyer tout"
}
# Afficher le statut
show_status() {
log_info "Statut du conteneur:"
docker ps -f name=$CONTAINER_NAME --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
if docker ps -q -f name=$CONTAINER_NAME | grep -q .; then
log_success "Conteneur en cours d'exécution"
log_info "Interface: http://localhost:$PORT"
else
log_warning "Conteneur arrêté"
fi
}
# Fonction principale
main() {
# Vérifier Docker
check_docker
# Traiter la commande
case "${1:-help}" in
build)
build_image
;;
start)
start_container
;;
stop)
stop_container
;;
restart)
restart_container
;;
logs)
show_logs
;;
clean)
clean_docker
;;
status)
show_status
;;
help|--help|-h)
show_help
;;
*)
log_error "Commande inconnue: $1"
show_help
exit 1
;;
esac
}
# Exécuter la fonction principale
main "$@"