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, dans ce tutoriel, nous l'installerons sur votre machine locale exécutant Ubuntu 16.04 et nous l'utilisons pour fournir des droplets DigitalOcean dockerisés.
Conditions préalables
Pour suivre ce tutoriel, vous aurez besoin des éléments suivants:
-
Une machine locale exécutant Ubuntu 16.04 avec Docker installé (voirHow To Install and Use Docker on Ubuntu 16.04 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. Pour faciliter son 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
Dans cette étape, nous allons suivre le processus d’installation de Docker Machine sur votre ordinateur local exécutant Ubuntu 16.04.
Pour télécharger et installer le fichier binaire Docker Machine, 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 ces 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 vous permet de voir la machine active à partir de votre invite bash. Cela s'avère pratique lorsque vous travaillez avec plusieurs machines dockérisé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
. Pour ce faire, ouvrez-le en utilisantnano
(PS1
est une variable shell spéciale utilisée pour modifier l'invite de commande bash):
nano ~/.bashrc
Dans ce fichier, il y a trois lignes qui commencent parPS1. Ils devraient être comme ceux-ci:
~/.bashrc
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
Pour chaque ligne, insérez$(__docker_machine_ps1 " [%s]")
près de la fin pour qu'ils lisent:
~/.bashrc
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__docker_machine_ps1 " [%s]")\$ '
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(__docker_machine_ps1 " [%s]")\$ '
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$(__docker_machine_ps1 " [%s]")$PS1"
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 Docker. 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.
[[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 DOTOKEN=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.
Ouvrez ce fichier avecnano
:
nano ~/.bashrc
Ajoutez une ligne semblable à celle-ci n'importe où:
~/.bashrc
export 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 la machine. Pour créer votre première machine, tapez:
docker-machine create --driver digitalocean --digitalocean-access-token $DOTOKEN machine-name
La sortie partielle lors de la création de la machine est la suivante. Dans cette sortie, le nom de la machine estubuntu1604-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 is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env ubuntu1604-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 la machine nouvellement créée à partir de la ligne de commande, tapez:
docker-machine ls
Le résultat devrait ressembler à ceci:
OutputNAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
ubuntu1604-docker - digitalocean Running tcp://203.0.113.71:2376 v18.05.0-ce
[[step-4 -—- specifying-the-base-os-when-creating-a-dockerized-host]] == Étape 4 - Spécification du système d'exploitation de base lors de la création d'un hôte ancré
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 le dernier Ubuntu LTS. 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 sur une machine récemment provisionnée, vous devrez spécifier Ubuntu avec la version souhaitée en passant l'indicateur--digitalocean-image
à la commandedocker-machine create
.
Par exemple, pour créer une machine utilisant Ubuntu 18.04, tapez:
docker-machine create --driver digitalocean --digitalocean-image ubuntu-18-04-x64 --digitalocean-access-token $DOTOKEN machine-name
Vous n'êtes pas limité à une version d'Ubuntu. Vous pouvez créer une machine à l'aide de tout système d'exploitation pris en charge par DigitalOcean. Par exemple, pour créer une machine utilisant Debian 8, tapez:
docker-machine create --driver digitalocean --digitalocean-image debian-8-x64 --digitalocean-access-token $DOTOKEN machine-name
Pour provisionner un hôte dockerisé en utilisant CentOS 7 comme système d'exploitation de base, spécifiezcentos-7-0-x86
comme nom d'image, comme ceci:
docker-machine create --driver digitalocean --digitalocean-image centos-7-0-x64 --digitalocean-access-token $DOTOKEN centos7-docker
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 verrez les nouvelles machines que vous avez créées à l'aide de la commandedocker-machine
.
#
[[step-5 -—- executing-additional-docker-machine-commands]] == Étape 5 - Exécution de commandes supplémentaires de Docker Machine
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 apprendrez quelques sous-commandes dedocker-machine
upplémentaires.
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 indique la version de la distribution Linux utilisée et la lignesize indique le slug de taille:
Output...
{
"ConfigVersion": 3,
"Driver": {
"IPAddress": "203.0.113.71",
"MachineName": "ubuntu1604-docker",
"SSHUser": "root",
"SSHPort": 22,
...
"Image": "ubuntu-16-04-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 la machine a changé:
OuputNAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
ubuntu1604-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
ubuntu1604-docker - digitalocean Running tcp://203.0.113.71:2376 v18.05.0-ce
Ensuite, vous pouvez le supprimer en utilisant:
docker-machine rm machine-name
Le Droplet est supprimé avec la clé SSH créée pour lui pardocker-machine.
Maintenant, lorsque vous répertoriez les hôtes ancrés, vous ne devriez pas voir celui que vous venez de supprimer:
docker-machine ls
[[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 machines, 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é une machine avec Ubuntu comme système d'exploitation, exécutez la commande suivante sur votre système local pour mettre à jour la base de données de packages sur l'hôte Docker:
docker-machine ssh machine-name apt-get update
Vous pouvez même appliquer les mises à jour disponibles en utilisant:
docker-machine ssh machine-name apt-get upgrade
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 à la machine elle-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:
Outputroot@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.
OutputNAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
ubuntu1604-docker * digitalocean Running tcp://203.0.113.71:2376 v18.05.0-ce
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, tapez. Cela fermera également le terminal:
exit
[.note] #Note: Si vous avez l’intention de créer des conteneurs sur une machine distante, votre client Docker doit pointer vers celui-ci, c’est-à-dire qu’il doit être l’ordinateur actif du terminal que vous utilisez. Sinon, vous créerez le conteneur sur votre ordinateur local. Encore une fois, 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 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 votre installation.docker/machine
.
Pour créer le fichier, tapez:
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.