introduction
Docker Machine est un outil qui facilite la mise en service et la gestion de plusieurs hôtes Docker à distance à partir de votre ordinateur personnel. De tels serveurs sont généralement appelés hôtes dockerisés et peuvent naturellement être utilisés pour exécuter des conteneurs Docker.
Bien que Docker Machine puisse être installé sur un système local ou distant, l'approche la plus courante consiste à l'installer sur votre ordinateur local (installation native ou machine virtuelle) et à l'utiliser pour configurer des serveurs distants dockérisés.
Bien que Docker Machine puisse être installé sur la plupart des distributions Linux, ainsi que sur Mac OS X et Windows, nous l'installerons dans ce didacticiel sur votre machine locale exécutant CentOS 7 et nous l'utilisons pour fournir des droplets Dockerized DigitalOcean.
Conditions préalables
Pour suivre ce tutoriel, vous aurez besoin des éléments suivants:
-
Une machine locale exécutant CentOS 7 avec Docker installé. (voirHow To Install and Use Docker on CentOS 7 pour les instructions)
-
Un jeton d'API DigitalOcean. Si vous n'en avez pas, générez-le en utilisantthis guide. Lorsque vous générez un jeton, assurez-vous qu'il a une portée en lecture-écriture. C'est la valeur par défaut. Par conséquent, si vous ne modifiez aucune option lors de sa génération, elle disposera de fonctionnalités de lecture-écriture. Et pour faciliter l'utilisation sur la ligne de commande, veillez à affecter le jeton à une variable comme indiqué dans cet article.
[[step-1 -—- Installing-docker-machine-on-your-local-computer]] == Étape 1 - Installation de Docker Machine sur votre ordinateur local
A cette étape, nous allons suivre l’installation de Docker Machine sur votre ordinateur local exécutant CentOS 7.
Pour télécharger et installer le binaire, tapez:
wget https://github.com/docker/machine/releases/download/v0.14.0/docker-machine-$(uname -s)-$(uname -m)
Le nom du fichier doit êtredocker-machine-Linux-x86_64
. Renommez-le endocker-machine
pour faciliter le travail avec:
mv docker-machine-Linux-x86_64 docker-machine
Rendez-le exécutable:
chmod +x docker-machine
Déplacez-le ou copiez-le dans le répertoireusr/local/bin
afin qu'il soit disponible en tant que commande système.
sudo mv docker-machine /usr/local/bin
Vérifiez la version, qui indiquera qu’elle est correctement installée:
docker-machine version
La sortie doit être similaire à
Outputdocker-machine version 0.14.0, build 89b8332
[[step-2 -—- Installing-additional-docker-machine-scripts]] == Étape 2 - Installation de scripts supplémentaires pour Docker Machine
Il existe trois scripts bash dans le référentiel GitHub de Docker Machine conçus pour faciliter l'utilisation des commandesdocker
etdocker-machine
. Ils fournissent l'achèvement de la commande et la personnalisation de l'invite bash.
Dans cette étape, nous allons installer les trois scripts sur votre ordinateur local. Ils seront téléchargés et installés dans le répertoire/etc/bash_completion.d
.
Le premier script permet de voir la machine active dans votre invite bash. Cela s'avère pratique lorsque vous travaillez avec plusieurs machines dockerisées et que vous passez de l'une à l'autre. Le script s'appelledocker-machine-prompt.bash
. Pour le télécharger, tapez:
sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine-prompt.bash -O /etc/bash_completion.d/docker-machine-prompt.bash
Pour terminer l'installation du fichier ci-dessus, vous devrez définir une valeur personnalisée pour la variablePS1
dans votre fichier.bashrc
. Alors ouvrez-le en utilisantnano
(PS1 est une variable shell spéciale utilisée pour modifier l'invite de commande bash):
nano ~/.bashrc
Copiez et collez la ligne suivante à la fin de ce fichier:
~/.bashrc
export PS1='[\u@\h \W$(__docker_machine_ps1 " [%s]")]\$ '
Avec cette modification de votre fichier~/.bashrc
, lorsque vous activez une machine, son nom sera inséré dans l'invite du shell.
Enregistrez et fermez le fichier.
Le deuxième script s'appelledocker-machine-wrapper.bash
. Il ajoute une sous-commandeuse
à la commandedocker-machine
, ce qui facilite le basculement entre les machines ancrées. Pour le télécharger, tapez
sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine-wrapper.bash -O /etc/bash_completion.d/docker-machine-wrapper.bash
Le troisième script s'appelledocker-machine.bash
. Il ajoute l'achèvement bash pour les commandesdocker-machine
. Téléchargez-le en utilisant:
sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine.bash -O /etc/bash_completion.d/docker-machine.bash
Pour appliquer les modifications que vous avez apportées jusqu’à présent, fermez, puis rouvrez votre terminal. Si vous êtes connecté à la machine via SSH, quittez la session et connectez-vous à nouveau. L'achèvement de la commande pour les commandesdocker
etdocker-machine
devrait maintenant fonctionner. Si cela ne fonctionne pas, il est probable que le packagebash-completion
ne soit pas installé. Si tel est le cas, installez-le en utilisant:
sudo yum install bash-completion
Cela devrait résoudre le problème.
[[step-3 -—- provisioning-a-dockerized-host-using-docker-machine]] == Étape 3 - Provisionnement d'un hôte dockerisé à l'aide de Docker Machine
Maintenant que Docker et Docker Machine sont en cours d’exécution sur votre machine locale, vous pouvez désormais provisionner un Droplet Dockerized sur votre compte DigitalOcean à l’aide de la commandedocker-machine create
de Docker Machine. Si vous ne l'avez pas déjà fait, affectez votre jeton d'API DigitalOcean à une variable bash à l'aide de:
export shell-variable=your-api-token
NOTE: This tutorial uses [.highlight]#DOTOKEN comme variable bash pour le jeton DO API. Il n'est pas nécessaire que le nom de la variable soit DOTOKEN, et il ne doit pas nécessairement être en majuscules.
#
Pour rendre la variable permanente, placez-la dans votre fichier~/.bashrc
. Cette étape est facultative, mais elle est nécessaire si vous souhaitez que la valeur persiste dans les sessions de terminal.
nano ~/.bashrc
Ajoutez une ligne semblable à celle-ci n'importe où:
~/.bashrcexport DOTOKEN=your-api-token
Pour activer la variable dans la session de terminal en cours, tapez:
source ~/.bashrc
Pour appeler la commandedocker-machine create
avec succès, vous devez spécifier (au minimum) le pilote, le jeton API (ou la variable qui l'évalue) et un nom unique pour l'hôte distant. Pour créer votre premier hôte dockerisé, tapez:
docker-machine create --driver digitalocean --digitalocean-access-token $DOTOKEN machine-name
La sortie partielle en cours de création de l'hôte est la suivante. Dans cette sortie, le nom de l'hôte estcentos-docker
:
Output
...
Installing Docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker i up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env centos-docker
Une paire de clés SSH est créée pour le nouvel hôte afin quedocker-machine
puisse y accéder à distance. Droplet est configuré avec le système d'exploitation souhaité et Docker est installé sur le système. Lorsque la commande est terminée, votre droplet Docker est opérationnel.
Pour voir le nouvel hôte créé à partir de la ligne de commande, tapez:
docker-machine ls
Le résultat devrait ressembler à ceci:
OutputNAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
centos-docker - digitalocean Running tcp://203.0.113.71:2376 v18.05.0-ce
[[step-4 -—- specify-the-base-os-when-creating-a-dockerized-host]] == Étape 4 - Spécifiez le système d'exploitation de base lors de la création d'un hôte ancré
Cette étape vous montre comment spécifier un système d'exploitation de base et une version pour l'hôte ancré en cours de création avec l'indicateur--digitalocean-image
.
Par exemple, pour créer un hôte dockerisé à l'aide de CentOS 7, tapez:
docker-machine create --driver digitalocean --digitalocean-image centos-7-x64 --digitalocean-access-token $DOTOKEN machine-name
Et si vous souhaitez exécuter Debian 8 sur votre serveur? Vous voudriez taper la commande suivante:
docker-machine create --driver digitalocean --digitalocean-image debian-8-x64 --digitalocean-access-token $DOTOKEN machine-name
Par défaut, le système d'exploitation de base utilisé lors de la création d'un hôte dockerisé avec Docker Machine estsupposed pour être la dernière version (ou la dernière version LTS pour Ubuntu). Cependant, au moment de cette publication, la commandedocker-machine create
utilise toujours Ubuntu 16.04 LTS comme système d'exploitation de base, même si Ubuntu 18.04 est la dernière édition LTS. Donc, si vous devez exécuter Ubuntu 18.04, vous devrez spécifier Ubuntu avec la version souhaitée en passant le drapeau--digitalocean-image
à la commandedocker-machine create
:
docker-machine create --driver digitalocean --digitalocean-image ubuntu-18-04-x64 --digitalocean-access-token $DOTOKEN machine-name
Le système d'exploitation de base n'est pas le seul choix que vous avez. Vous pouvez également spécifier la taille de la gouttelette. Par défaut, il s'agit du plus petit Droplet, doté de 1 Go de RAM, d'un seul processeur et d'un disque SSD de 25 Go.
Trouvez la taille du droplet que vous souhaitez utiliser en recherchant le slug correspondant dans lesDigitalOcean API documentation.
Par exemple, pour provisionner une machine avec 2 Go de RAM, deux processeurs et un SSD de 60 Go, utilisez le slugs-2vcpu-2gb
:
docker-machine create --driver digitalocean --digitalocean-size s-2vcpu-2gb --digitalocean-access-token $DOTOKEN machine-name
Pour voir tous les indicateurs spécifiques à la création d'une machine Docker à l'aide du pilote DigitalOcean, tapez:
docker-machine create --driver digitalocean -h
[.tip] #Tip: Si vous actualisez la page Droplet de votre tableau de bord DigitalOcean, vous devriez voir les nouveaux hôtes que vous avez créés à l'aide de la commandedocker-machine
.
#
[[step-5 -—- executing-other-docker-machine-commands]] == Étape 5 - Exécution d'autres commandes de la machine Docker
Vous avez vu comment provisionner un hôte ancré à l’aide de la sous-commandecreate
. Vous avez également vu comment répertorier les hôtes disponibles pour Docker Machine à l'aide de la sous-commandels
. Dans cette étape, vous en apprendrez plus sur quelques autres sous-commandes dedocker-machine
.
Pour obtenir des informations détaillées sur un hôte ancré, utilisez la sous-commandeinspect
, comme ceci:
docker-machine inspect machine-name
La sortie devrait inclure des lignes comme celles-ci. La ligneImage révèle la version de la distribution Linux utilisée:
Output{
"ConfigVersion": 3,
"Driver": {
"IPAddress": "203.0.113.71",
"MachineName": "centos-docker",
"SSHUser": "root",
"SSHPort": 22,
...
"Image": "centos-7-0-x64",
"Size": "s-1vcpu-1gb",
...
},
---
Pour imprimer la configuration de connexion pour un hôte, tapez:
docker-machine config machine-name
Le résultat devrait ressembler à ceci:
Output--tlsverify
--tlscacert="/home/kamit/.docker/machine/certs/ca.pem"
--tlscert="/home/kamit/.docker/machine/certs/cert.pem"
--tlskey="/home/kamit/.docker/machine/certs/key.pem"
-H=tcp://203.0.113.71:2376
La dernière ligne de la sortie de la commandedocker-machine config
révèle l'adresse IP de l'hôte, mais vous pouvez également obtenir cette information en tapant:
docker-machine ip machine-name
Si vous devez mettre hors tension un hôte distant, vous pouvez utiliserdocker-machine
pour l'arrêter:
docker-machine stop machine-name
Vérifiez qu'il est arrêté.
docker-machine ls
Le statut de l'hôte a changé:
OuputNAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
centos-docker digitalocean Timeout
Pour le redémarrer:
docker-machine start machine-name
Vérifiez qu'il est démarré:
docker-machine ls
Vous verrez que leSTATE
est maintenant définiRunning
pour l'hôte:
OuputNAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
centos-docker - digitalocean Running tcp://203.0.113.71:2376 v18.05.0-ce
Enfin, si vous souhaitez supprimer un hôte:
docker-machine rm machine-name
[[step-6 -—- executing-commands-on-a-dockerized-host-via-ssh]] == Étape 6 - Exécution de commandes sur un hôte ancré via SSH
À ce stade, vous obtenez des informations sur vos hôtes, mais vous pouvez faire plus que cela. Par exemple, vous pouvez exécuter des commandes Linux natives sur un hôte Docker en utilisant la sous-commandessh
dedocker-machine
depuis votre système local. Cette section explique comment exécuter les commandesssh
viadocker-machine
ainsi que comment ouvrir une session SSH sur un hôte ancré.
En supposant que vous ayez configuré CentOS comme hôte sur un hôte, exécutez la commande suivante à partir de votre système local pour mettre à jour les packages sur l'hôte Docker:
docker-machine ssh machine-name yum update
Vous ne savez pas quel noyau votre hôte Docker distant utilise? Tapez ce qui suit:
docker-machine ssh machine-name uname -r
En plus d'utiliser la sous-commandessh
pour exécuter des commandes sur l'hôte Docker distant, vous pouvez également l'utiliser pour vous connecter à l'hôte Dockerized lui-même. C’est aussi simple que de taper:
docker-machine ssh machine-name
Votre invite de commande changera pour refléter le fait que vous êtes connecté à l'hôte distant:
root@machine-name#
Pour quitter l'hôte distant, tapez:
exit
[[step-7 -—- activating-a-dockerized-host]] == Étape 7 - Activation d'un hôte dockerized
L'activation d'un hôte Docker connecte votre client Docker local à ce système, ce qui permet d'exécuter des commandesdocker
normales sur le système distant. Pour activer un hôte Docker, tapez la commande suivante:
eval $(docker-machine env machine-name)
Alternativement, vous pouvez l'activer en utilisant cette commande:
docker-machine use machine-name
[.tip] #Tip Lorsque vous travaillez avec plusieurs hôtes Docker, la commandedocker-machine use
est la méthode la plus simple pour passer de l'un à l'autre.
#
Après avoir tapé l’une des commandes ci-dessus, votre invite bash devrait changer pour indiquer que votre client Docker pointe vers l’hôte Docker distant. Cela prendra cette forme. Le nom de l'hôte sera à la fin de l'invite:
username@localmachine:~ [machine-name]$
Désormais, toute commandedocker
que vous tapez à cette invite de commande sera exécutée sur cet hôte distant.
Si un hôte est actif sur le terminal sur lequel la commandedocker-machine ls
est exécutée, l'astérisque sous la colonneACTIVE indique qu'il est actif.
Output NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
centos-docker * digitalocean Running tcp://203.0.113.71:2376 v18.05.0-ce
[.note] #NOTE: Lorsqu'un hôte est actif, toute commandedocker
que vous tapez sur le terminal que vous utilisez sera exécutée sur l'hôte distant. Cependant, toutes les commandes Linux normales sont exécutées sur l'ordinateur local.
#
Pour quitter l'hôte Docker distant, tapez ce qui suit:
docker-machine use -u
Vous serez renvoyé à l'invite de votre système local.
Créons maintenant des conteneurs sur la machine distante.
[[step-8 -—- creation-docker-containers-on-a-remote-dockerized-host]] == Étape 8 - Création de conteneurs Docker sur un hôte distant ancré
Jusqu'à présent, vous avez provisionné une Droplet Dockerized sur votre compte DigitalOcean et vous l'avez activé - c'est-à-dire que votre client Docker le pointe. La prochaine étape logique consiste à faire tourner les conteneurs dessus. Par exemple, essayons d’exécuter le conteneur officiel Nginx.
Utilisezdocker-machine use
pour sélectionner votre machine distante:
docker-machine use machine-name
Maintenant, exécutez cette commande pour exécuter un conteneur Nginx sur cette machine:
docker run -d -p 8080:80 --name httpserver nginx
Dans cette commande, nous mappons le port80
du conteneur Nginx sur le port8080
sur l'hôte ancré afin que nous puissions accéder à la page Nginx par défaut de n'importe où.
Si la commande s'exécute avec succès, vous pourrez accéder à la page Nginx par défaut en pointant votre navigateur Web vershttp://docker_machine_ip:8080
.
Tant que l'hôte Docker est toujours activé (comme son nom l'indique dans l'invite), vous devriez pouvoir répertorier les images de cet hôte:
docker images
La sortie doit inclure l'image Nginx que vous venez d'utiliser, ainsi que d'autres téléchargées auparavant:
OutputREPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ae513a47849c 3 weeks ago 109MB
Vous pouvez également répertorier les conteneurs actifs ou en cours d'exécution sur l'hôte:
docker ps
Si le conteneur Nginx que vous avez exécuté à cette étape est le seul conteneur actif, la sortie devrait ressembler à ceci:
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4284f9d25548 nginx "nginx -g 'daemon of…" 20 minutes ago Up 20 minutes 0.0.0.0:8080->80/tcp httpserver
Pour quitter l'invite de l'hôte distant, tapezexit
. Cela fermera également le terminal:
exit
[.tip] #Tip: Si vous avez l'intention de créer des conteneurs sur un hôte distant, votre client Dockermust pointe vers celui-ci - c'est-à-dire qu'il doit être l'hôte actif du terminal que vous en utilisant. Sinon, vous créerez le conteneur sur votre ordinateur local. Laissez votre invite de commande être votre guide.
#
[[step-9 -—- disabling-crash-reporting-optional]] == Étape 9 - Désactivation de Crash Reporting (facultatif)
Par défaut, chaque fois qu'une tentative de provisionnement d'un hôte dockerisé à l'aide de Docker Machine échoue ou qu'une machine Docker se bloque, certaines informations de diagnostic sont automatiquement envoyées à un compte Docker sur Bugsnag. Si cela ne vous convient pas, vous pouvez désactiver la création de rapports en créant un fichier vide appeléno-error-report
dans le répertoire de vos installations.docker/machine
.
Pour ce faire, tapez simplement:
touch ~/.docker/machine/no-error-report
Recherchez des messages d'erreur dans le fichier en cas d'échec de la mise en service ou d'échec de Docker Machine.
Conclusion
C’est une introduction à l’installation et à l’utilisation de Docker Machine pour mettre en service plusieurs droplets Docker à distance à partir d’un système local. Maintenant, vous devriez pouvoir provisionner rapidement autant d’hôtes dockérisés que nécessaire sur votre compte DigitalOcean.
Pour en savoir plus sur les machines Docker, visitez le siteofficial documentation page. Les trois scripts bash téléchargés dans ce didacticiel sont hébergés surthis GitHub page.