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 :

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 »

create repository button on docker hub

 Donnez un nom et une description à votre dépôt, choisissez s’il doit être public ou privé, puis cliquez sur « Create ».

naming your repository

 

É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é.

tag updated on docker hub

 

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

User-added image

Étape 3 : Créer un nouveau dépôt à distance

Cliquez sur Remote + New Remote Repository

User-added image

Cliquez sur l’icône Docker dans la fenêtre contextuelle SELECT PACKAGE TYPE.

User-added image

Sur l’onglet Basic, saisissez votre Repository Key et pour l’URL, utilisez l’adresse suivante pour Docker Hub : https://registry-1.docker.io/

User-added image

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.

User-added image

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.