Configuration Initiale de DockerCoins avec Docker Compose
🚀 Démarrer l'application
Une fois les services démarrés, vous verrez les logs des différents conteneurs s’afficher, comme :
rng-1 | 172.18.0.2 - - [08/Dec/2024 16:43:12] "GET /32 HTTP/1.1" 200 -
hasher-1 | 172.18.0.2 - - [08/Dec/2024:16:43:12 +0000] "POST / HTTP/1.1" 200 64 0.1027
worker-1 | INFO:__main__:1 units of work done, updating hash counter
🖥️ Démarrer en arrière-plan
Pour exécuter l'application en arrière-plan, arrêtez d’abord la version actuelle avec Ctrl+C
.
Relancez-la en mode détaché (background) :
docker-compose up -d
🔍 Afficher le détail d'une application
Utilisez la commande suivante pour lister les conteneurs en cours d'exécution et leurs détails :
docker-compose ps
⚙️ Passer une application à l’échelle
Cela permettra de lancer un deuxième conteneur pour le service worker
. Vérifiez les nouveaux conteneurs avec :
worker
. Vérifiez les nouveaux conteneurs avec :docker-compose ps
Sortie :
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
dockercoins-hasher-1 dockercoins-hasher "ruby hasher.rb" hasher 26 minutes ago Up 26 minutes 0.0.0.0:8002->80/tcp
dockercoins-redis-1 redis "docker-entrypoint.s…" redis 26 minutes ago Up 26 minutes 6379/tcp
dockercoins-rng-1 dockercoins-rng "python rng.py" rng 26 minutes ago Up 26 minutes 0.0.0.0:8001->80/tcp
dockercoins-webui-1 dockercoins-webui "node webui.js" webui 26 minutes ago Up 26 minutes 0.0.0.0:8000->80/tcp
dockercoins-worker-1 dockercoins-worker "python worker.py" worker 26 minutes ago Up 26 minutes
dockercoins-worker-2 dockercoins-worker "python worker.py" worker About a minute ago Up About a minute
🔍 Analyse des Performances et Détection du Goulot d’Étranglement
📊 Suivi de l’utilisation des ressources
Pour observer l’utilisation des ressources système pendant l’exécution des services DockerCoins, vous pouvez utiliser le Gestionnaire des tâches sous Windows ou PowerShell.
Ouvrez une nouvelle fenêtre PowerShell.
Exécutez la commande suivante pour lister les processus Docker et leurs consommations CPU et mémoire
Get-Process | Where-Object { $_.Name -like "com.docker*" } | Format-Table -Property Name, CPU, WS
Name : Le nom du processus Docker.
CPU : L’utilisation actuelle du CPU (en secondes de processeur).
WS : La mémoire consommée (Working Set) en octets.
Exemple de sortie
Name CPU WS
---- --- --
com.docker.backend 46.03125 140042240
com.docker.backend 1.375 48955392
com.docker.build 1.078125 35799040
com.docker.dev-envs 0.078125 11960320
🔎 Analyse
com.docker.backend : Processus principal qui gère Docker Desktop.
CPU élevé : Indique une activité importante, comme le lancement ou l’exécution de plusieurs conteneurs.
Mémoire (WS) : Montre la consommation de mémoire réelle. Une augmentation significative peut indiquer un problème de gestion de ressources.
com.docker.build : Lié à la construction d'images Docker. Une activité ici peut indiquer des opérations
docker build
.
🚦 Détection du goulot d'étranglement
Identifier les ports des services
Avant de tester les services, identifiez leurs ports dans le fichier docker-compose.yml
ou à l’aide de la commande suivante :
docker-compose ps
Exemple de sortie :
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
dockercoins-hasher-1 dockercoins-hasher "ruby hasher.rb" hasher 52 minutes ago Up 52 minutes 0.0.0.0:8002->80/tcp
dockercoins-redis-1 redis "docker-entrypoint.s…" redis 52 minutes ago Up 52 minutes 6379/tcp
dockercoins-rng-1 dockercoins-rng "python rng.py" rng 52 minutes ago Up 52 minutes 0.0.0.0:8001->80/tcp
dockercoins-webui-1 dockercoins-webui "node webui.js" webui 52 minutes ago Up 52 minutes 0.0.0.0:8000->80/tcp
Le service RNG est mappé sur 8001.
Le service Hasher est mappé sur 8002.
Mesurer les temps de réponse avec curl
curl
Utilisez la commande intégrée Measure-Command
dans PowerShell pour tester la latence des services. Voici comment procéder :
Service RNG
Ouvrez PowerShell ou CMD.
Testez le service RNG :
Measure-Command { curl http://localhost:8001 }
Exemple de sortie :
Days : 0
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 96
Ticks : 969118
TotalDays : 1.12166435185185E-06
TotalHours : 2.69199444444444E-05
TotalMinutes : 0.00161519666666667
TotalSeconds : 0.0969118
TotalMilliseconds : 96.9118
Service Hasher
Testez le service Hasher :
Measure-Command { curl http://localhost:8002 }
Exemple de sortie :
Days : 0
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 19
Ticks : 190129
TotalDays : 2.20056712962963E-07
TotalHours : 5.28136111111111E-06
TotalMinutes : 0.000316881666666667
TotalSeconds : 0.0190129
TotalMilliseconds : 19.0129
Analyser les résultats
🛑 Arrêter et Nettoyer l’Application
Arrêter et Supprimer tous les Conteneurs
Exécutez la commande suivante pour arrêter tous les conteneurs en cours d'exécution et les supprimer :
docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q)
docker ps -a -q
: Récupère les IDs de tous les conteneurs (en cours d'exécution ou arrêtés).docker stop
: Arrête les conteneurs spécifiés.docker rm
: Supprime les conteneurs spécifiés.
🔄 Vérifier le nettoyage
Après avoir effectué ces étapes, vérifiez que l’hôte est propre :
Listez les conteneurs restants
docker ps -a
Résultat attendu : Aucun conteneur ne doit apparaître.
Listez les volumes restants
docker volume ls
Résultat attendu : Aucun volume inutilisé ne doit apparaître.
Listez les images restantes
docker images
Résultat attendu : Aucune image inutile ne doit être affichée.
🔧 Astuces pour Dépannage
🚧 Erreurs lors de la création des services (exemple : docker-compose up
échoue)
docker-compose up
échoue)Problème : Les ports réseau nécessaires (8000, 8001, 8002, etc.) sont déjà utilisés.
Solution : Vérifiez les ports en cours d'utilisation avec la commande :
netstat -ano | findstr :8000
Arrêtez le processus responsable avec :
taskkill /PID <PID> /F
Ou modifiez les ports dans le fichier
docker-compose.yml
.
Problème : Une image Docker manque ou est corrompue.
Solution : Re-téléchargez l'image :
docker-compose pull
🔄 Services qui ne démarrent pas correctement
Problème : Le service reste en état
Restarting
.Solution : Consultez les logs du service pour identifier le problème :
docker-compose logs <service_name>
Vérifiez les dépendances du service (par exemple, Redis doit être actif pour WebUI).
🐢 Problèmes de latence ou lenteur
Problème : Le service RNG est le goulot d’étranglement.
Solution :
Ajoutez des ressources à RNG (CPU, RAM) dans votre VM.
Optimisez le code du service RNG.
Distribuez RNG sur plusieurs conteneurs.
📉 Commande docker-compose scale
échoue
docker-compose scale
échoueProblème : Ressources insuffisantes sur l’hôte Docker.
Solution :
Vérifiez la charge de votre système avec :
docker stats
Augmentez les ressources allouées à Docker Desktop (paramètres > ressources).
🗑️ Conteneurs ou volumes ne se suppriment pas
Problème : Erreur liée aux volumes ou conteneurs occupés.
Solution : Forcez la suppression avec :
docker rm -f $(docker ps -a -q) docker volume prune -f
⚙️ Erreurs avec Measure-Command
ou curl
Measure-Command
ou curl
Problème : curl
n'est pas installé sur votre système.
Solution : Installez
curl
via le gestionnaire de paquets Windows :winget install curl
📝 Résumé des Commandes
Commande
Description
docker-compose up
Démarre tous les services définis dans docker-compose.yml
.
docker-compose up -d
Démarre les services en mode détaché (background).
docker-compose scale worker=2
Augmente le nombre de conteneurs du service worker
à 2.
docker ps
Liste les conteneurs actifs sur l’hôte Docker.
docker-compose ps
Affiche les services actifs pour le projet Docker Compose actuel.
docker-compose logs <service>
Affiche les logs d’un service spécifique.
docker stats
Affiche les métriques d’utilisation des conteneurs actifs (CPU, mémoire, etc.).
Measure-Command { curl <URL> }
Mesure la latence d’un service (en ms) sur un port donné.
docker stop $(docker ps -a -q)
Arrête tous les conteneurs actifs.
docker rm $(docker ps -a -q)
Supprime tous les conteneurs arrêtés.
docker volume prune -f
Supprime tous les volumes inutilisés.
docker image prune -a -f
Supprime toutes les images inutilisées.
docker network prune -f
Supprime tous les réseaux inutilisés.
docker builder prune -f
Supprime les builds mis en cache.
🎯 Conclusion
L'application DockerCoins permet de visualiser et d'expérimenter avec des concepts clés de Docker, comme les conteneurs, les réseaux, et l'orchestration de services. L'analyse du fichier docker-compose.yml
a révélé une architecture bien structurée avec cinq services distincts, chacun jouant un rôle précis dans le processus de génération de DockerCoins. Parmi eux, seul le service redis
utilise une image officielle, tandis que les autres sont construits localement.
Le déploiement et l'exécution de l'application montrent comment les services interagissent pour générer des DockerCoins. Bien que l'augmentation du nombre de conteneurs du service worker
améliore le taux de génération, elle met également en évidence les limites du système, attribuées à des goulots d'étranglement comme le service rng
. Ces observations soulignent l'importance de comprendre et de résoudre les problèmes de performance dans des systèmes distribués.
Les outils disponibles sur Windows, tels que curl
et PowerShell, permettent de mesurer la latence des services. Ces tests ont confirmé que rng
, avec une latence de 204 ms, est le principal goulot d'étranglement, comparé à seulement 40 ms pour hasher
.
Le nettoyage des ressources avec des commandes Docker a été effectué pour arrêter et supprimer les conteneurs, volumes, images, et réseaux inutilisés, montrant l'importance d'une gestion proactive des ressources dans un environnement Docker.
Ce projet a fourni une exploration approfondie de l'écosystème Docker et a mis en lumière les étapes nécessaires pour analyser, déployer, optimiser et nettoyer une application conteneurisée. Il constitue une base solide pour des explorations futures, notamment dans l'orchestration à grande échelle avec Docker Swarm.
Last updated