Formations/Fondations Docker, Compose et Swarm/2.7 Démystifier les Images vs Conteneurs
Leçon 5m

2.7 Démystifier les Images vs Conteneurs

Comprendre la différence entre une image et un conteneur Docker.

Faisons une pause rapide sur un sujet crucial. Ce point va mettre en lumière la différence — pas toujours très claire au début — entre un conteneur et une image Docker.

Pour faire simple :

  • L'image, c'est la recette (ou le moule). C'est une description inerte de votre application et de ses dépendances.
  • Le conteneur, c'est le gâteau. C'est l'application bien vivante qui s'exécute, créée à partir de la recette.

1. L'Image Docker : le plan de construction

Pour dockeriser une application, il faut écrire un fichier nommé Dockerfile. Ce fichier vient décrire toutes les étapes de packaging de votre application de manière extrêmement factuelle.

En soi, l'image n'est qu'une "facette non vivante" de votre application. C'est un assemblage de fichiers qui va donner à Docker toutes les informations nécessaires pour la faire tourner.

Prenons l'exemple d'un Dockerfile créé spécialement pour une API en Python avec FastAPI :

FROM python:3.14

WORKDIR /code

COPY ./requirements.txt /code/requirements.txt

RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt

COPY ./app /code/app

CMD ["fastapi", "run", "app/main.py", "--port", "80"]

On voit clairement que chaque ligne donne une instruction précise à Docker pour assembler notre future boîte.

2. De l'Image au Conteneur : la compilation

Une fois notre fichier prêt, nous allons demander à Docker de lire ces instructions et de générer l'image. On utilise pour cela la commande de build :

docker build -t myimage .
(Cette commande crée notre image et on lui donne le tag "myimage").

3. Le Conteneur : l'application en vie

Maintenant que notre image est prête, on peut enfin créer notre conteneur. Le conteneur, c'est l'environnement isolé (la "boîte") qui embarque tout ce qui a été demandé dans l'image et qui exécute le code.

On le lance avec les paramètres requis :

docker run -d --name mycontainer -p 80:80 myimage
(On reconnaît au passage les flags qu'on a vus précédemment : -d pour lancer en arrière-plan, --name pour nommer le conteneur, et -p pour rediriger les ports).

C'est à ce moment précis que notre application prend vie. On peut d'ailleurs voir notre nouveau conteneur en action grâce à notre fameux docker ps :

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS         PORTS                NAMES
c9bbfccc565d   myimage   "fastapi run app/ma…"   10 seconds ago   Up 9 seconds   0.0.0.0:80->80/tcp   mycontainer

En résumé

L'image est une suite d'instructions données à Docker pour créer le conteneur. Et le conteneur, c'est votre application enfermée dans sa boîte, prête à servir vos utilisateurs !