Gestion des Hôtes Docker avec Docker Machine
🖥️ Créer un hôte Docker
Nous allons créer un hôte Docker nommé host1
en utilisant VMware Workstation comme pilote.
Exécutez la commande suivante pour créer l’hôte :
docker-machine create --driver vmware host1
🔄 Processus de création
Docker Machine installe et configure une VM avec une distribution Linux minimale contenant Docker.
La VM sera visible dans VMware Workstation une fois créée.
Vérification
Listez les hôtes Docker disponibles avec :
docker-machine ls
Exemple de sortie :
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
host1 - vmware Running tcp://192.168.253.150:2376 v19.03.12
Récupérez l’adresse IP de l’hôte host1
avec :
docker-machine ip host1
⚙️ Configurer l'environnement Docker
🛠️ Générer les variables d'environnement
Pour utiliser l’hôte host1
avec Docker, vous devez configurer les variables d’environnement.
Exécutez la commande suivante pour générer ces variables :
docker-machine env host1
Exemple de sortie :
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.253.150:2376"
export DOCKER_CERT_PATH="C:\Users\pt41qcd\.docker\machine\machines\host1"
export DOCKER_MACHINE_NAME="host1"
export COMPOSE_CONVERT_WINDOWS_PATHS="true"
# Run this command to configure your shell:
# eval $("U:\bin\docker-machine.exe" env host1)
🔄 Appliquer automatiquement les variables d'environnement
Configurez votre environnement pour qu’il utilise host1
:
eval $(docker-machine env host1)
✅ Vérification de la configuration
Affichez la liste des hôtes Docker disponibles :
Exécutez :
docker-machine ls
Exemple de sortie :
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
host1 * vmware Running tcp://192.168.253.150:2376 v19.03.12
🔍 Note : La colonne ACTIVE doit contenir une étoile (*
) en face de host1
, indiquant qu’il est actuellement utilisé.
📮 Exécuter un conteneur sur host1
🚀 Lancer un conteneur Nginx
Une fois votre environnement configuré pour utiliser host1
, lancez un conteneur Nginx avec la commande suivante :
docker run -d -P nginx
✅ Vérification du conteneur
Listez les conteneurs actifs : Exécutez la commande suivante pour afficher les détails des conteneurs en cours d’exécution :
docker ps
Exemple de sortie :
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6a3b577d0454 nginx "/docker-entrypoint.…" 2 seconds ago Up 2 seconds 0.0.0.0:32768->80/tcp goofy_zhukovsky
Analyse des résultats :
La colonne PORTS montre que le port 80 du conteneur Nginx est mappé au port 32768 de l’hôte Docker
host1
.Cela signifie que vous pouvez accéder à l’application Nginx sur
host1
via ce port mappé.
🌐 Accéder à la page d’accueil Nginx
Adresse à utiliser :
Utilisez l’adresse IP de votre hôte
host1
pour accéder à la page d’accueil Nginx.L’adresse sera au format suivant :
http://<IP_HOST>:<PORT>
Par exemple, dans ce cas :
http://192.168.253.150:32768
🖥️ Créer un deuxième hôte
🛠️ Création de l'hôte Docker
Créez un deuxième hôte Docker nommé host2
avec la commande suivante :
docker-machine create --driver vmware host2
Cette commande démarre une nouvelle machine virtuelle
host2
avec VMware et installe Docker dessus.Vérifiez la création de l’hôte avec :
docker-machine ls
Exemple de sortie :
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS host1 * vmware Running tcp://192.168.253.150:2376 v19.03.12 host2 - vmware Running tcp://192.168.253.151:2376 v19.03.12
⚙️ Configuration de l'environnement pour host2
Configurez votre environnement pour interagir avec host2
:
eval $(docker-machine env host2)
Cette commande configure automatiquement Docker pour pointer vers l’hôte
host2
.Vérifiez que
host2
est actif :docker-machine ls
Exemple de sortie :
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS host1 - vmware Running tcp://192.168.253.150:2376 v19.03.12 host2 * vmware Running tcp://192.168.253.151:2376 v19.03.12
La colonne ACTIVE affiche une étoile (
*
) devanthost2
, confirmant qu’il est utilisé par le client Docker.
🚀 Exécution d’un conteneur sur host2
Lancez un conteneur BusyBox sur host2
pour exécuter une commande simple :
docker run -it busybox echo "Coucou"
Description : Cette commande utilise l’image BusyBox pour exécuter
echo "Coucou"
. Une fois la commande terminée, le conteneur s’arrête automatiquement.
✅ Vérification des images disponibles sur host2
Listez les images disponibles sur host2
avec :
docker images
Exemple de sortie :
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 517b897a6a83 2 months ago 4.27MB
🔄 Passer d’un hôte Docker à un autre
🔀 Basculez entre vos hôtes Docker
Pour changer l’hôte Docker actif, configurez votre environnement avec la commande suivante :
eval $(docker-machine env <host_name>)
Exemple :
Pour basculer sur l’hôte host1
, exécutez :
eval $(docker-machine env host1)
🔙 Revenir à Docker Desktop (hôte local)
Si vous souhaitez revenir à votre environnement Docker local (Docker Desktop) :
eval $(docker-machine env -u)
Cette commande désactive l’hôte actif défini par Docker Machine et réinitialise le client Docker pour utiliser le démon Docker local.
🔍 Vérification
Après avoir basculé entre les hôtes ou être revenu à Docker Desktop, vous pouvez vérifier quel hôte est actif :
Listez vos hôtes Docker :
docker-machine ls
La colonne ACTIVE indiquera l’hôte actif avec une étoile (*
).
Vérifiez l’environnement Docker actuel :
docker info
La section Name indiquera l’hôte Docker utilisé.
Si vous utilisez Docker Desktop, vous verrez son nom dans Name.
📝 Exemple pratique
Revenir à Docker Desktop :
eval $(docker-machine env -u)
docker-machine ls
docker info
Résultat attendu :
La colonne ACTIVE de docker-machine ls
sera vide.
La commande docker info
affichera les détails de Docker Desktop.
🛑 Nettoyage des ressources Docker Machine
🧹 Supprimer un hôte Docker
Lorsque vous n’avez plus besoin d’un hôte Docker, vous pouvez le supprimer avec la commande suivante :
docker-machine rm host1 -y
docker-machine rm host2 -y
🧼 Nettoyer tous les conteneurs sur un hôte
🔄 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
🛠️ docker-machine create
échoue
docker-machine create
échoueCause possible : VMware Workstation non configuré correctement
Assurez-vous que VMware Workstation est installé et opérationnel.
Vérifiez que le service réseau de VMware (VMware NAT ou Host-Only) est actif.
Erreur : "Driver failed to provision VM"
Vérifiez que votre pilote VMware est à jour (
--driver vmware
).Ajoutez l'option
--debug
pour voir les logs détaillés.Exemple :
docker-machine create --driver vmware --debug host1
Erreur réseau :
Activez le mode promiscuité sur les cartes réseau VMware via les paramètres de la VM.
📡 Problèmes de réseau entre hôtes
Vérifiez les adresses IP des hôtes : Utilisez
docker-machine ip <host_name>
pour vérifier qu’ils sont dans le même sous-réseau.Assurez-vous que les hôtes communiquent : Pingez les hôtes entre eux pour vérifier la connectivité. Exemple :
ping $(docker-machine ip host2)
Firewall ou antivirus : Désactivez temporairement les règles bloquant la communication réseau entre les hôtes Docker.
📝 Résumé des Commandes
Commande
Description
docker-machine create --driver vmware <host_name>
Crée un nouvel hôte Docker sur VMware.
docker-machine ls
Liste les hôtes Docker disponibles et leur état.
docker-machine ip <host_name>
Affiche l’adresse IP de l’hôte spécifié.
eval $(docker-machine env <host_name>)
Configure l’environnement pour utiliser l’hôte Docker spécifié.
eval $(docker-machine env -u)
Revient à l’environnement Docker local (Docker Desktop).
docker-machine rm <host_name>
Supprime un hôte Docker et toutes ses ressources associées.
docker ps
Liste les conteneurs actifs sur l’hôte configuré.
docker run -d -P nginx
Lance un conteneur Nginx en arrière-plan avec des ports mappés automatiquement.
docker run -it busybox echo "Coucou"
Lance un conteneur BusyBox et exécute la commande echo "Coucou"
.
docker stop $(docker ps -a -q)
Arrête tous les conteneurs en cours d’exécution sur l’hôte.
docker rm $(docker ps -a -q)
Supprime tous les conteneurs (actifs ou 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.
🎯 Conclusion
Docker Machine, associé à VMware Workstation, ouvre des possibilités puissantes pour gérer des hôtes Docker sur des machines virtuelles avec flexibilité et contrôle. À travers les étapes de création, configuration et gestion des hôtes, il devient possible de structurer des environnements adaptés aux besoins de développement, de tests ou même de production.
La gestion des hôtes (comme host1 et host2) permet de travailler sur des environnements isolés, tout en garantissant la reproductibilité des configurations. La capacité à basculer facilement entre différents hôtes ou à revenir à Docker Desktop local renforce l'agilité dans les workflows. L’exécution de conteneurs sur différents hôtes, combinée à une gestion centralisée via des commandes comme docker-machine
, simplifie l'orchestration et l'administration.
Le nettoyage des ressources inutilisées, incluant conteneurs, volumes, images et réseaux, garantit une utilisation efficace des ressources, tout en maintenant un environnement ordonné. Ces pratiques favorisent une gestion durable des infrastructures Docker, évitant l’encombrement ou les conflits.
Ce processus n’est pas seulement technique ; il repose aussi sur une compréhension claire des concepts sous-jacents, comme l’isolation des images Docker sur chaque hôte et les implications réseau des conteneurs. En combinant ces éléments avec des astuces de dépannage et un résumé des commandes essentielles, vous êtes prêt à relever les défis d’une gestion avancée des environnements Docker.
Avec ces outils et ces connaissances, vous pouvez aborder des projets plus ambitieux, tels que la mise en place de clusters distribués, l’intégration continue ou encore le déploiement d’applications complexes.
Last updated