Utiliser les registres
Objectifs de cet atelier pratique
- 
Savoir où sont stockées toutes ces images 
- 
Décortiquer les conventions de nommage qui nous permettent de les manipuler 
- 
Ne pas vous embrouiller dans les différentes versions et déclinaisons 
Le registre par défaut Docker Hub
Dans la configuration par défaut, le client Docker se connecte au registre Docker Hub pour récupérer les images.
Un registre sert principalement à stocker des images de conteneurs. Vous pouvez récupérer les images d'un registre, mais vous pouvez également stocker vos propres images, à condition de disposer des droits d'accès nécessaires.
Un dépôt dans un registre constitue une collection d'une ou plusieurs images. Un seul dépôt peut contenir un certain nombre d'images Docker, chacune étant stockée sous forme de tag.
De manière générale, les tags désignent la version d'une image, mais ils peuvent également indiquer les différentes déclinaisons d'une image. À titre d'exemple, vous pouvez avoir un dépôt dans lequel vous conservez des images MySQL avec des images basées sur Alpine Linux, alors que d'autres sont basées sur Debian Linux. Vous utiliserez un tag pour chacune de ces images.
Voyons en détail à quoi vous vous connectez concrètement lorsque vous récupérez
une image à partir d'un dépôt stocké dans un registre Docker. Nous allons
utiliser l'image Ubuntu comme exemple. Nous choisissons le tag jammy pour
cibler l'image correspondante dans le dépôt :
$ docker pull docker.io/ubuntu:jammy
jammy: Pulling from library/ubuntu
3153aa388d02: Pull complete
Digest: sha256:0bced47fffa3361afa981854fcabcd4577cd43cebbb808cea2b1f33a3dd7f508
Status: Downloaded newer image for ubuntu:jammy
docker.io/library/ubuntu:jammy
J'ai un message d'erreur
Ne vous inquiétez pas si vous vous retrouvez confronté à un message
d'erreur du genre Error response from daemon. Dans ce cas, il vous suffit
de retenter le coup.
Cette dernière commande est exactement la même que celle-ci :
Cela tient au fait que le nom de domaine du registre Docker Hub est
docker.io.  Le nom de domaine officiel a changé plusieurs fois au fil des
années, mais à l'heure actuelle il est recommandé d'utiliser docker.io. Les
anciens noms de domaine fonctionnent toujours, et il se peut que ce nom de
domaine change encore.
Récupérons une autre image :
$ docker pull registry.hub.docker.com/library/ubuntu:jammy
jammy: Pulling from library/ubuntu
Digest: sha256:0bced47fffa3361afa981854fcabcd4577cd43cebbb808cea2b1f33a3dd7f508
Status: Downloaded newer image for registry.hub.docker.com/library/ubuntu:jammy
registry.hub.docker.com/library/ubuntu:jammy
Nous avons récupéré une autre image d'Ubuntu avec le même tag, mais en
utilisant un nom de domaine différent, en l'occurrence
registry.hub.docker.com.
Jetons un œil sur nos images locales :
$ docker image ls
REPOSITORY                               TAG     IMAGE ID       ...   SIZE
jenkins/jenkins                          lts     825c3e86c65d   ...   471MB
ubuntu                                   jammy   5a81c4b8502e   ...   77.8MB
registry.hub.docker.com/library/ubuntu   jammy   5a81c4b8502e   ...   77.8MB
La colonne IMAGE ID affiche la même empreinte pour les deux images. Ce qui
veut dire qu'il s'agit de la même image ou qu'elles ont été construites avec la
même somme de contrôle résultante. La colonne TAG affiche également jammy
pour les deux images.
Pourtant, dans la colonne REPOSITORY, nous voyons que ces images ne
proviennent pas du même dépôt. Pour démarrer un conteneur avec l'une d'entre
elles, il nous faudra le préciser comme ceci par exemple :
$ docker run -dit registry.hub.docker.com/library/ubuntu:jammy
1e8d99df087c42ec889ee282d601d137e832b3c8a62c6819bf5321cb8c69c2b0
Autrement dit, notre image locale est nommée d'après le format suivant :
- 
l'adresse du registre : registry.hub.docker.com
- 
une barre oblique : /
- 
le dépôt : library
- 
une barre oblique : /
- 
l'image : ubuntu
- 
un deux-points : :
- 
un tag : jammy
À présent, supprimez l'image en provenance de docker.io qui s'affiche juste
comme ubuntu localement. N'oubliez pas de préciser le tag jammy, faute de
quoi vous ne pourrez pas supprimer l'image :
$ docker rmi ubuntu:jammy
Untagged: ubuntu:jammy
Untagged: ubuntu@sha256:0bced47fffa3361afa981854fcabcd4577...
Voici un autre exemple qui utilise une image non officielle :
$ docker pull mysql/mysql-server
Using default tag: latest
latest: Pulling from mysql/mysql-server
6a4a3ef82cdc: Pull complete
5518b09b1089: Pull complete
b6b576315b62: Pull complete
349b52643cc3: Pull complete
abe8d2406c31: Pull complete
c7668948e14a: Pull complete
c7e93886e496: Pull complete
Digest: sha256:d6c8301b7834c5b9c2b733b10b7e630f441af7bc917c74dba379f24eeeb6a313
Status: Downloaded newer image for mysql/mysql-server:latest
docker.io/mysql/mysql-server:latest
Le nom de cette image suit la syntaxe la plus courante. Elle n'est pas listée
comme image officielle, et par conséquent l'espace de nommage est mysql,
suivi d'une barre oblique, suivi du dépôt appelé mysql-server, et puisque
nous n'avons pas spécifié de balise, nous utilisons simplement la balise par
défaut latest.
Prenons encore un autre exemple :
Ici, l'espace de nommage (ou le namespace) est dolibarr, le dépôt est
dolibarr et le tag de l'image est 21.
Lorsque vous commencerez à enregistrer vos propres images sur Docker Hub, vous utiliserez ce format :
- 
votre identifiant Docker 
- 
une barre oblique 
- 
le nom du dépôt 
- 
un deux-points 
- 
un tag 
La sécurité des images Docker
Soyez conscients des risques de sécurité liés à l'utilisation d'images qui ne sont pas marquées comme officielles. Même les images officielles présentent un certain nombre de vulnérabilités logicielles que le fournisseur devra vraisemblablement corriger à un moment donné dans le futur.
Dans le doute, construisez vos propres images depuis la case départ et avec un maximum de circonspection.
Utiliser d'autres registres de conteneurs
En dehors de Docker Hub, il existe un certain nombre de registres de conteneurs. Par exemple :
Les applications professionnelles utilisent souvent leur propre registre. Ce n'est pas très compliqué de configurer un registre privé pour Docker. En effet, Docker permet de mettre en place des dépôts privés pour lesquels vous devez vous connecter afin d'accéder au registre.
Utiliser l'authentification avec Docker Hub
Pour cette formation, nous utilisons principalement Docker Hub comme registre pour la plupart des exemples. C'est le registre public le plus populaire. Un détail important que nous allons aborder en revanche, c'est la connexion à un registre.
Pour vous authentifier, vous devez utiliser la commande docker login. Étant
donné que le registre Docker Hub est déjà utilisé par défaut, ce n'est pas la
peine de l'expliciter avec la commande login :
À vous de jouer !
- 
Supprimez toutes les images locales sur votre système. 
- 
Téléchargez la dernière image officielle du serveur de bases de données PostgreSQL. 
- 
Téléchargez la version 13.22 de cette image. 
- 
Affichez les images locales et repérez les deux images respectives. 
- 
Cherchez l'application GLPI sur Docker Hub et repérez le dépôt maintenu par elestio.
- 
Téléchargez la toute dernière version de l'application, ainsi que la dernière version stable de la branche 10.x. 
- 
Affichez l'ensemble des images locales et repérez bien les différentes versions. 
- 
Créez un compte sur Docker Hub. 
- 
Authentifiez-vous en ligne de commande. 
- 
Supprimez toutes les images locales. 
