Docker Hub et Registres Docker: un guide pour les débutants
L’utilisation de Docker Hub, le registre officiel des conteneurs de Docker, est montée en flèche. De novembre 2019 à fin juillet 2020, le nombre total de pulls (un pull est un téléchargement d’une image Docker) depuis Docker Hub est passé de 130 milliards à 242 milliards. Cela démontre la popularité de la conteneurisation en général et de Docker en particulier.
Ce n’est un secret pour personne que Docker est partout. Mais comprendre les spécificités de l’écosystème peut s’avérer difficile. Qu’est-ce qu’un registre de conteneurs ? Quels sont les avantages de l’utilisation de Docker Hub ? Nous allons vous aider à répondre à ces questions et vous fournir un exemple étape par étape de la façon dont vous pouvez commencer à utiliser le registre officiel de Docker, Docker Hub.
Qu’est-ce qu’un registre Docker ?
Un registre Docker (en anglais, Docker registry) est un service qui héberge et distribue des Images Docker..
Dans de nombreux cas, un registre est constitué de plusieurs dépôts contenant des images liées à un projet spécifique. Dans un dépôt donné, les balises sont utilisées pour différencier les versions d’une image (par ex., ubuntu/httpd:version2.4, ubuntu/httpd:version2.5, ubuntu/httpd:version2.6, « version2.x » étant la balise). Les utilisateurs peuvent télécharger (pull) des images qu’ils souhaitent utiliser ou charger (push) les images qu’ils souhaitent stocker dans un registre.
En fournissant une source centralisée d’images, les registres peuvent permettre un contrôle plus strict des versions et faciliter la gestion et la distribution des images. En outre, de nombreux services de registre offrent des fonctionnalités supplémentaires qui permettent d’automatiser les processus de build et de déploiement et d’améliorer la sécurité.
Les registres Docker peuvent être hébergés dans le cloud ou sur site. En plus de Docker Hub, d’autres exemples populaires de registres Docker incluent :
- Quay
- Google Container Registry
- Amazon Elastic Container Registry (Amazon ECR)
- Notre JFrog Artifactory et JFrog Container Registry
Vous pouvez même créer votre propre registre Docker à partir de l’image de registre officielle, mais il vaut généralement la peine d’explorer d’autres solutions avant d’utiliser cette image de base comme point de départ.
Qu’est-ce que Docker Hub?
Docker Hub est le registre basé sur le cloud officiel de Docker pour les images Docker.
Comme vous pouvez vous en douter, Docker Hub, en tant que registre officiel de Docker, est le registre par défaut lorsque vous installez Docker. Il héberge plus de 100 000 images, dont les images officielles de MongoDB, nginx, Apache, Ubuntu et MySQL, qui ont toutes été téléchargées plus d’un milliard de fois chacune.
Outre les dépôts publics accessibles à tous, Docker Hub propose des dépôts privés dans lesquels des individus ou des équipes peuvent héberger des images dont ils souhaitent restreindre l’accès. Docker Hub offre également des fonctionnalités telles que les intégrations GitHub et Bitbucket qui permettent d’automatiser les processus de build dans le développement logiciel et la prise en charge des webhooks qui peuvent servir de déclencheurs pour tout ce qui concerne les tests automatisés et les notifications.
Pourquoi utiliser Docker Hub?
Alors, avec toutes les options de registres Docker, pourquoi devriez-vous opter pour Docker Hub ? Voici quelques-uns des principaux avantages de Docker Hub :
- Une vaste bibliothèque d’images de confiance – les images Docker Certified, les images Verified Publisher (certifiées par Docker et vérifiées par l’éditeur) et les images officielles publiées par Docker apportent une confiance supplémentaire aux utilisateurs. Avec des millions, ou dans certains cas des milliards, de téléchargements pour de nombreuses images couramment utilisées, lorsque vous utilisez Docker Hub, vous pouvez compter sur une image de base fiable. C’est non seulement formidable du point de vue de l’utilisateur, mais cela profite également aux éditeurs, car l’hébergement d’une image dans Docker Hub donne une plus grande visibilité à votre projet.
- Version gratuite – actuellement, le plan gratuit de Docker offre un nombre illimité de dépôts publics et un dépôt privé avec un maximum de trois collaborateurs. Ceci est utile pour les tests de base afin de vous familiariser avec la plateforme. Cependant, les récents changements apportés aux conditions d’utilisation le rendent impropre à un développement logiciel sérieux.
- Fonctions de sécurité intégrées – tous les comptes peuvent bénéficier d’analyses de vulnérabilité des images locales. Les comptes « Team » ont également accès aux journaux d’audit et à l’authentification multifactorielle (MFA) afin de sécuriser davantage les dépôts.
- Intégrations et fonctionnalités permettant la CI et la CD – docker Hub prend également en charge les intégrations GitHub et Bitbucket, les tests automatisés, les déclencheurs de build et les webhooks pour aider à automatiser les pipelines de développement logiciel et permettre la CI et la CD (intégration et livraison continues).
Bien sûr, il n’y a jamais de solution unique, et Docker Hub ne sera donc pas la bonne réponse pour tous les cas d’utilisation. Par exemple, si vous avez besoin de stocker des images sur site pour réduire la latence ou pour des raisons de souveraineté des données. Dans ce cas, une plateforme cloud comme Docker Hub n’est pas la solution adaptée. Par ailleurs, il se peut que vous deviez mettre les images en cache localement pour réduire la latence ou la consommation de bande passante.
Comment utiliser Docker Hub: un cours accéléré
Maintenant que vous comprenez ce qu’est Docker Hub, voyons comment l’utiliser. Nous allons vous montrer comment extraire une image de Docker Hub vers votre machine locale, puis charger une version avec une balise vers votre propre dépôt.
Si vous souhaitez suivre, vous aurez besoin d’un compte Docker Hub. Si vous n’avez pas de compte, vous pouvez vous inscrire ici. Vous devez également installer Docker.
Étape 1 : Créer votre dépôt
Une fois que vous avez un compte Docker Hub, vous pouvez créer un dépôt en quelques clics sous https://hub.docker.com/repositories.
Tout d’abord, cliquez sur « Create Repository »
Donnez un nom et une description à votre dépôt, choisissez s’il doit être public ou privé, puis cliquez sur « Create ».
Étape 2 : Télécharger une image Docker de Docker Hub
Vous pouvez créer votre propre image si vous le souhaitez, mais pour les besoins de ce tutoriel, nous utiliserons l’image « Hello World ».
Nous allons commencer par nous connecter à notre compte Docker depuis notre terminal avec la commande sudo docker login -u <username> :
johnnyo@LAPTOP-5V55HON5:~$ sudo docker login -u username
Password:
WARNING! Your password will be stored unencrypted in /home/johnnyo/.docker/config.json.
Configure a credential helper to remove this warning.
Login Succeeded
johnnyo@LAPTOP-5V55HON5:~$
ⓘRemarquez l’avertissement concernant les identifiants de connexion que nous avons reçu. Pour les besoins de cette démo, nous n’en tiendrons pas compte, mais nous vous recommandons de sécuriser vos informations d’identification pour une utilisation en production !
Ensuite, nous allons récupérer l’image Docker « Hello World » avec la commande docker pull hello-world.
johnnyo@LAPTOP-5V55HON5:~$ sudo docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete Digest: sha256:8c5aeeb6a5f3ba4883347d3747a7249f491766ca1caa47e5da5dfcf6b9b717c0
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
johnnyo@LAPTOP-5V55HON5:~$
Étape 3 : Transférer une image vers votre dépôt privé
Maintenant que nous avons l’image « Hello World », copions-la avec un nouveau nom avant de l’envoyer dans notre dépôt privé. Nous le ferons avec la commande docker tag <current image name> <our user name>/<new image name>[:tag]. Nous utiliserons la commande docker images pour lister nos images avant et après afin de voir le changement.
johnnyo@LAPTOP-5V55HON5:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 9 months ago 13.3kB
johnnyo@LAPTOP-5V55HON5:~$ sudo docker tag hello-world ourusername/johnnyodemo:v1.1.1.1
johnnyo@LAPTOP-5V55HON5:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 9 months ago 13.3kB
ourusername/johnnyodemo v1.1.1.1 bf756fb1ae65 9 months ago 13.3kB
johnnyo@LAPTOP-5V55HON5:~$johnnyo@LAPTOP-5V55HON5:~$
ⓘ La modification du nom d’une image ne modifie PAS le contenu de l’image. Bien que ce changement particulier soit arbitraire, l’essentiel est que nous puissions charger des images locales vers Docker Hub. Cela vaut pour CHACUNE de vos images Docker locales.
Maintenant, nous pouvons charger l’image vers notre dépôt privé avec la commande docker push <our user name>/<new image name>[:tag].
johnnyo@LAPTOP-5V55HON5:~$ sudo docker push ourusername/johnnyodemo:v1.1.1.1
The push refers to repository [docker.io/ ourusername /johnnyodemo]
9c27e219663c: Layer already exists v1.1.1.1: digest: sha256:90659bf80b44ce6be8234e6ff90a1ac34acbeb826903b02cfa0da11c82cbc042 size: 525
johnnyo@LAPTOP-5V55HON5:~$
Lorsque nous revenons à notre compte Docker Hub, nous pouvons voir que la nouvelle balise est stockée dans notre dépôt privé.
JFrog Container Registry comme proxy pour hub Docker
Nous avons déjà mentionné que le tarif gratuit de Docker Hub peut limiter le développement logiciel. L’une des principales raisons est la limitation du taux de pushs et de pulls. La mise en cache d’images en dehors de Docker Hub peut vous permettre de dépasser ces limites. Par conséquent, trouver le bon proxy Docker Hub et la bonne solution de mise en cache – sur site ou dans le cloud – peut s’avérer très utile. Vous pouvez ainsi profiter des avantages de Docker Hub (une abondance d’images de confiance) tout en évitant les limitations de débit qui peuvent entraver les flux de travail CI/CD.
Voyons maintenant comment configurer JFrog Container Registry comme proxy pour Docker Hub afin de mettre en cache les images fréquemment utilisées. Nous utiliserons la plateforme cloud pour cet exemple, mais vous pouvez également configurer JFrog dans vos locaux gratuitement.
Conseil d’expert : Pour approfondir la configuration de JFrog Container Registry ou tout autre sujet relatif à la plateforme JFrog, nous vous recommandons de lire notre documentation.
Étape 1 : Créer votre essai gratuit
Cliquez sur ce lien et créez votre essai gratuit. Aucune carte de crédit n’est nécessaire :
Saisissez votre nom d’utilisateur, votre mot de passe, etc. Un e-mail vous sera envoyé pour valider votre compte, cliquez sur le lien pour compléter votre inscription.
Note : Nous vous recommandons de choisir un serveur géographiquement proche de chez vous.
Une fois l’écran de confirmation affiché, connectez-vous et passez à l’étape 2.
Étape 2 : Naviguer jusqu’à la section des dépôts à distance
Une fois connecté à votre nouveau compte, cliquez sur Administration → Repositories → Repositories
Étape 3 : Créer un nouveau dépôt à distance
Cliquez sur Remote → + New Remote Repository
Cliquez sur l’icône Docker dans la fenêtre contextuelle SELECT PACKAGE TYPE.
Sur l’onglet Basic, saisissez votre Repository Key et pour l’URL, utilisez l’adresse suivante pour Docker Hub : https://registry-1.docker.io/
Pour cet exemple de base, nous pouvons laisser tous les autres paramètres par défaut. Si vous souhaitez associer votre compte Docker Hub afin que vos requêtes push/pull vers Docker Hub soient authentifiées, vous pouvez le faire dans l’onglet Advanced.
Lorsque vous avez terminé, cliquez sur Save & Finish.
Étape 4 : Connectez-vous à votre compte nouvellement créé et téléchargez une image
Depuis votre CLI Docker, exécutez la commande docker login <votre_serveur>.jfrog.io et saisissez votre mot de passe. Voici un exemple avec le compte « johnnyo » :
johnnyo@LAPTOP-5V55HON5:~$ sudo docker login johnnyo.jfrog.io
Username: johnnyo@example.com
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
johnnyo@LAPTOP-5V55HON5:~$
Ensuite, téléchargez une image comme vous le feriez à partir de hub Docker, mais faites-la précéder d’une URL au format <your_server>.jfrog.io/your_repository/. Nous allons télécharger l’image Ubuntu actuelle ici, nous utiliserons donc : <your_server>.jfrog.io/your_repository/ubuntu. Par exemple, pour obtenir la dernière image Ubuntu avec notre serveur « johnnyo » et notre dépôt « johnnyo » :
johnnyo@LAPTOP-5V55HON5:~$ sudo docker pull johnnyo.jfrog.io/johnnyo/ubuntu
Using default tag: latest
latest: Pulling from johnnyo/ubuntu
Digest: sha256:fff16eea1a8ae92867721d90c59a75652ea66d29c05294e6e2f898704bdb8cf1
Status: Downloaded newer image for johnnyo.jfrog.io/johnnyo/ubuntu:latest
techchicago6400.jfrog.io/techchicago6400/ubuntu:latest
johnnyo@LAPTOP-5V55HON5:~$
Nous pouvons maintenant voir que l’image est téléchargée localement :
johnnyo@LAPTOP-5V55HON5:~$ sudo docker images
[sudo] password for johnnyo:
REPOSITORY TAG IMAGE ID CREATED SIZE
johnnyo.jfrog.io/johnnyo/ubuntu latest d70eaf7277ea 2 days ago 72.9MB
hello-world latest bf756fb1ae65 9 months ago 13.3kB
johnnyo@LAPTOP-5V55HON5:~$
Plus important encore, nous pouvons également consulter notre compte JFrog et constater que l’image y est également mise en cache ! Nous avons réussi à mettre l’image en cache pour une utilisation ultérieure.
Réflexions finales : Prochaines étapes avec Docker Hub
Pour résumer ce que nous avons couvert ici :
- Les registres Docker sont utilisés pour héberger et distribuer des images Docker
- Docker Hub est le registre basé sur le cloud officiel de Docker
- Pour commencer avec Docker Hub, vous pouvez télécharger (pull) une image ou charger (push) une de vos images locales
- Le choix du registre Docker sur site ou dans le cloud adapté – comme JFrog Container Registry – peut vous aider à optimiser l’intégration de Docker Hub dans votre pipeline de développement logiciel
Bien entendu, il ne s’agit là que des bases. Là où la conteneurisation devient vraiment intéressante est lors de la création de projets et de pipelines de développement (qui sont à leur tour créés pour soutenir ces projets). Avec Docker Hub, vous disposez d’une excellente ressource pour créer des images de base utiles sur lesquelles vous pouvez vous appuyer, et d’une variété d’outils pour rationaliser vos processus de collaboration, de test et de CI/CD.