Comment utiliser un serveur Docker distant pour accélérer votre flux de travail

introduction

La création d’images et de fichiers binaires gourmands en ressources processeur est un processus très lent et qui peut parfois transformer votre ordinateur portable en appareil de chauffage autonome. Pousser des images Docker sur une connexion lente prend également beaucoup de temps. Heureusement, il existe une solution simple à ces problèmes. Docker vous permet de décharger toutes ces tâches sur un serveur distant afin que votre ordinateur local n’ait pas à faire ce travail difficile.

Cette fonctionnalité a été introduite dans Docker 18.09. Il apporte un support pour la connexion à un hôte Docker à distance via SSH. Il nécessite très peu de configuration sur le client et ne nécessite qu'un serveur Docker standard sans configuration spéciale exécutée sur une machine distante. Avant Docker 18.09, vous deviez utiliser Docker Machine pour créer un serveur Docker distant, puis configurer l'environnement Docker local pour l'utiliser. Cette nouvelle méthode supprime cette complexité supplémentaire.

Dans ce didacticiel, vous allez créer un Droplet pour héberger le serveur Docker distant et configurer la commandedocker sur votre ordinateur local pour l'utiliser.

Conditions préalables

Pour suivre ce tutoriel, vous aurez besoin de:

  • Un compte DigitalOcean. Vous pouvezcreate an account si vous n’en avez pas déjà.

  • Docker installé sur votre machine locale ou serveur de développement. Si vous travaillez avec Ubuntu 18.04, suivez les étapes 1 et 2 deHow To Install and Use Docker on Ubuntu 18.04; sinon, suivez lesofficial documentation pour obtenir des informations sur l'installation sur d'autres systèmes d'exploitation. Assurez-vous d'ajouter votre utilisateur non root au groupedocker, comme décrit à l'étape 2 du didacticiel lié.

[[step-1 -–- creation-the-docker-host]] == Étape 1 - Création de l'hôte Docker

Pour commencer, lancez une Droplet avec une puissance de traitement décente. Les plans optimisés pour le processeur conviennent parfaitement à cette fin, mais les plans standard fonctionnent tout aussi bien. Si vous voulez compiler des programmes gourmands en ressources, les plans Optimisé pour la CPU fournissent des cœurs de CPU dédiés permettant des générations plus rapides. Sinon, les forfaits standard offrent un rapport CPU / RAM plus équilibré.

LeDocker One-click image s'occupe de toute la configuration pour nous. Follow this link pour créer un droplet 16 Go / 8vCPU optimisé pour le processeur avec Docker à partir du panneau de commande.

Vous pouvez également utiliserdoctl pour créer le droplet à partir de votre ligne de commande locale. Pour l'installer, suivez les instructions desdoctl README file on GitHub.

La commande suivante crée un nouveau droplet optimisé pour le processeur de 16 Go / 8vCPU dans la région FRA1 en fonction de l'image Docker One-click:

doctl compute droplet create docker-host \
    --image docker-18-04 \
    --region fra1 \
    --size c-8 \
    --wait \
    --ssh-keys $(doctl compute ssh-key list --format ID --no-header | sed 's/$/,/' | tr -d '\n' | sed 's/,$//')

La commandedoctl utilise la valeurssh-keys pour spécifier les clés SSH à appliquer à votre nouveau Droplet. Nous utilisons un sous-shell pour appelerdoctl compute ssh-key-list pour récupérer les clés SSH associées à votre compte DigitalOcean, puis analysons les résultats à l'aide des commandessed ettr pour formater les données au format correct. Cette commande inclut toutes les clés SSH de votre compte, mais vous pouvez remplacer la sous-commande en surbrillance par l’empreinte de la clé que vous avez dans votre compte.

Une fois le Droplet créé, vous verrez son adresse IP parmi d'autres détails:

OutputID           Name           Public IPv4        Private IPv4    Public IPv6    Memory    VCPUs    Disk    Region    Image                                 Status    Tags    Features    Volumes
148681562    docker-host    your_server_ip                                    16384     8        100     fra1      Ubuntu Docker 5:18.09.6~3 on 18.04    active

Vous pouvez en savoir plus sur l'utilisation de la commandedoctl dans le didacticielHow To Use doctl, the Official DigitalOcean Command-Line Client.

Lorsque le Droplet est créé, vous disposez d’un serveur Docker prêt à être utilisé. Pour des raisons de sécurité, créez un utilisateur Linux à utiliser à la place deroot.

Tout d'abord, connectez-vous au Droplet avec SSH en tant qu'utilisateurroot:

ssh root@your_server_ip

Une fois connecté, ajoutez un nouvel utilisateur. Cette commande ajoute un nommésammy:

adduser sammy

Ajoutez ensuite l'utilisateur au groupedocker pour lui donner l'autorisation d'exécuter des commandes sur l'hôte Docker.

sudo usermod -aG docker sammy

Enfin, quittez le serveur distant en tapantexit.

Maintenant que le serveur est prêt, configurons la commande localedocker pour l’utiliser.

[[step-2 -–- configuration-docker-to-use-the-remote-host]] == Étape 2 - Configuration de Docker pour utiliser l'hôte distant

Pour utiliser l'hôte distant comme hôte Docker au lieu de votre machine locale, définissez la variable d'environnementDOCKER_HOST pour qu'elle pointe vers l'hôte distant. Cette variable indiquera au client CLI Docker de se connecter au serveur distant.

export DOCKER_HOST=ssh://sammy@your_server_ip

Désormais, toutes les commandes Docker que vous exécuterez seront exécutées sur le droplet. Par exemple, si vous démarrez un conteneur de serveur Web et exposez un port, celui-ci sera exécuté sur le Droplet et sera accessible via le port que vous avez exposé à l’adresse IP de ce dernier.

Pour vérifier que vous accédez au Droplet en tant qu'hôte Docker, exécutezdocker info.

docker info

Le nom d'hôte de votre Droplet apparaîtra dans le champName comme suit:

Output…
Name: docker-host
…

Une chose à garder à l'esprit est que lorsque vous exécutez une commandedocker build, le contexte de construction (tous les fichiers et dossiers accessibles à partir desDockerfile) sera envoyé à l'hôte, puis le processus de construction s'exécutera. En fonction de la taille du contexte de construction et du nombre de fichiers, cela peut prendre plus de temps que de générer l'image sur un ordinateur local. Une solution serait de créer un nouveau répertoire dédié à l'image Docker et de copier ou de lier uniquement les fichiers qui seront utilisés dans l'image, afin qu'aucun fichier inutile ne soit téléchargé par inadvertance.

Une fois que vous avez défini la variableDOCKER_HOST à l’aide deexport, sa valeur persistera pendant toute la durée de la session shell. Si vous devez utiliser à nouveau votre serveur Docker local, vous pouvez effacer la variable à l'aide de la commande suivante:

unset DOCKER_HOST

Conclusion

Vous avez créé un hôte Docker distant et vous y êtes connecté localement. La prochaine fois que la batterie de votre ordinateur portable sera faible ou si vous devez créer une image Docker lourde, utilisez votre brillant serveur Docker à la place de votre ordinateur local.

Vous pourriez également être intéressé par l'apprentissage dehow to optimize Docker images for production ouhow to optimize them specifically for Kubernetes.