rts-commander / docs /DOCKER_TESTING.md
Luigi's picture
deploy(web): full clean snapshot with app code and assets
12d64f8
|
raw
history blame
8.73 kB

🐳 Docker Local Testing Guide

Guide complet pour tester l'application RTS en local avec Docker

Prérequis

Assurez-vous que Docker est installé :

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

cd /home/luigi/rts/web

Étape 2 : Build l'image Docker

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

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

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

docker logs rts-game-container
# Ou en temps réel :
docker logs -f rts-game-container

Arrêter le conteneur

docker stop rts-game-container

Redémarrer

docker start rts-game-container

Supprimer le conteneur

docker rm rts-game-container

🛠️ Méthode 3 : Mode Développement avec Volume

Pour développer avec live reload :

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 :

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

# 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

# Lister les conteneurs en cours d'exécution
docker ps

# Lister tous les conteneurs
docker ps -a

# Lister les images
docker images

Inspecter

# Détails du conteneur
docker inspect rts-game-container

# Utilisation des ressources
docker stats rts-game-container

Accéder au shell du conteneur

docker exec -it rts-game-container /bin/bash

Nettoyer

# 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é

# 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

# 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

# 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 :

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

./docker-test.sh

🎯 Checklist de Test Complet

✅ Tests de Base

# 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

# Utilisation mémoire
docker stats rts-test --no-stream

# Devrait être < 200MB

✅ Tests de Logs

# 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

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

# 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

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

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

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 :

    docker build -t rts-game . && docker run -p 7860:7860 rts-game
    
  2. Utiliser des noms explicites :

    docker run --name rts-game-v1.0 ...
    
  3. Vérifier les logs régulièrement :

    docker logs -f <container>
    
  4. Nettoyer après tests :

    docker stop $(docker ps -aq)
    docker rm $(docker ps -aq)
    

🎉 Résumé : Commande One-Liner

Pour un test complet en une commande :

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! 🐳🎮