File size: 5,093 Bytes
ce475c5 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 |
#!/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 "$@"
|