Attention : avant de commencer il faut savoir que “Docker Machine” est déprécié. Il est vivement conseillé d'utiliser “Docker Desktop for Mac” et “Docker Desktop for Windows” qui ne seront pas traités dans cette documentation
« Docker Machine » est un outil qui vous permet d'installer « Docker Engine » des sur des hôtes physiques ou virtuels et de les gérer à l'aide de commandes « Docker-machine ».
Vous pouvez utiliser « Docker Machine » pour créer des hôtes Docker sur Mac ou Windows en local, sur le réseau de votre entreprise, dans votre Datacenter ou sur des plateformes Cloud.
Une fois créés, il sera possible de gérer les hôtes docker via « Docker Machine ».
Par exemple il sera possible de démarrer, inspecter, arrêter et redémarrer un hôte Docker, mettre à jour le client et le démon Docker, effectuer la création et la gestion d’images et de conteneurs directement sur les hôtes Docker, créer un « Docker Swarm », etc.
Le client « Docker Machine » est un client en mode CLI (Command Line interface) qui va permettre de se connecter aux différents hôtes Docker et de les gérer comme si l’on était directement connecté sur ces derniers.
Une seule interface sera donc utilisée pour gérer plusieurs hôtes « Docker Engine ».
Afin de créer les différents hôte « Docker Engine », nous utiliserons ce que Docker appel des « drivers ».
A l’aide de ces « drivers », « Docker Machine » pourra fonctionner dans le cloud, sur un hyperviseur « on premise » ou encore directement sur des machines hôtes.
Nous pourrions citer par exemples les solutions suivantes :
Pour pouvoir installer « Docker machine », il faudra dans un premier temps installer les produit « Docker Desktop pour Windows » et « Git For Windows ». Cependant il y a certains prérequis à respecter dont voici la liste :
Attention : Si vous n’avez pas la bonne version de Windows, il faudra alors utiliser « Docker Toolbox » qui utilise Oracle Virtual Box au lieu de Hyper-V. Si vous utilisez un Windows Serveur, dans ce cas il faudra utiliser un « Docker Runtime for Windows », c’est-à-dire que les conteneurs seront de type Windows et non plus de type Linux. Pour l’utilisation de conteneur de type Linux sur un serveur Windows, il faudra alors activer Hyper-V et utiliser une VM Linux.
L’installation de « Docker Desktop pour Windows » comprend les éléments suivant :
Attention : Les conteneurs et les images créés avec « Docker Desktop pour Windows » sont partagés entre tous les comptes d'utilisateurs des ordinateurs sur lesquels il est installé car ces derniers utilisent la même VM pour créer et exécuter des conteneurs.
Les scénarios de virtualisation imbriqués, tels que l'exécution de « Docker Desktop pour Windows » sur une instance VMWare ou autres peuvent fonctionner mais aucune garantie n'est donnée par Docker.
Il existe deux version différentes pour Windows, la version « Community Edition (CE) » ainsi que la version « Entreprise ».
Voici les différences entre ces deux versions :
La version que nous utiliserons pour cette documentation est la version « Community Edition (CE) »
Pour télécharger « Docker Desktop pour Windows » il faudra se rendre sur le site officiel de Docker à l’adresse suivante :
https://hub.docker.com/?overlay=onboarding
Puis cliquer sur le bouton « Download Docker Desktop for Windows » pour lancer le téléchargement
Attention : si vous n’avez pas de compte il faudra en créer un
Pour télécharger cet outil il faudra se rendre sur le lien suivant et cliquer sur « download »:
Une fois le fichier téléchargé il ne reste plus qu’à faire un double clic dessus pour lancer l’installation
L’assistant se lance
Cliquer sur « OK »
Puis attendre que la fin de l’assistant d’installation
Une fois l’installation terminée, il faudra cliquer sur « Close »
L’icône de docker sera visible sur le bureau. Cliquer dessus pour lancer Docker
Si vous n’avez pas activé Hyper-V, vous obtiendrez le message suivant.
En cliquant sur « OK » docker activera automatiquement les paramètres manquant aux prérequis et l’ordinateur redémarrera.
Valider en cliquant sur « OK » et attendre le redémarrage de l’ordinateur.
Si vous avez activé Hyper-V, un message de Windows apparaîtra pour indiquer le démarrage du service
L’icône de docker sera visible dans la barre des tâches.
Lorsque le service docker sera démarré, un nouveau message de Windows sera visible indiquant que tout est prêt et que vous pouvez utilise docker.
Une fois le fichier téléchargé il ne reste plus qu’à faire un double clic dessus pour lancer l’installation
L’assistant d’installation se lance.
Cliquer sur « next » puis choisir le chemin d’installation de l’outil.
Cliquer sur « next » puis choisir les options à installer
Cliquer sur « next » puis choisir un nom au raccourci qui sera créé
Cliquer à nouveau sur « next » puis choisir l’éditeur de text par défaut.
Cliquer sur « next » puis laisser par défaut sur « Git from commande line and also from 3rd party software »
Cliquer encore sur « next » et choisir l’option HTTPS désirée
Cliquer sur « next » puis configurer « the line ending conversasions »
Cliquer sur « next » puis choisir le type de terminal à utiliser
Cliquer sur « next » et laisser les options par défaut puis clique sur « install »
L’installation commence
Maintenant que l’installation de « Docker pour Windows » et de « Git for Windows » est faite, nous allons pouvoir passer à l’installation de « Docker-Machine »
Dans un premier temps, il faudra aller sur le lien suivant pour connaître la dernière version en date de l’outil :
https://github.com/docker/machine/releases
puis ouvrir « Git Bash » qui a été installé grâce à « Git for Windows » et taper la commande suivante :
$ if [[ ! -d "$HOME/bin" ]]; then mkdir -p "$HOME/bin"; fi && \
curl -L https://github.com/docker/machine/releases/download/v0.16.2/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" && \
chmod +x "$HOME/bin/docker-machine.exe"
Valider en appuyant sur « entrée » et l’installation va commencer
« Docker-Machine » est maintenant installé dans « C:\Users\«nom_du_user»\bin »
A ce stade pour le lancer il faudra le lancer uniquement à partie de cet endroit, ce qui n’est pas spécialement pratique.
Pour remédier à ça nous allons créer une variable d’environnement dans Windows.
Dans le panneau de configuration puis dans système et sécurité puis dans système, nous allons modifier les paramètres de Windows.
Cliquer sur « paramètres avancés » puis sur « variables d’environnement »
Dans la section « variable système », nous allons cliquer sur « Path » puis sur « modifier »
Cliquer sur « nouveau » puis écrire le chemin où se trouve « docker-machine »
Valider plusieurs fois par « ok » puis redémarrer l’ordinateur.
Pour utiliser « Docker Machine », il suffira d’ouvrir PowerShell et de taper « docker-machine » suivi de la commande à exécuter.
Nous allons donc effectuer un test et vérifier que tout fonctionne correctement.
Pour cela ouvrir PowerShell et taper la commande « docker-machine version » afin de vérifier la version de notre installation.
Au moment de l’écriture de cette documentation, la dernière version de « Docker machine » est effectivement v0.16.2.
Notre installation est donc correcte et la version est bien à jour.
Pour installer « Docker Machine » sur Linux il suffira simplement d’utiliser la commande suivante :
$ curl -L "https://github.com/docker/machine/releases/download/v0.16.2/docker-machine"-`uname -s`-`uname -m` >/tmp/docker-machine &&
chmod +x /tmp/docker-machine &&
cp /tmp/docker-machine /usr/local/bin/docker-machine
Attention : au moment de la rédaction de cette documentation la dernière version est la v0.16.2. Il est possible qu’avec le temps la version évolue il faudra alors remplacer « v0.16.2 » par la version de la dernière release en date.
Cette commande fera plusieurs choses :
Une fois cette commande effectuée, « Docker Machine » sera prêt à être utilisé.
Pour utiliser « Docker Machine » ce sera très simple. Il suffira d’ouvrir un terminal et de taper « docker-machine » suivi de la commande à exécuter.
Par exemple pour voir la version de « Docker Machine », nous utiliserons cette commande :
docker-machine version
Comme nous l’avons vu précédemment, « Docker Machine » va servir à créer des machines virtuelles possédant le moteur Docker « Docker Engine ». Cet outil permettra également de gérer les différentes images ainsi que les conteneurs sur ces hôtes docker.
La commande utilisée pour créer une machine virtuelle possédant le moteur Docker sera la suivante :
docker-machine create ––driver="driver_à_utiliser_selon_la_plateforme_ciblée" --"options_du_drivers_si_nécessaire"
Cette commande sera accompagnée d’options propres aux différents drivers utilisés.
Actuellement les différentes plateformes compatibles avec « Docker Machine » sont les suivantes :
Nous n’allons pas détailler toutes les options de tous les drivers toutefois nous pourrons lister celles de certains d’entre eux
docker-machine create --driver="virtualbox + options"
docker-machine create –driver="hyperv + options"
docker-machine create --driver "vmwarevsphere" --vmwarevsphere-username="user" --vmwarevsphere-password="password + options"
docker-machine create --driver "openstack + options"
docker-machine create --driver "openstack + options"
Requis :
Optionnels :
Prenons l’exemple de la création d’une machine virtuelle dont le driver sera « Hyper-V ». En effet, pour les postes Windows compatibles avec Hyper-V il est préférable d’utiliser ce driver.
Pour les postes Windows qui ne sont pas compatibles il sera possible par exemple d’installer et d’utiliser VirtualBox.
En utilisant le driver Hyper-V une machine virtuelle sera automatiquement créée dans Hyper-V avec les différentes options indiquées dans la commande.
Avant de commencer à créer nos hôtes Docker Engine, nous allons dans un premier temps devoir créer un nouveau switch virtuel de type « Externe ».
Pour cela, ouvrir le gestionnaire Hyper-V et cliquer sur « Gestionnaire de commutateur virtuel »
Cliquer sur « nouveau commutateur virtuel » dans la partie de gauche puis sélectionner le type « externe » puis cliquer sur créer le commutateur virtuel »
La configuration du vSwitch va apparaître.
Renommer le vSwitch, configurer le type de connexion et cocher la case « autoriser le système…. » puis valider par « OK »
Le vSwitch est créé et sera visible dans la liste
Redémarrer
Pour créer un hôte Docker Engine, la commande que nous allons utiliser pour cet exemple sera celle-ci :
docker-machine create --driver="hyperv" --hyperv-virtual-switch "Nom_du_vSwitch" --hyperv-disk-size "taille_HDD" --hyperv-memory "taille_RAM" --hyperv-cpu-count "NB_de_CPU" "Nom_de_la_VM"
Une fois la VM créée elle sera visible dans le gestionnaire Hyper-V
Attention : Par défaut les machines virtuelles seront créées dans « C:\Users\nom_du_user\.docker\machine\machines ».
L’hôte Docker Engine sera visible dans la liste des hôtes
Il sera également possible d’accéder à la machine virtuelle depuis Hyper-V en effectuant un clic droit sur la VM dans le gestionnaire Hyper-V puis en cliquant sur « se connecter »
Soit pendant le démarrage de la VM
Soit une fois la VM démarrée
Cependant ce ne sera pas de cette manière que nous accèderons aux différents hôtes Docker Engine.
En effet lors de la création de notre hôte, Docker Machine indique comment lier son propre client Docker à cette machine virtuelle
Pour avoir plus d’informations il faudra exécuter la commande
docker-machine env "nom_de_l’hôte_docker_engine"
La commande à exécuter pour se connecter sera alors visible
Nous aurons l’occasion de voir cette partie plus en détail par la suite.
Les différents drivers utilisables afin de créer des hôtes dans le Cloud possèdent tous des spécificités.
La liste complète des drivers ainsi que des caractéristiques pour les faire fonctionner se trouve à cette adresse :
https://docs.docker.com/machine/drivers/
Attention : Pour rappel toutes les commandes effectuées dans cette documentation sont valides pour Docker Machine sur Windows ET Linux.
Pour avoir de l’aide sur les différentes commandes de Docker-Machine il suffira de taper la commande
docker-machine help
Comme nous l’avons vu précédemment, la commande « docker-machine create » va servir à créer des machines virtuelles ayant Docker Engine installé et configuré dessus.
Nous ne reviendrons pas sur cette explication
Pour lister les différents hôtes Docker Engine créé à l’aide de Docker Machine il faudra utiliser la commande suivante
docker machine ls
Options:
Pour supprimer un hôte Docker Engine la commande à utiliser sera celle-ci
docker-machine rm "nom_de_l’hôte"
Options:
Pour arrêter un hôte la commande est la suivante :
docker-machine stop "nom_de_l’hôte"
Pour démarrer un hôte qui serai arrêté la commande est la suivante :
docker-machine start "nom_de_l’hôte"
Pour redémarrer un hôte la commande est la suivante :
docker-machine restart "nom_de_l’hôte"
Pour afficher le statut d’un hôte Docker Engine il suffira de taper cette commande
docker-machine status "nom_de_l’hôte
L’utilisation de « kill » va permettre de forcer l’arrêt d’un hôte cependant il n’est pas conseillé d’utiliser cette commande.
En effet cela revient à un arrêt brutal de la machine, un peu comme si on déconnectait l’alimentation électrique d’un PC.
docker-machine kill "nom_de_l’hôte"
Il est possible de connaître l’adresse IP d’un ou plusieurs hôte. Pour cela la commande à utiliser sera
docker-machine IP "nom_de_l’hôte"
Attention pour avoir l’IP de plusieurs hôtes il suffira de mettre leur nom les uns après les autres séparés d’un espace
Pour visualiser la configuration d’un hôte la commande sera
docker-machine config "nom_de_l’hôte"
Pour visualiser la configuration d’un swarm la commande sera
docker-machine config --swarm "nom_du_swarm"
Tout comme nous l’avions vu pour les différents objets Docker, il sera possible d’afficher les informations de bas niveau des hôtes.
La commande est la suivante :
docker-machine inspect "nom_de_l’hôte"
Nous pouvons également monter un répertoire d’un hôte Docker Engine en local sur la machine qui utilise Docker Machine à l’aide de SSHFS.
Pour cela la commande à utiliser sera :
docker-machine mount "nom_de_l’hôte:chemin_complet_du_répertoire" "répertoire_docker_machine"
Nous venons de créer notre machine hôte VirtualLab et elle ne possède donc pas de répertoire particulier que nous aurions créé.
Nous allons donc commencer par créer un répertoire dans le chemin où nous nous trouvons via PowerShell puis nous allons créer un répertoire sur VirtualLab.
Nos deux machine ont donc un répertoire identique que nous allons utiliser.
Attention : pour que le montage fonctionne en utilisant Docker Machine sur Windows il faudra obligatoirement avoir sshfs d’installer sur la machine
Il peut parfois être utile de réexécuter le processus de provisioning sur une machine créée.
Cela peut être dû à une défaillance lors du processus de configuration d'origine ou à une dérive par rapport à l'état système souhaité (y compris la configuration Swarm ou Engine spécifiée à l'origine).
docker-machine provision "nom_de_l’hôte"
Le processus de provisioning de la machine va:
Attention : Cette commande doit être effectuée uniquement sur un hôte déjà créé.
Il est possible de regénérer les certificats TLS pour un hôte à l’aide de la commande suivante
docker-machine regenerate-certs "nom_de_l’hôte"
Options:
Attention : Si vos certificats ont expirés, vous devrez également régénérer les « certificats client » à l'aide de l'option « --client-certs »
Nous pouvons copier des données depuis la machine local qui possède Docker Machine vers un hôte Docker Engine.
docker-machine scp "nom_de_l’hôte/chemin_du_fichier"
Comme notre machine hôte VirtualLab est vierge puis qu’elle a été créée pour ce Lab, nous n’avons pas de données à récupérer à l’aide de scp.
Dans ce cas nous allons créer un fichier texte que nous utiliserons pour la commande scp.
Commençons par vérifier le chemin par défaut lors de connexion ssh à notre machine hôte VirtualLab
Le répertoire par défaut est « /home/docker ». Cela nous permet de savoir où sera créer le fichier que nous allons tenter de télécharger.
Maintenant nous allons créer un fichier dans notre hôte Docker Engine
Il ne reste plus qu’à récupérer le fichier à l’aide de la commande indiquée précédemment
Attention : pour récupérer des fichier en utilisant Docker Machine sur Windows il faudra obligatoirement avoir scp d’installer sur la machine
Il est également possible de se connecter en SSH à un hôte Docker Engine.
Pour cela la commande sera
docker-machine ssh "nom_de_l’hôte"
Pour mettre à jour un hôte avec la dernière version de Docker la commande à utiliser sera celle-ci :
docker-machine upgrade «nom_de_l’hôte»
Pour obtenir l'URL d'un hôte il faudra taper la commande :
docker-machine url "nom_de_l’hôte"
Comme nous l’avons plus ou moins vu précédemment, pour connaître les différents paramètres d’environnement d’un hôte Docker Engine il faudra utiliser la commande suivante
docker-machine env "nom_de_l’hôte"
Cette commande permet également de savoir comment « connecter » notre hôte Docker Machine à un hôte Docker Engine afin d’y exécuter des commandes.
Options:
Pour se connecter à un hôte Docker Engine, la commande sera la suivante
docker-machine env "nom_de_l’hôte" | Invoke-Expression
Une fois connecté à un hôte nous pourrons utiliser les commandes Docker afin de manager les images et les conteneurs de l’hôte Docker Engine.
Vérifions la liste des images disponibles sur notre hôte Docker Engine :
Testons d’instancier le conteneur « hello-world »
Vérifions si l’images a bien été téléchargées sur notre hôte Docker Engine, ici VirtualLab.
Et vérifions si le conteneur a bien été instancié sur cet hôte Docker Engine
Parmi toutes les options de Docker Machine, « active » permet de voir quelle machine est «active»
Une machine est considérée comme « active » si la variable d'environnement « DOCKER_HOST » pointe vers elle.
Autrement dit, si l’hôte Docker Machine est connecté à cet hôte Docker Engine.
Pour le vérifier il faudra utiliser « ls » pour regarder la colonne « active »
Ou alors utiliser la commande suivante
docker-machine active