rts-commander / docs /DOCKER_TESTING.md
Luigi's picture
deploy(web): full clean snapshot with app code and assets
12d64f8
# 🐳 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! 🐳🎮**