Aller au contenu

Utiliser les registres de conteneurs Docker

Objectifs :

  • Savoir où sont stockées les images

  • Connaître les conventions de nommage utilisées pour accéder à ces images

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 bionic pour cibler l'image correspondante dans le dépôt.

$ docker pull docker.io/ubuntu:bionic
bionic: Pulling from library/ubuntu
11323ed2c653: Pull complete
Digest: sha256:d8ac28b7bec51664c6b71a9dd1d8f788127ff310b8af30820560973bcfc605a0
Status: Downloaded newer image for ubuntu:bionic
docker.io/library/ubuntu:bionic

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 :

$ docker pull ubuntu:bionic

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:bionic
bionic: Pulling from library/ubuntu
Digest: sha256:d8ac28b7bec51664c6b71a9dd1d8f788127ff310b8af30820560973bcfc605a0
Status: Downloaded newer image for registry.hub.docker.com/library/ubuntu:bionic
registry.hub.docker.com/library/ubuntu:bionic

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
ubuntu                                   bionic    b67d6ac264e4  ...  63.2MB
registry.hub.docker.com/library/ubuntu   bionic    b67d6ac264e4  ...  63.2MB

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 bionic 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:bionic
58d3adc6051a81d78ab04b33477287a976f9c133a1f0e30f267a028271664665

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 : bionic

À 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 bionic, faute de quoi vous ne pourrez pas supprimer l'image :

$ docker rmi ubuntu:bionic
Untagged: ubuntu:bionic
Untagged: ubuntu@sha256:d8ac28b7bec51664c6b71a9dd1d8f788127af...

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
221c7ea50c9e: Pull complete
d32a20f3a6af: Pull complete
28749a63c815: Pull complete
3cdab959ca41: Pull complete
30ceffa70af4: Pull complete
e4b028b699c1: Pull complete
3abed4e8adad: Pull complete
Digest: sha256:6fca505a0d41c7198b577628584e01d3841707c3292499baae87037f886c9fa2
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 :

$ docker pull bitnami/wordpress-nginx:5.9.2
5.9.2: Pulling from bitnami/wordpress-nginx
...

Ici, l'espace de nommage (ou le namespace) est bitnami, le dépôt est wordpress-nginx et le tag de l'image est 5.9.2.

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

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 :

$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't
have a Docker ID, head over to https://hub.docker.com to create one.
Username: kikinovak
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

Exercice

  • 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 12.10 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 diouxx.

  • Téléchargez la toute dernière version de l'application, ainsi que la dernière version stable de la branche 9.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.


La rédaction de ces cours demande du temps et des quantités significatives de café espresso. Vous appréciez cette formation ? Offrez un café au formateur en cliquant sur la tasse.