DockerVoici le huitième volet de la formation Docker. Dans mon précédent article, nous avons vu tout ce qui concerne les logs des conteneurs et du moteur Docker. Aujourd’hui nous allons faire quelque chose de pas très palpitant, mais qui fait partie des fondamentaux dans la manipulation des conteneurs. Nous allons chercher à savoir où sont stockées toutes ces images, et nous allons décortiquer en passant les conventions de nommage qui nous permettent de les manipuler sans nous 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

AstuceNe 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:jammy

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 :

$ docker pull bitnami/wordpress-nginx:6.2.2
6.2.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 6.2.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

ImportantSoyez 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: ******************
...
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 13.11 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.

Lire la suite : Construire une image


La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.

 

Catégories : Formation

0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *