Images Docker et registry

Images Docker

Dans les exercices précédents, nous avons vu que le système de fichiers dans notre conteneur était différent de celui de l'hôte. Une question se pose alors : d'où vient ce système de fichier ? Tout simplement de ce que l'on appelle une image Docker.

Une image Docker est un template de système de fichiers qui sera utilisé pour démarrer un conteneur. Au démarrage le conteneur va récupérer le système de fichiers de l'image Docker pour l'utiliser, un peu de la même manière qu'une image ISO qui va servir à démarrer un système d'exploitation.

Il est très important de ne pas confondre les concepts de conteneur et d'image. L'image n'est rien de plus qu'un template, un système de fichiers. Le conteneur, lui, utilise une image en tant que template pour se lancer. D'une certaine manière, le conteneur est une instance de l'image, et plusieurs conteneurs peuvent être lancés en se basant sur la même image.

Une image Docker est immutable, elle n'est pas modifiable par un conteneur, son système de fichiers est figé. Celui du conteneur, à l'inverse, est créé au démarrage du conteneur (à partir de l'image) mais peut-être modifié par le conteneur et est éphémère : il est complètement supprimé lorsque l'on arrête le conteneur.

Registry Docker

Docker permet de créer des images qui seront utilisées par nos conteneurs. Ceci sera l'objet d'un prochain cours, pour le moment nous utiliserons seulement des images existantes.

Nous pouvons trouver des images existantes dans le Docker Hub, qui est une registry Docker. Une registry est un serveur qui va tout simplement stocker des images Docker, un peu à la manière d'un serveur Git qui stocke des repositories.

Bien que n'importe qui puisse maintenir sa propre registry, l'entreprise Docker Inc. fournit une registry, qui s'appelle le Docker Hub, dans laquelle on retrouve un très grand nombre d'images déjà existantes. N'importe qui peut pousser une image dans cette registry, mais certaines sont officiellement maintenues par Docker Inc. et/ou par les mainteneurs de logiciel ou de distribution Linux. Parmi ces images officielles, on peut trouver :

  • des images relativement basique pour les différents systèmes d'exploitations (Debian, Ubuntu, Centos, Alpine, etc.)

  • des images adaptées pour lancer des programmes dans un langage particulier (Python, Go, Node.js, etc.)

  • des images qui encapsulent un logiciel comme un serveur Web (Apache, Nginx) ou un SGBD (PostgreSQL, MariaDB)

Identification des images

Pour les identifier, les images Docker ont un nom complet qui a la forme suivante.

La première partie correspond à l'adresse de la registry Docker. Dans le cas d'images venant du Docker Hub, cette première partie est absente (car le Docker Hub est la registry par défaut).

La seconde partie est le véritable nom de l'image.

La dernière partie est le tag de l'image. Le tag peut-être vu comme un moyen de versionner une image Docker. Lorsque le tag n'est pas spécifié, c'est le tag latest qui est utilisé. latest est un tag par défaut, qui est normalement utilisé pour pointer vers la dernière version de l'image.

Dans nos premiers pas avec Docker, c'est une image officielle (maintenue par des développeurs Debian) de Debian que nous avons utilisé. Le conteneur avait été démarré avec le paramètre debian:bullseye. C'est donc l'image debian, venant du Docker Hub, en version bullseye.