# 🐳 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 ``` ### 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 ``` 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! 🐳🎮**