Niveau 🟡 intermédiaire
Durée estimée : 30 min · Prérequis : VM vs conteneur vs LXC
Une image Docker, c'est une recette de cuisine Ă©crite : figĂ©e, partageable, reproductible Ă
l'identique par n'importe qui la suit. Un conteneur, c'est le plat effectivement cuisinĂ© Ă
partir de cette recette : une instance concrète, qu'on peut préparer plusieurs fois à partir de
la même recette. Un volume, c'est le garde-manger qui survit même si on jette le plat après
l'avoir mangé — les données restent, indépendamment du conteneur qui les a produites.
Quatre concepts fondamentaux, dans l'ordre oĂą ils s'articulent :
Une image est un modèle figé, en lecture seule, contenant tout ce qu'il faut pour exécuter
une application : le code, ses dépendances, sa configuration par défaut. Une image se
télécharge ou se construit, et se réutilise pour créer autant de conteneurs que
nécessaire à partir d'elle. Elle est identifiée par un nom et un tag (une version, par
exemple nginx:1.25 plutĂ´t que le flou nginx:latest).
Un conteneur est une instance en cours d'exécution d'une image : un processus isolé (vu en
VM vs conteneur), avec son propre système de fichiers temporaire construit
à partir de l'image, sa propre vue du réseau, mais partageant le noyau de la machine hôte. Un
conteneur se démarre, s'arrête, se supprime — sans jamais modifier l'image dont il est issu.
Un volume est un espace de stockage qui survit à la suppression d'un conteneur — puisque
le système de fichiers propre à un conteneur disparaît avec lui. Deux formes principales : un
volume nommé (géré entièrement par Docker, dans un emplacement qu'il choisit) ou un
bind mount (un dossier précis de la machine hôte, monté directement dans le conteneur — plus
simple à localiser et sauvegarder manuellement, l'approche privilégiée dans ce wiki).
Un réseau Docker connecte des conteneurs entre eux et au monde extérieur. Un réseau bridge
par défaut (docker0) existe dès l'installation de Docker, mais les conteneurs qui s'y
trouvent ne peuvent se joindre entre eux que par leur adresse IP interne, pas par leur nom — un
réseau nommé, créé explicitement (docker network create), permet en revanche à des
conteneurs de se joindre par leur nom, via le DNS interne de Docker (déjà vu pour le reverse
proxy en M2).
Installer Docker correctement. Deux sources existent sous Ubuntu, avec une différence
importante :
docker.io du dépôt Ubuntu standard — souvent une version plusbuildx, Compose v2 intégré).download.docker.com) — la source recommandée, avec lesdocker-ce), l'outil en ligne de commande (docker-ce-cli), l'exécuteur de bas niveaucontainerd.io), et les greffons docker-buildx-plugin et docker-compose-plugin.Ajouter ce dépôt suit un schéma courant sous Debian/Ubuntu : télécharger la clé GPG officielle
du projet, la placer dans un emplacement dédié, puis déclarer le dépôt en y référençant
explicitement cette clé (directive Signed-By) — une vérification cryptographique que les
paquets installés proviennent bien de la source attendue, pas d'un dépôt usurpé.
🧪 Concrètement, sur notre exemple : Docker a été installé depuis le dépôt officiel,
pas le paquetdocker.iod'Ubuntu — prĂ©cisĂ©ment pour disposer de Compose v2 et des versions Ă
jour. Un réseau nommé dédié,npm_proxy, a été créé une seule fois manuellement puis
référencé comme réseau externe dans chaque stack qui doit être joignable par le reverse proxy
(déjà détaillé en M2) — un exemple concret de réseau nommé, par opposition au réseaudocker0
par défaut. Tous les services utilisent des bind mounts vers/srv/docker/<service>,
jamais de volumes nommés — un choix qui rend chaque donnée facile à localiser et à sauvegarder
manuellement, au prix de devoir gérer soi-même les questions de permissions (page suivante).
Une image donne naissance à plusieurs conteneurs indépendants. Chacun garde ses propres données
via un bind mount vers l'hôte, et communique avec les autres via un réseau nommé, sans jamais
passer par une adresse IP codée en dur.
docker images
# Liste les images présentes localement -- nom, tag, taille
docker ps -a
# Liste tous les conteneurs, actifs ou arrêtés -- l'option -a inclut
# les arrêtés, absents d'un simple "docker ps"
docker network ls
# Liste les réseaux Docker -- doit inclure "bridge" (le réseau par
# défaut, docker0) et tout réseau nommé créé manuellement
docker network create mon-reseau
# Crée un réseau nommé -- les conteneurs qui y sont connectés se
# joignent par leur nom, via le DNS interne de Docker
docker inspect <conteneur> | grep -A5 Mounts
# Affiche précisément quels volumes/bind mounts sont montés dans un
# conteneur, et vers quel chemin de la machine hĂ´te
docker run --rm hello-world
Doit afficher un message de confirmation expliquant que Docker a réussi à télécharger une image,
créer un conteneur à partir d'elle, l'exécuter, puis le supprimer (--rm) — la boucle complète
image → conteneur en une seule commande.
| SymptĂ´me | Cause probable | Solution |
|---|---|---|
| Deux conteneurs sur le réseau par défaut ne se joignent pas par leur nom | Le réseau bridge par défaut ne fournit pas de résolution DNS par nom, contrairement à un réseau nommé |
Créer un réseau nommé dédié (docker network create) et y connecter les conteneurs concernés |
| Données perdues après suppression d'un conteneur | Écriture dans le système de fichiers du conteneur, sans volume ni bind mount | Toujours monter un volume ou un bind mount pour toute donnée qui doit survivre au conteneur |
Fonctionnalités Compose récentes indisponibles (docker compose introuvable) |
Docker installé via le paquet docker.io d'Ubuntu plutôt que le dépôt officiel |
Réinstaller depuis le dépôt officiel Docker, qui inclut docker-compose-plugin |
docker0) ne le permet pas.Une image est un modèle figé, en lecture seule. Un conteneur est une instance en cours
d'exĂ©cution créée Ă partir de cette image — on peut crĂ©er plusieurs conteneurs indĂ©pendants Ă
partir de la mĂŞme image.
Parce que le système de fichiers d'un conteneur lui est propre et disparaît avec lui — seules
les données placées dans un volume ou un bind mount, en dehors de ce système de fichiers
éphémère, survivent à la suppression.
Parce que la résolution DNS par nom de conteneur n'est disponible que sur un réseau nommé, créé
explicitement — le réseau par défaut ne l'offre pas, seule une adresse IP interne permettrait la
communication.
Sur une machine avec Docker installé, crée un réseau nommé (docker network create test-net),
lance deux conteneurs légers dessus (par exemple deux alpine avec docker run -dit --network test-net --name a alpine et --name b), puis vérifie depuis l'un qu'il peut joindre l'autre par
son nom (docker exec a ping -c1 b).
image ·
conteneur ·
volume ·
bind mount ·
tag (Docker)
Cette formation est proposée par Deladev, studio web de Loïc D. — création de sites et d'applications, accompagnement et formation sur mesure.
Les projets réalisés · Prestations et tarifs · Le blog tech · Me contacter
Écrite par Loïc D. avec l'assistance de Claude (Anthropic) — un travail à deux.
© 2026 Deladev — publiée sous licence CC BY-NC-ND 4.0. Vous pouvez la lire, y renvoyer par un lien, la partager et la citer en créditant la source. La revendre, l'utiliser dans une prestation ou une formation payante, la republier même partiellement ailleurs, en diffuser une version modifiée ou l'exploiter pour entraîner un modèle d'IA nécessitent une autorisation écrite — pour un usage interne en entreprise, c'est souvent oui, il suffit de demander.