Conteneur

Un conteneur est un processus isolé lancé à partir d’une image (qui est un système de fichiers figé + métadonnées).

Un conteneur ne simule pas de matériel : il s’appuie directement sur les appels système du noyau hôte. Il partage le noyau du système hôte avec les autres conteneurs, ce qui le rend :

  • Plus léger : démarrage rapide, moins de mémoire consommée

  • Plus éphémère : il peut être créé, arrêté, supprimé en quelques secondes

  • Plus reproductible : il repose sur une image immuable


Rappel : Conteneur vs Machine virtuelle

Élément

Machine virtuelle

Conteneur

Isolation

Matériel (via hyperviseur)

Processus (via kernel namespaces)

Système d’exploitation

Complet (OS invité, incluant sont propre noyau)

Partagé (OS hôte)

Démarrage

Lent (plusieurs secondes / minutes)

Rapide (moins d’une seconde)

Consommation

Lourde (RAM, disque, CPU)

Légère


Cycle de vie d’un conteneur

Un conteneur passe par plusieurs états :

  • created : défini mais pas encore lancé

  • running : actif et en cours d’exécution

  • paused : suspendu temporairement

  • stopped : arrêté, mais ses données persistent

  • removed : supprimé du système

Note: Un container ayant un problème se retrouve en état stopped s’il y a eu des problèmes au démarrage. Le log est un outil précieux pour comprendre ce qui s’est passé. Dans ce cas, la commande suivante est très utile :

docker logs idDuConteneur

Commandes essentielles

# Lister les conteneurs actifs
docker ps

# Lister tous les conteneurs (même arrêtés)
docker ps -a

# Créer et démarrer un conteneur
docker run nginx

# Démarrer un conteneur en connaissant son nom
docker start nginx

# Démarrer un conteneur en connaissant son id
docker start 6762aed...

# Arrêter un conteneur
docker stop <id>

# Supprimer un conteneur
docker rm <id>

L’id du conteneur est obtenu avec docker ps et correspond à l’item de la première colonne (CONTAINER_ID). Il s’agit d’un hash sha-256 de longueur max 64 caractères. Docker affiche souvent une version réduite et cette version réduite évite déjà des collisions (c’est-à-dire deux ressources portant le même nom).

L’informaticien peut gagner encore plus de temps à la saisie des commandes en tapant les quelques premières symboles de l’id s’il est confiant qu’il n’y a pas de collisions ou d’ambiguïté.

Image

Réflexion

Si je lance deux conteneurs à partir de l’image ubuntu:24.04, est-ce que j’ai deux systèmes d’exploitation qui tournent en parallèle ?

Non. Vous n’avez pas deux OS, mais deux processus isolés qui partagent le même noyau Linux de la machine hôte.
Chaque conteneur se comporte comme un Ubuntu, mais il ne contient ni noyau, ni init system complet. Il ne s’agit pas de vraies machines virtuelles.