Voici 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
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: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
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: ****************** ... 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.
0 commentaire