Comment provisionner et gérer des hôtes Docker distants avec Docker Machine sur CentOS 7

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.