« Docker Hub » est le registre officiel de docker dans lequel les utilisateurs et les partenaires de Docker créent, testent, stockent et distribuent des images de conteneur.
Ce registre est public et accessible à tous. Il est d’ailleurs configuré par défaut pour être le registre de docker lors de l’installation.
Cependant, « Docker Hub » proposé également la possibilité de créer des dépôts privés pour les entreprises.
En effet, il est possible de payer une souscription pour pouvoir avoir des dépôts privés directement dans le Cloud via le « Docker hub » officiel. Cette solution évite par exemple de devoir créer un dépôt en local su chacun des sites de l’entreprise et de les répliquer de site à site dans le cadre d’une infrastructure multisites.
« Docker Hub » est disponible à l’adresse suivante : https://hub.docker.com/
Pour pouvoir visionner les différentes images publiques misent à disposition il suffira de cliquer sur le bouton « Explore »
« Docker Hub » possède de nombreuses fonctionnalités telles que :
Il existe un système de notation permettant de savoir si l’on peut faire confiance ou non à l’image mise en ligne par la communauté. De plus, les images dites officielles sont toutes validées par Docker.
Il s’agit d’une fonctionnalité de « builds » automatisés.
Cela va permettre de pouvoir déposer des images directement depuis ces deux solutions.
Pour pouvoir utiliser « Docker Hub » il va falloir se créer un compte sur le site. Le compte est appelé « Docker ID ».
Pour cela, rien de plus simple. Sur la page d’accueil de « Docker Hub », il faudra cliquer sur « Sign In »
Cliquer sur « Create Account »
Puis entrer les différentes informations nécessaires à la création du compte utilisateur
Attention : l’adresse email utilisée lors de la création du compte devra être valide puis qu’un email sera envoyé afin de cliquer sur un lien de conformation de compte
Une fois connecté il sera possible de créer un dépôt privé ou publique, une organisation avec différents groupes de travail, effectuer des souscriptions etc.
Evidemment il sera également possible de voir les différentes images disponibles publiquement ou dans notre propre dépôt privé
Le registre de docker propose une très grande quantité d’images répertoriés dans différents dépôts.
Il est d’ailleurs possible de faire des recherches pour trouver plus précisément ce que l’on cherche.
Soit directement depuis la barre de recherche
Soit depuis les nombreux filtres proposés
Chacune des images comporte des informations utiles.
En effet, nous pouvons voir s’il s’agit d’une image officielle, publiée par un membre de la communauté dit « vérifié » et donc de confiance mais également le nombre de téléchargements et le nombre d’étoiles attribuée à cette image.
Lorsque l’on clique sur une image, le détail de cette dernière s’affiche.
Nous pouvons voir sa description, des éventuelles reviews, s’il s’agit d’une image payante ou gratuite ainsi que la commande à taper pour pouvoir la télécharger depuis « Docker hub » en cliquant sur « Set up instructions »
Comme indiqué précédemment, une fois connecté à « Docker hub » il sera possible de créer un dépôt soit publique soit privé.
Pour cela, cliquer sur « Create a Repository »
Choisir un nom de dépôt et éventuellement mettre une description
Choisir le type de visibilité du dépôt, c’est-à-dire s’il doit être publique ou privé.
Pour les besoin de cette documentation nous allons créer un dépôt privé
Si l’on souhaite connecter un compte « GitHub » et/ou « Bitbucket » il faudra cliquer sur ces icônes
Lorsque toutes les informations sont correctement indiquées il ne reste plus qu’a valider en cliquant sur « Create »
Le dépôt sera alors créé et nous seront redirigé vers sa description.
C’est d’ailleurs à cet endroit que nous pourrons trouver un lien indiquant comment y transférer des images
Attention : pour pouvoir y déposer des images il faudra d’abord s’authentifier via docker à l’aide de la commande suivante
docker login -u "nom_du_user" -p "password_du_user"
Comme indiqué précédemment, l’utilisation de docker se fait principalement via le client CLI et la commande « docker ».
Cette commande possède de nombreuses options y compris pour la gestion des images.
Pour afficher l’aide de docker il suffit de taper « docker »
Attention : l’intégralité des très nombreuses options n’est pas visible sur la capture d’écran
Il est possible d’affiner l’affichage des options en tapant la commande suivante :
docker | grep "mot-clé"
par exemple les options concernant les images :
Pour afficher la liste des images disponibles en local sur l’hôle, il faudra taper la commande suivante
docker images
Attention : Il faut savoir que par défaut, les images sont stockées dans « /var/lib/docker/image/aufs/imagedb/content/sha256/ »
Pour effectuer une recherche il faudra utiliser la commande suivante
docker search "nom_recherché"
Lors d’une recherche, nous pouvons voir plusieurs types de résultats dans la colonne « nom » de l’image.
Les images dont seul le nom apparaît sont des images officielles des produits misent en ligne et certifiées conforme par docker.
Tandis que les images dont le nom se compose par exemple de « labjovelin/Debian » sont des images mise en ligne et à disposition par la communauté. La première partie correspond au dépôt et la deuxième partie au nom de l’image.
Il est donc particulièrement important lorsqu’on récupère une image de la communauté de se référer au système de notation par étoile afin de savoir si l’image est conforme et non vérolée.
Pour récupérer une image depuis le registre, il faudra utiliser la commande suivante :
docker pull "nom_de_l’image"
Il est également possible de préciser le dépôt depuis lequel on souhaite récupérer une image.
Dans ce cas la commande à taper sera :
docker pull "nom_du_dépôt/nom_de_l’image"
si l’on reprend l’exemple de la capture d’écran de recherche SQL ci-dessus et que nous voudrions récupérer l’image « sqlserver » depuis le dépôt « exoplatform » alors la commande à taper sera celle-ci :
Cette commande va permettre de créer une balise faisant référence à une image. Il faudra préciser un nom de repository ainsi qu’un nom de TAG pour que cela fonctionne. Pour pouvoir faire le TAG d’une image il faudra utiliser la commande suivante
docker tag "nom_de_la_colonne_REPOSITORY:nom_de_la_colonne_TAG" "nouveau_nom_de_la_colonne_REPOSITORY:nouveau_nom_de_la_colonne_TAG"
On constatera en affichant la liste des images que cette nouvelle image est visible et disponible en locale
Attention cette commande n’efface pas et ne modifie pas l’ancienne image car elle va en « créer » une nouvelle avec un nom différent. Il y aura deux images disponibles, l’image originale et sa balise. Cela prendra deux fois l’espace sur le stockage et l’Image ID sera la même pour les deux images. Il sera possible de supprimer l’une ou l’autre sans affecter la deuxième, sauf si on supprime l’Image ID)
Pour pouvoir transférer une image locale dans un registre ou un dépôt, il sera impératif de l’avoir TAG auparavant en indiquant le nom du registre ou du dépôt ciblé. En effet, par défaut docker tentera de transférer l’image dans le registre ou dépôt qui est indiqué dans la colonne « repository »
Pour effectuer le transfère il faudra utiliser la commande suivante :
docker push "nom_de_la_colonne_REPOSITORY:nom_de_la_colonne_TAG"
Nous pouvons vérifier dans le dépôt créé précédemment sur « Docker hub » si l’image est disponible
Attention il est possible que cela ne fonctionne pas et qu’il soit demandé de se connecter auparavant au registre ou dépôt ciblé. Dans ce cas voici un rappel de la commande à effectuer
docker login -u "nom_du_user" -p "password_du_user"
Si l’on a plus besoin d’une image, il est possible de l’effacer de deux façons.
Soit en ciblant directement le nom complet de l’image, dans ce cas la commande à taper sera celle-ci :
docker rmi "nom_de_la_colonne_REPOSITORY:nom_de_la_colonne_TAG"
Soit en ciblant directement l’image ID, dans ce cas taper la commande suivante
docker rmi "Image_ID"
Vérification de la présence des images
Elle a été correctement effacée.
Parmi les différentes possibilités que nous offre docker, il existe le fait de pouvoir enregistrer une image dans une archive « tar ».
Pour cela, il faudra utiliser la commande suivante
docker save "nom_de_la_colonne_REPOSITORY:nom_de_la_colonne_TAG" -o "chemin_complet_de_l’archive"
Nous pouvons vérifier que cela a correctement fonctionné
Si vous avez besoin de réutiliser une image qui a été sauvegarder sous forme d’archive et que l’image d’origine a été supprimée, il sera possible de la charger à nouveau en utilisant la commande suivante :
docker load --input "chemin_complet_de_l’archive"
vérifions la liste des images disponibles
Nous allons supprimer l’image « labjovelin/lab:heartbeat » puis qu’elle a été archivée dans l’exemple précédent
Vérification de la suppression de l’archive
La suppression a fonctionnée, nous allons maintenant charger l’archive de cette image en utilisant la commande citée précédemment.
Vérification de la présence de l’image dans la liste
Pour afficher l’historique d’une image il faudra utiliser la commande suivante :
docker history "nom_de_la_colonne_REPOSITORY:nom_de_la_colonne_TAG"
Cette commande va permettre devoir les actions qui ont été faites lors du « build » de l’image.
Il est possible d’afficher les informations de bas niveau des objets Docker (conteneur, image, volume, réseau, nœud, service ou tâche). Pour cela, il faudra les identifier par un nom ou un ID. Par défaut, tous les résultats seront affichés dans un tableau JSON. Si le conteneur et l'image ont le même nom, cela renverra le conteneur JSON si aucun type n’est spécifié. Si un format est spécifié, le Template choisi sera exécuté pour chacun des résultats.
La commande est la suivante :
docker inspect "nom_de_la_colonne_REPOSITORY:nom_de_la_colonne_TAG"
Attention : La capture d’écran ne reflète pas le contenu total du résultat
Si vous souhaitez créer une image à partir d’un conteneur la commande sera la suivante
docker commit "nom_du_conteneur» «nom_de_la_colonne_REPOSITORY:nom_de_la_colonne_TAG"
Vérification de la présence de l’image créée
Attention : cette commande ne stop pas, ne supprime pas ou ne touche pas au conteneur. Une image sera simplement créée à partir de ce dernier. De plus, si parmi les différentes images disponibles vous aviez conservé celle qui a servie à instancier le conteneur, vous aurez dans ce cas deux nouvelles images avec deux Image ID différentes (ce n’est PAS un TAG mais bien la création d’une image à part entière).
Comme nous l’avons vu précédemment, un registre stocke les images Docker permettant en suite de les récupérer via des « pull ».
« Docker Hub » est le plus gros registre publique et privé puisqu’il s’agit du registre officiel de docker mais bien qu’il soit possible d’y créer des dépôts privés, toutes les entreprises n’ont pas forcément envie de l’utiliser.
Cela reste pratique lorsque l’on a besoin d’effectuer des réplications entre plusieurs sites mais si l’entreprise n’a qu’un seul site et donc pas besoin de faire de réplication ? ou encore si elle ne souhaite pas que ses images soient stockées en dehors de son entreprise ? Dans ce quel quelle solution s’offre à elle ?
Tout simplement la possibilité de créer un registre local.
En effet, la mise en place d’un registre privé va permettre d’avoir la main sur plusieurs aspect de docker :
Attention : il n’y a pas de meilleur solution entre le registre local ou le « Docker Hub » avec ou sans dépôts privés. Tout dépend des besoin de l’entreprise
L’idéal est de garder l’hôte de docker le plus propre possible.
En effet, il est possible d’installer des packages qui permettrons de créer un registre local mais docker met également à disposition une image certifiée d’un registre local.
Cette solution va permettre d’instancier un conteneur qui servira de registre local et qui sera par définition isolé.
Effectuons la recherche de l’image
Il en existe plusieurs mais évidemment nous choisirons celle fournie par docker qui s’appelle « registry »
On la récupère comme vu précédemment avec un « pull »
Maintenant que l’image est récupérée nous allons instancier le conteneur mais il faut savoir que le registre peut être accessible via HTTP. Dans ce cas il faudra donc préciser dans la commande d’instanciation le port d’utilisation pour y accéder.
Si l’on regarde la description de l’image sur le site »Docker Hub », nous pourrons voir qu’ il y aura quelques options à utiliser lors de la commande :
Attention : Au moment de l’écriture de cette documentation d’autres TAG plus récent que le TAG « 2 » sont disponibles nous utiliserons donc le TAG « latest » à la place et qui correspond au TAG de l’image qui nous avons récupéré précédemment.
La commande sera donc la suivante
Docker run -p "5000:5000" --restart="always" --name "nom_qu’on_donne_au_registre" "nom_de_l’image:TAG"
Le conteneur est maintenant fonctionnel.
Tout comme nous l’avions vu lors des manipulation pour uploader une image dans le dépôt « labjovelin/lab » qui se trouve dans le registre « Docker hub », pour pouvoir uploader une image dans le registre local nous allons d’abord la TAG.
A nouveau la description de l’image nous indique comment faire
Nous allons effectuer le test avec l’image de Debian que nous avions précédemment récupéré
Puis on effectue le push
Il n’y a pas eu d’erreur et le push a donc fonctionné.
L’image du registre « Registry :latest » ne possède pas d’interface Web.
Il ne sera donc pas possible d’y accéder par un navigateur Web sans ajouter un package permettant de naviguer dans un registre docker. En effet, il s’agit seulement de la fonctionnalité de registre principale et l’API REST.
Il existe de nombreuses solutions permettant de de naviguer dans un registre docker, parmi celles-ci nous pouvons citer par exemple « konradkleine/docker-registry-frontend » ou « Portus »
Il sera cependant possible d’utiliser la commande depuis l’hôte suivante pour voir le contenu du registre
curl "http://localhost:5000/v2/_catalog"
Les deux images qui ont été push dans le registre local sont effectivement visibles.
Attention : par défaut docker effectue ses recherche et ses pull depuis « Docker Hub ».pour pouvoir récupérer les images qui sont ans le registre local il faudra modifier la configuration de docker et ajouter le registre local.