Spaces:
Sleeping
Sleeping
| # 🐳 Docker Local Testing Guide | |
| ## Guide complet pour tester l'application RTS en local avec Docker | |
| ### Prérequis | |
| Assurez-vous que Docker est installé : | |
| ```bash | |
| docker --version | |
| # Devrait afficher : Docker version 20.x.x ou supérieur | |
| ``` | |
| Si Docker n'est pas installé : | |
| - **Ubuntu/Debian** : `sudo apt-get install docker.io` | |
| - **Mac** : Télécharger Docker Desktop | |
| - **Windows** : Télécharger Docker Desktop | |
| --- | |
| ## 🚀 Méthode 1 : Build et Run Simple | |
| ### Étape 1 : Naviguer vers le dossier | |
| ```bash | |
| cd /home/luigi/rts/web | |
| ``` | |
| ### Étape 2 : Build l'image Docker | |
| ```bash | |
| docker build -t rts-game . | |
| ``` | |
| **Explication** : | |
| - `-t rts-game` : Donne un nom (tag) à l'image | |
| - `.` : Utilise le Dockerfile dans le répertoire courant | |
| **Sortie attendue** : | |
| ``` | |
| [+] Building 45.2s (10/10) FINISHED | |
| => [1/5] FROM docker.io/library/python:3.11-slim | |
| => [2/5] WORKDIR /app | |
| => [3/5] COPY requirements.txt . | |
| => [4/5] RUN pip install --no-cache-dir -r requirements.txt | |
| => [5/5] COPY . . | |
| => exporting to image | |
| Successfully built abc123def456 | |
| Successfully tagged rts-game:latest | |
| ``` | |
| ### Étape 3 : Lancer le conteneur | |
| ```bash | |
| docker run -p 7860:7860 rts-game | |
| ``` | |
| **Explication** : | |
| - `-p 7860:7860` : Map le port 7860 du conteneur vers le port 7860 de l'hôte | |
| - `rts-game` : Nom de l'image à exécuter | |
| ### Étape 4 : Tester | |
| Ouvrez votre navigateur : **http://localhost:7860** | |
| Pour arrêter : `Ctrl+C` | |
| --- | |
| ## 🔧 Méthode 2 : Mode Détaché (Background) | |
| ### Lancer en arrière-plan | |
| ```bash | |
| docker run -d -p 7860:7860 --name rts-game-container rts-game | |
| ``` | |
| **Explication** : | |
| - `-d` : Mode détaché (daemon) | |
| - `--name rts-game-container` : Nom du conteneur | |
| ### Voir les logs | |
| ```bash | |
| docker logs rts-game-container | |
| # Ou en temps réel : | |
| docker logs -f rts-game-container | |
| ``` | |
| ### Arrêter le conteneur | |
| ```bash | |
| docker stop rts-game-container | |
| ``` | |
| ### Redémarrer | |
| ```bash | |
| docker start rts-game-container | |
| ``` | |
| ### Supprimer le conteneur | |
| ```bash | |
| docker rm rts-game-container | |
| ``` | |
| --- | |
| ## 🛠️ Méthode 3 : Mode Développement avec Volume | |
| Pour développer avec live reload : | |
| ```bash | |
| docker run -d \ | |
| -p 7860:7860 \ | |
| --name rts-dev \ | |
| -v $(pwd):/app \ | |
| -e DEBUG=true \ | |
| rts-game | |
| ``` | |
| **Explication** : | |
| - `-v $(pwd):/app` : Monte le répertoire courant dans le conteneur | |
| - `-e DEBUG=true` : Variable d'environnement pour debug | |
| --- | |
| ## 🧪 Méthode 4 : Avec Docker Compose (Recommandé) | |
| Créez un fichier `docker-compose.yml` : | |
| ```bash | |
| cat > docker-compose.yml << 'EOF' | |
| version: '3.8' | |
| services: | |
| rts-game: | |
| build: . | |
| ports: | |
| - "7860:7860" | |
| environment: | |
| - HOST=0.0.0.0 | |
| - PORT=7860 | |
| restart: unless-stopped | |
| healthcheck: | |
| test: ["CMD", "curl", "-f", "http://localhost:7860/health"] | |
| interval: 30s | |
| timeout: 10s | |
| retries: 3 | |
| start_period: 40s | |
| EOF | |
| ``` | |
| ### Commandes Docker Compose | |
| ```bash | |
| # Build et démarrer | |
| docker-compose up -d | |
| # Voir les logs | |
| docker-compose logs -f | |
| # Arrêter | |
| docker-compose down | |
| # Rebuild après modifications | |
| docker-compose up -d --build | |
| ``` | |
| --- | |
| ## 📋 Commandes Docker Utiles | |
| ### Vérifier l'état | |
| ```bash | |
| # Lister les conteneurs en cours d'exécution | |
| docker ps | |
| # Lister tous les conteneurs | |
| docker ps -a | |
| # Lister les images | |
| docker images | |
| ``` | |
| ### Inspecter | |
| ```bash | |
| # Détails du conteneur | |
| docker inspect rts-game-container | |
| # Utilisation des ressources | |
| docker stats rts-game-container | |
| ``` | |
| ### Accéder au shell du conteneur | |
| ```bash | |
| docker exec -it rts-game-container /bin/bash | |
| ``` | |
| ### Nettoyer | |
| ```bash | |
| # Supprimer les conteneurs arrêtés | |
| docker container prune | |
| # Supprimer les images non utilisées | |
| docker image prune | |
| # Tout nettoyer (ATTENTION !) | |
| docker system prune -a | |
| ``` | |
| --- | |
| ## 🐛 Dépannage | |
| ### Problème : Port déjà utilisé | |
| ```bash | |
| # Trouver ce qui utilise le port 7860 | |
| sudo lsof -i :7860 | |
| # ou | |
| sudo netstat -tulpn | grep 7860 | |
| # Tuer le processus | |
| kill -9 <PID> | |
| ``` | |
| ### Problème : Build échoue | |
| ```bash | |
| # Build avec logs détaillés | |
| docker build -t rts-game . --progress=plain | |
| # Build sans cache | |
| docker build -t rts-game . --no-cache | |
| ``` | |
| ### Problème : Conteneur s'arrête immédiatement | |
| ```bash | |
| # Voir les logs | |
| docker logs rts-game-container | |
| # Lancer avec shell interactif pour debug | |
| docker run -it rts-game /bin/bash | |
| ``` | |
| --- | |
| ## ✅ Script de Test Automatique | |
| Créez un script `docker-test.sh` : | |
| ```bash | |
| cat > docker-test.sh << 'EOF' | |
| #!/bin/bash | |
| echo "🐳 Testing RTS Game with Docker" | |
| echo "================================" | |
| # Couleurs | |
| GREEN='\033[0;32m' | |
| RED='\033[0;31m' | |
| NC='\033[0m' # No Color | |
| # 1. Build | |
| echo -e "\n📦 Building Docker image..." | |
| if docker build -t rts-game . > /dev/null 2>&1; then | |
| echo -e "${GREEN}✅ Build successful${NC}" | |
| else | |
| echo -e "${RED}❌ Build failed${NC}" | |
| exit 1 | |
| fi | |
| # 2. Run | |
| echo -e "\n🚀 Starting container..." | |
| docker run -d -p 7860:7860 --name rts-test rts-game > /dev/null 2>&1 | |
| # 3. Wait for startup | |
| echo -e "\n⏳ Waiting for server to start..." | |
| sleep 5 | |
| # 4. Test health endpoint | |
| echo -e "\n🧪 Testing /health endpoint..." | |
| if curl -f http://localhost:7860/health > /dev/null 2>&1; then | |
| echo -e "${GREEN}✅ Health check passed${NC}" | |
| else | |
| echo -e "${RED}❌ Health check failed${NC}" | |
| docker logs rts-test | |
| docker stop rts-test > /dev/null 2>&1 | |
| docker rm rts-test > /dev/null 2>&1 | |
| exit 1 | |
| fi | |
| # 5. Test main page | |
| echo -e "\n🌐 Testing main page..." | |
| if curl -f http://localhost:7860/ > /dev/null 2>&1; then | |
| echo -e "${GREEN}✅ Main page accessible${NC}" | |
| else | |
| echo -e "${RED}❌ Main page not accessible${NC}" | |
| fi | |
| # 6. Show logs | |
| echo -e "\n📋 Container logs (last 10 lines):" | |
| docker logs --tail 10 rts-test | |
| # 7. Show container info | |
| echo -e "\n📊 Container info:" | |
| docker ps | grep rts-test | |
| echo -e "\n${GREEN}✅ All tests passed!${NC}" | |
| echo -e "\n🌐 Access the game at: http://localhost:7860" | |
| echo -e "\nTo stop and cleanup:" | |
| echo -e " docker stop rts-test && docker rm rts-test" | |
| EOF | |
| chmod +x docker-test.sh | |
| ``` | |
| ### Utiliser le script | |
| ```bash | |
| ./docker-test.sh | |
| ``` | |
| --- | |
| ## 🎯 Checklist de Test Complet | |
| ### ✅ Tests de Base | |
| ```bash | |
| # 1. Build réussit | |
| docker build -t rts-game . | |
| # 2. Conteneur démarre | |
| docker run -d -p 7860:7860 --name rts-test rts-game | |
| # 3. Health check | |
| curl http://localhost:7860/health | |
| # 4. Page principale | |
| curl http://localhost:7860/ | |
| # 5. WebSocket fonctionne (via navigateur) | |
| # Ouvrir http://localhost:7860 et vérifier la connexion | |
| ``` | |
| ### ✅ Tests de Performance | |
| ```bash | |
| # Utilisation mémoire | |
| docker stats rts-test --no-stream | |
| # Devrait être < 200MB | |
| ``` | |
| ### ✅ Tests de Logs | |
| ```bash | |
| # Vérifier qu'il n'y a pas d'erreurs | |
| docker logs rts-test 2>&1 | grep -i error | |
| # Devrait être vide | |
| ``` | |
| --- | |
| ## 📊 Monitoring en Temps Réel | |
| ### Voir l'utilisation des ressources | |
| ```bash | |
| docker stats rts-game-container | |
| ``` | |
| **Sortie** : | |
| ``` | |
| CONTAINER ID NAME CPU % MEM USAGE / LIMIT NET I/O | |
| abc123def456 rts-game-container 0.5% 150MiB / 2GiB 1.2kB / 3.4kB | |
| ``` | |
| --- | |
| ## 🚀 Test de Charge Simple | |
| ```bash | |
| # Installer hey (HTTP load generator) | |
| # sudo apt-get install hey | |
| # Test de charge | |
| hey -n 1000 -c 10 http://localhost:7860/health | |
| ``` | |
| --- | |
| ## 🎓 Exemples Complets | |
| ### Exemple 1 : Test Rapide | |
| ```bash | |
| cd /home/luigi/rts/web | |
| docker build -t rts-game . | |
| docker run -p 7860:7860 rts-game | |
| # Ouvrir http://localhost:7860 | |
| ``` | |
| ### Exemple 2 : Test avec Logs | |
| ```bash | |
| cd /home/luigi/rts/web | |
| docker build -t rts-game . | |
| docker run -d -p 7860:7860 --name rts-test rts-game | |
| docker logs -f rts-test | |
| ``` | |
| ### Exemple 3 : Test et Cleanup | |
| ```bash | |
| cd /home/luigi/rts/web | |
| docker build -t rts-game . | |
| docker run -d -p 7860:7860 --name rts-test rts-game | |
| sleep 5 | |
| curl http://localhost:7860/health | |
| docker stop rts-test && docker rm rts-test | |
| ``` | |
| --- | |
| ## 💡 Bonnes Pratiques | |
| 1. **Toujours tester après modifications** : | |
| ```bash | |
| docker build -t rts-game . && docker run -p 7860:7860 rts-game | |
| ``` | |
| 2. **Utiliser des noms explicites** : | |
| ```bash | |
| docker run --name rts-game-v1.0 ... | |
| ``` | |
| 3. **Vérifier les logs régulièrement** : | |
| ```bash | |
| docker logs -f <container> | |
| ``` | |
| 4. **Nettoyer après tests** : | |
| ```bash | |
| docker stop $(docker ps -aq) | |
| docker rm $(docker ps -aq) | |
| ``` | |
| --- | |
| ## 🎉 Résumé : Commande One-Liner | |
| Pour un test complet en une commande : | |
| ```bash | |
| cd /home/luigi/rts/web && \ | |
| docker build -t rts-game . && \ | |
| docker run -d -p 7860:7860 --name rts-test rts-game && \ | |
| echo "⏳ Waiting for startup..." && sleep 5 && \ | |
| curl http://localhost:7860/health && \ | |
| echo -e "\n\n✅ Docker test successful!" && \ | |
| echo "🌐 Open: http://localhost:7860" && \ | |
| echo "📋 Logs: docker logs -f rts-test" && \ | |
| echo "🛑 Stop: docker stop rts-test && docker rm rts-test" | |
| ``` | |
| --- | |
| **Happy Docker Testing! 🐳🎮** | |