30/01/2026

Création et gestion des conteneurs Docker

Docker fournit des commandes puissantes pour gérer efficacement les conteneurs. Dans ce chapitre, nous allons aborder leur théorie et illustrer leur usage avec des exemples pratiques. Les commandes essentielles pour la gestion des conteneurs : build, run, start, stop, rm.

Les commandes essentielles pour Docker

Commande docker build

La commande docker build permet de construire une image Docker à partir d'un fichier Dockerfile (que nous avons abordé dans les chapitres du premier module). Cette image encapsule tout ce qui est nécessaire pour exécuter une application, y compris le système d’exploitation, les dépendances, et le code. Elle est essentielle pour créer des environnements reproductibles et normalisés, adaptés aux workflows modernes.

À quoi sert-elle ?

  • Lire les instructions du fichier Dockerfile.
  • Télécharger les couches d'images de base nécessaires.
  • Construire une nouvelle image Docker en appliquant les instructions du Dockerfile.

Par exemple, si nous souhaitons construire une image à partir d'un fichier Dockerfile :

docker build -t mon-application:1.0 .

Nous allons créer une première image puis la construire pour exécuter le conteneur de celle-ci. Notre image sera un serveur Web hébergeant un fichier HTML.

Commençons par écrire le fichier Dockerfile :

# Utiliser l'image de base Nginx 
FROM nginx

# Copier le fichier index.html dans le répertoire de contenu du serveur web 
COPY index.html /usr/share/nginx/html/index.html

# Le port 80 est déjà exposé dans l'image de base nginx, donc pas besoin d'EXPOSE
# Nginx démarre automatiquement lorsque le conteneur est lancé, donc pas besoin de CMD

Voici notre fichier index.html :

<!DOCTYPE html> 
<html> 
<head>
<title>Page d'accueil</title>

</head>

<body>

<h1>Bonjour</h1>

</body> 
</html>

Plaçons ces deux fichiers dans un même dossier, par exemple notre répertoire utilisateur situé dans /home, puis exécutons la commande :

docker build -t mon-serveur-web .

Dans notre cas, -t mon-serveur-web donne un nom à l'image, et le . indique que le Dockerfile se trouve dans le répertoire courant.

Une fois l'image construite, démarrons un conteneur avec cette commande :

docker run -d -p 80:80 mon-serveur-web

L'option -d exécute le conteneur en arrière-plan, et -p 80:80 expose le port 80 du conteneur sur le port 80 de votre hôte.

Pour lister les conteneurs actifs, dont le nôtre, nous utilisons la commande :

docker ps

Le tableau de la liste affiche plusieurs colonnes, dont voici :

  • CONTAINER ID : affiche l'identifiant unique du conteneur. Il s'agit généralement d'un hash alphanumérique.
  • IMAGE : indique le nom de l'image Docker à partir de laquelle le conteneur a été créé.
  • COMMAND : montre la commande qui a été utilisée pour démarrer le conteneur. Cette commande est souvent celle spécifiée dans le Dockerfile avec l'instruction CMD ou ENTRYPOINT.
  • CREATED : affiche l'âge du conteneur depuis sa création.
  • STATUS : fournit l'état actuel du conteneur, comme en cours d'exécution, arrêté, en pause, etc.
  • PORTS : détaille les ports du conteneur et leurs mappages éventuels avec les ports de l'hôte. Cela inclut les ports exposés par le conteneur et tout mappage de port spécifié lors du démarrage du conteneur.
  • NAMES : affiche les noms assignés aux conteneurs. Docker génère un nom unique pour chaque conteneur s'il n'est pas spécifié par l'utilisateur.

Ces informations fournissent un aperçu rapide de l'état actuel de vos conteneurs Docker en cours d'exécution. Nous pouvons également utiliser des options supplémentaires avec docker ps pour personnaliser ou étendre les informations affichées, comme docker ps -a pour lister tous les conteneurs (y compris ceux qui ne sont pas en cours d'exécution) ou docker ps --format pour personnaliser le format de sortie.

En appelant notre page Web depuis http://localhost sur un navigateur, nous constatons que notre conteneur est correctement configuré.

Si nous souhaitons entrer dans le conteneur mon-serveur-web, nous exécutons la commande :

docker exec -it <CONTAINER ID> <commande>

Par exemple :

docker exec -it 2c230505cc03 bash

Ou simplement écrire la commande avec les 2 premiers caractères du CONTAINER ID :

docker exec -it 2c bash

Il est également possible d’exécuter une commande one shot directement dans le conteneur sans y entrer. Par exemple :

docker exec <CONTAINER ID> <commande>

Cela lance la commande dans le conteneur, puis revient immédiatement au terminal local une fois l’exécution terminée.

Commande docker start

La commande docker start est utilisée pour relancer un conteneur existant précédemment créé ou arrêté. Elle est particulièrement utile pour éviter de recréer un conteneur à chaque utilisation.

En considérant que notre conteneur précédent est stoppé, nous pouvons le lancer à nouveau avec la commande :

docker start 2c230505cc03

Cette commande redémarre en arrière-plan le conteneur arrêté.

Commande docker stop

La commande docker stop arrête proprement un conteneur en envoyant un signal SIGTERM au processus principal du conteneur. Si celui-ci ne s'arrête pas dans un délai défini, un signal SIGKILL est utilisé pour forcer l'arrêt.

docker stop 2c230505cc03

Commande docker rm

La commande docker rm supprime un conteneur arrêté. Elle est essentielle pour nettoyer les conteneurs inutilisés et maintenir un environnement organisé. Les conteneurs en cours d'exécution ne peuvent pas être supprimés, sauf avec l'option -f. D'autres paramètres comme -v pour supprimer les volumes associés, peuvent être appelés.

Nous détruisons notre conteneur avec la commande suivante :

docker rm 2c230505cc03

Inspection et gestion des ressources des conteneurs

Lorsqu'on exécute des conteneurs Docker dans un environnement professionnel, il est crucial de surveiller leur état, d'inspecter leurs ressources, et d'optimiser leur utilisation pour garantir un bon fonctionnement des applications. Docker propose plusieurs commandes permettant de collecter des informations sur les conteneurs en cours d'exécution, de surveiller leur consommation en ressources et d'optimiser leur gestion.

Nous allons détailler les outils essentiels pour inspecter et gérer les ressources des conteneurs Docker, avec des cas d'usage concrets et des exemples pratiques.

Inspection des conteneurs avec docker inspect

La commande docker inspect permet d'obtenir des informations détaillées sur un conteneur ou une image. Elle affiche un format JSON contenant des informations sur :

  • L'état du conteneur (démarré, arrêté, en pause)
  • Son réseau, ses ports exposés
  • Les volumes montés
  • L'environnement d’exécution et les arguments utilisés

En repartant d'un nouveau conteneur de l'image mon-serveur-web :

docker run -d -p 80:80 mon-serveur-web
docker inspect 6cca9aeb320e

Nous obtenons un rapport détaillé sous forme JSON contenant plusieurs sections essentielles sur un conteneur. Id et Created indiquent l'identifiant unique et la date de création du conteneur. Voici d'autres informations utiles à savoir :

  • State renseigne sur son état (running, stopped), son processus principal (Pid), et ses derniers événements (StartedAt, FinishedAt).
  • Image affiche l'empreinte SHA256 de l'image utilisée, utile pour retrouver l'origine du conteneur.
  • NetworkSettings fournit les informations réseau, comme l'adresse IP attribuée (IPAddress), la passerelle (Gateway), et les ports exposés (Ports).
  • HostConfig regroupe les paramètres système, incluant la politique de redémarrage (RestartPolicy), les limitations de ressources (CpuShares, Memory), et la configuration des logs (LogConfig).
  • Mounts affiche les volumes attachés au conteneur, garantissant la persistance des données.
  • Cmd et Entrypoint précisent la commande exécutée à son démarrage, permettant de comprendre comment le service est initialisé.

Cette commande est essentielle pour auditer un conteneur, récupérer ses configurations et optimiser sa gestion.

Surveillance des ressources avec docker stats

La commande docker stats fournit des statistiques en temps réel sur la consommation des ressources d'un ou plusieurs conteneurs. Elle permet d'identifier les éventuelles surconsommations en CPU, mémoire, disque et réseau.

Nous affichons les statistiques avec :

docker stats

Si nous souhaitons surveiller notre conteneur en particulier, il faut indiquer l'ID du conteneur :

docker stats 6cca9aeb320e

En résumé :

IndicateurSignification

CONTAINER ID

ID du conteneur

NAME

Nom du conteneur

CPU %

Utilisation du CPU

MEM USAGE / LIMIT

Utilisation de la mémoire vive

NET I/O

Données réseau envoyées et reçues

BLOCK I/O

Entrées/sorties disque

PIDS

Nombre de processus en cours

Limitation des ressources du conteneur

Docker permet d'allouer des limites de ressources pour éviter qu'un conteneur ne consomme toute la mémoire ou tout le CPU disponible, ce qui peut s'avérer problématique dans les environnements où les ressources sont limitées.

Voyons ensemble comment procéder. Si nous souhaitons limiter un conteneur à 50% des ressources CPU disponibles, nous pouvons utiliser la commande :

docker run -d -p 80:80 --cpus="0.5" mon-serveur-web

De la même manière, si nous souhaitons limiter un conteneur à 512 Mo de RAM :

docker run -d -p 80:80 --memory="512m" mon-serveur-web

Par défaut, si aucune limite n'est définie, un conteneur peut utiliser autant de mémoire que celle disponible sur l'hôte. C'est pourquoi il est important de définir des limites lorsque l'on souhaite éviter qu'un conteneur consomme toute la RAM du système et provoque des ralentissements ou un OOM (Out Of Memory).

Nous avons également la possibilité de limiter le nombre de processus :

docker run -d -p 80:80 --pids-limit 50 mon-serveur-web

Gestion des logs avec docker logs

La commande docker logs permet d'afficher les journaux d'un conteneur, essentiels pour le débogage et la surveillance. Il est possible d'ajouter -f pour suivre les logs en temps réel, --tail pour afficher les dernières lignes ou encore --since pour afficher les logs depuis une date donnée.

Pour afficher les logs de notre conteneur :

docker logs <CONTAINER ID>

Soit par exemple :

docker logs 6cca9aeb320e

Pour afficher les journaux d'un conteneur en temps réel, nous pouvons utiliser cette commande :

docker logs 6cca9aeb320e -f --tail 100

Volumes et persistance des données dans Docker

Dans un environnement conteneurisé, les données générées ou modifiées à l'intérieur d'un conteneur sont éphémères. Par défaut, lorsqu'un conteneur est supprimé, toutes les données qu'il contenait disparaissent également. Pour garantir la persistance des données, Docker propose un mécanisme de volumes, qui permet de stocker et partager des fichiers entre l'hôte et les conteneurs. L'utilisation des volumes est essentielle pour assurer la sauvegarde des données, faciliter la gestion des configurations et améliorer la collaboration entre plusieurs conteneurs.

Pourquoi les volumes sont-ils nécessaires ?

L'exécution d'un conteneur crée un système de fichiers temporaire. Si un service écrit des données dans ce système (par exemple, une base de données stockant des informations), celles-ci seront perdues dès que le conteneur sera supprimé ou redémarré. Les volumes permettent de contourner cette limitation en fournissant un espace de stockage persistant. De plus, ils offrent une solution performante et sécurisée pour le partage de données entre plusieurs conteneurs, notamment dans les architectures microservices.

L'utilisation des volumes présente plusieurs avantages :

  • Persistance : les fichiers stockés dans un volume restent accessibles même après la suppression d'un conteneur.
  • Isolation des données : les volumes permettent de séparer les données applicatives du conteneur, facilitant les sauvegardes et la gestion des configurations.
  • Performance : contrairement aux systèmes de fichiers montés directement depuis l'hôte, les volumes Docker sont optimisés pour offrir de meilleures performances d'accès en lecture/écriture.
  • Flexibilité : ils permettent de partager des fichiers entre plusieurs conteneurs, facilitant la communication entre différentes applications conteneurisées.

Docker offre plusieurs mécanismes pour stocker des données de manière persistante, comme nous le verrons dans la suite de ce chapitre.

Volumes gérés par Docker

Les volumes Docker sont stockés dans un répertoire interne (/var/lib/docker/volumes/) sur l'hôte et sont entièrement gérés par Docker. Ils sont indépendants et ne sont pas supprimés automatiquement lors de la suppression d'un conteneur.

docker volume create mon_volume 
docker run -d -p 80:80 -v mon_volume:/data mon-serveur-web

Dans notre exemple ci-dessus, un volume nommé mon_volume est créé, puis monté dans le répertoire /data du conteneur. Ce volume reste accessible même si le conteneur est supprimé.

Bind mounts (montages liés à l'hôte)

Contrairement aux volumes Docker, un bind mount associe un chemin spécifique de l'hôte à un conteneur. Cela permet d'avoir un accès direct aux fichiers de l’hôte à l'intérieur du conteneur.

docker run -d -p 80:80 -v /home/jeremy:/data mon-serveur-web

Ici, le répertoire /home/jeremy de l'hôte est monté dans /data à l'intérieur du conteneur. Toute modification apportée dans /data sera directement visible sur l'hôte.

Il est également possible de monter ce répertoire en lecture seule, ce qui empêche toute modification depuis le conteneur. Pour cela, on ajoute simplement :ro à la fin du bind mount :

docker run -d -p 80:80 -v /home/jeremy:/data:ro mon-serveur-web

Dans ce cas, le conteneur peut lire les fichiers mais ne peut pas les modifier, ce qui améliore la sécurité lorsqu'on souhaite protéger les données de l'hôte.

TMPFS mount (stockage en mémoire)

Les tmpfs mounts permettent de stocker des fichiers en mémoire vive au lieu du disque. Cela améliore la rapidité d'accès aux données et est utile pour les fichiers temporaires.

docker run -d -p 80:80 --tmpfs /data:rw,size=100m mon-serveur-web

Dans cet exemple, /data est un volume en mémoire de 100 Mo accessible en lecture/écriture (rw).

Note : Docker permet d'attacher le même volume à plusieurs conteneurs, facilitant ainsi le partage des fichiers entre services.

Comment gérer les volumes ?

Pour lister les volumes existants, nous utilisons la commande docker volume ls qui affiche la liste des volumes Docker actuellement disponibles.

Docker offre également la possibilité d'inspecter les volumes, avec docker volume inspect :

docker volume inspect mon_volume

Cette commande renvoie des détails sur un volume, notamment son emplacement sur l'hôte et les conteneurs qui l'utilisent.

Lorsqu'un volume n'est plus utilisé, il peut être supprimé avec :

docker volume rm mon_volume

Enfin, pour nettoyer et supprimer tous les volumes non attachés à des conteneurs :

docker volume prune

Conclusion

Suite à la lecture de ce chapitre, vous devriez être en mesure de créer et supprimer les conteneurs Docker, mais aussi de gérer la persistance des données et les ressources affectées à chacun d'entre eux.

Dans le prochain chapitre, nous parlerons de la création d'images Docker en écrivant notre propre Dockerfile, mais pas seulement.

author avatar
Jérémy GAK
Jérémy GAK est un ingénieur Linux doté de plus de 11 ans d'expérience dans le domaine. Sa carrière diversifiée s'étend de l'administration système et réseau à une expertise pointue en sécurité informatique. Consultant et ingénieur système de métier et actif dans la veille technologique, il est expert sur les technologies open source, l'automatisation des processus et la cybersécurité.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.