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

1

Vérifiez que Docker utilise l’hôte host1 :

Exécutez la commande :

docker info
2

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

  1. 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
  2. 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

  1. 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

Q : Sur quel port s’exécute ce Nginx ? A : Le Nginx s’exécute sur le port 80 du conteneur, qui est mappé au port 32768 sur l’hôte Docker.

Q : À quelle adresse ouvrir votre navigateur pour afficher la page d’accueil de cet Nginx ? A : 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 (*) devant host2, 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

Q : Quelles sont les images affichées ? A : L’image BusyBox est affichée, car un conteneur basé sur cette image a été lancé.

Q : Est-ce que vous voyez l’image Nginx ? Pourquoi ? A : Non, l’image Nginx n’apparaît pas sur host2, car :

  • Les images Docker sont spécifiques à chaque hôte Docker.

  • L’image Nginx a été téléchargée et utilisée uniquement sur host1, mais aucun conteneur Nginx n’a été lancé sur host2.

  • Docker n’a donc pas eu besoin de télécharger l’image Nginx sur host2.


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

1

Listez vos hôtes Docker :

docker-machine ls

La colonne ACTIVE indiquera l’hôte actif avec une étoile (*).

2

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

1

Basculer vers host2 :

eval $(docker-machine env host2)
docker-machine ls
docker info

Résultat attendu : La commande docker-machine ls doit montrer une étoile (*) devant host2. La commande docker info doit afficher l’adresse IP et les détails de host2.

2

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.

⚠️ Note importante Assurez-vous de configurer correctement l’environnement avant d’exécuter toute commande Docker. Une mauvaise configuration pourrait entraîner l’exécution de conteneurs sur le mauvais hôte.


🛑 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

1

Se connecter à l’hôte cible

Configurez l’environnement pour pointer vers l’hôte que vous souhaitez nettoyer :

eval $(docker-machine env <host_name>)
2

Arrêter et supprimer tous les conteneurs actifs et arrêtés

docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q)
  • docker ps -a -q : Liste les IDs de tous les conteneurs (actifs ou arrêtés).

  • docker stop : Arrête les conteneurs actifs.

  • docker rm : Supprime les conteneurs arrêtés.

3

Supprimer les volumes inutilisés

Supprimez tous les volumes Docker non utilisés :

docker volume prune -f
4

Supprimer les images inutilisées

Supprimez toutes les images inutilisées de l’hôte Docker :

docker image prune -a -f
5

Nettoyer les réseaux inutilisés

Supprimez tous les réseaux Docker non utilisés :

docker network prune -f

🔄 Vérifier le nettoyage

Après avoir effectué ces étapes, vérifiez que l’hôte est propre :

1

Listez les conteneurs restants

docker ps -a

Résultat attendu : Aucun conteneur ne doit apparaître.

2

Listez les volumes restants

docker volume ls

Résultat attendu : Aucun volume inutilisé ne doit apparaître.

3

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

  • Cause 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