Skip to main content

Images et système de fichiers

Images Docker

Une image Docker est un fichier immuable qui contient tout le nécessaire pour exécuter une application dans un conteneur.
Elle contient le code source, les bibliothèques, les dépendances, les variables d'environnement, les configurations, etc.

L'image Docker est une photographie figée d’un environnement logiciel, garantissant que l'application s’exécutera systématiquement de la même manière, indépendamment de son environnement.

Une image Docker est construite à partir d'un fichier de configuration appelé Dockerfile. Ce fichier décrit étape par étape comment assembler l'image.

Nous reviendrons plus tard sur le Dockerfile.

Une fois construite, une image peut être stockée localement ou poussée vers un registre Docker (comme Docker Hub ou un registre privé), où elle peut être versionnée et partagée.

Pour identifier une image Docker, on utilise la syntaxe suivante :

propriétaire/nom:tag
  • propriétaire : correspond à l'utilisateur ou à l'organisation qui possède l'image sur le registre.
  • nom : le nom de l’image, comme nginx, ubuntu, etc.
  • tag : une étiquette qui permet de versionner l'image. Par défaut, si aucun tag n'est spécifié, Docker utilise latest.
    Les tags peuvent représenter des versions (1.0, v2.3.4) ou des environnements (dev, prod).

Certaines images "officielles" ne possèdent pas de propriétaire, donc il n'est pas nécessaire de le préciser.

Quelques exemples :

nginx:latest # image officielle de Nginx, version la plus récente.
thibaud/appli:1.2.0 # image personnalisée appartenant à l’utilisateur thibaud, version 1.2.0.

Registry Docker Hub

Comme expliqué ci-dessus, les images Docker doivent être stockées sur un registre.

Un registre peut être public ou privé, par exemple au sein d'une entreprise afin d'y stocker une application propriétaire.

Le registre public et par défaut est le Docker Hub. 🔗 Docker Hub

La commande docker pull permet de télécharger une image depuis un registre, par défaut le registre public Docker Hub.

image.png

Actuellement, l'image latest d'Ubuntu correspond à la version 24.04 sur le Docker Hub.
Ces trois identifiants retournent la même image, qui n'est téléchargée qu'une seule fois : ubuntu, ubuntu:latest, ubuntu:24.04.

À l'inverse, si je lance un docker run sur une image qui n'est pas déjà stockée localement, le téléchargement est automatique depuis le Docker Hub :

image.png

La commande docker image permet de gérer les images stockées localement.

docker image ls # lister les images
docker image rm ubutu:18.04 # supprimer l'image ubuntu taggée 18.04

image.png

Système de fichiers

L'arborescence des fichiers dans un conteneur Docker est isolé du reste de la machine.

Un conteneur Docker contient une arborescence Linux. Exemple ci-dessous :

image.png

L'arborescence ci-dessus n'est accessible que depuis le conteneur.

  • Le conteneur n'a pas accès à l'arborescence de la machine hôte.
  • La machine hôte n'a pas accès à l'arborescence du conteneur.

image.png

Volatilité

Contrairement à une image docker qui est figée, le contenu d'un container est volatile.

Lorsqu'un container est supprimé, tous les fichiers modifiés sont perdus !

Exemple :

image.png

Les deux conteneurs nommés test à partir de l'image debian ne sont pas les mêmes : ils n'ont pas le même identifiant.

Les données du premier conteneur sont perdues lors de sa suppression.

Nous verrons plus loin les volumes Docker qui permettent de stocker des données persistantes.

Isolation : un exemple avec fastfetch

image.png

L'hôte et le conteneur partagent quelques éléments tels que le noyau Linux, le CPU, la RAM disponible et l'espace disque.
À l'inverse, la distribution Linux, les paquets installés et le système de fichier sont isolés.