Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Un conteneur emporte tout ce qu'il faut

La leçon entière est à lire ici. Créez un compte gratuit pour lancer ses commandes dans un laboratoire et passer ses quiz et ses exercices.

Leçon de 45 minAucune commande

Pourtant, ça marchait sur mon poste

Inès travaille pour une épicerie en ligne à Lille. Elle a écrit le service qui enregistre les commandes. Sur son ordinateur portable, tout fonctionne.

Le lundi matin, sur le serveur, le service plante au démarrage. Le serveur a une ancienne version de Python et il lui manque une bibliothèque.

Ce problème a coûté des journées entières à beaucoup d'équipes. Cette leçon présente l'outil qui l'évite.

À la fin de cette leçon

Remarque

Je peux expliquer ce qu'est un conteneur et pourquoi les équipes s'en servent.

Mots clés

MotCe que ça veut direExemple
Dépendancece dont une application a besoin pour tournerPython 3.12, une bibliothèque
Conteneurune application qui tourne avec tout ce qu'il lui faut, isolée du reste
Imagele paquet figé à partir duquel on démarre un conteneur
Dockerfileun fichier texte qui liste les étapes pour fabriquer une image
Registreun entrepôt partagé d'images
Machine virtuelleun ordinateur simulé complet, avec son propre système

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un conteneur transporte ses dépendances

Toute application a des dépendances : une version précise de Python, des bibliothèques, quelques réglages.

Un conteneur réunit l'application et ses dépendances. Il tourne à l'écart du reste de la machine.

L'application retrouve donc le même Python et les mêmes bibliothèques partout. Le portable d'Inès et le serveur ne sont plus différents pour elle.

La même application à trois endroits

Où elle tournePython trouvéBibliothèque trouvéeRésultat
Portable d'Inès3.12OuiFonctionne
Serveur, sans conteneur3.8NonPlante
Serveur, dans un conteneur3.12, apporté par l'imageOui, apportée par l'imageFonctionne

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une erreur fréquente

Attention

Beaucoup pensent qu'un conteneur est une petite machine virtuelle. Ce n'est pas le cas. Une machine virtuelle fait tourner tout un système d'exploitation à elle. Un conteneur partage le système de la machine et n'emporte que l'application et ses dépendances. C'est pour cela qu'il démarre en une seconde environ.

Une image se fabrique avec un Dockerfile

On ne prépare pas un conteneur à la main. On écrit un Dockerfile : une courte liste d'étapes.

Un outil lit ces étapes dans l'ordre et fabrique une image. Tous les conteneurs lancés depuis cette image sont identiques.

Ci-dessous, Bash écrit un vrai Dockerfile puis le relit. Lisez chaque ligne, puis faites la modification du dernier commentaire.

Écrire et relire un Dockerfile

Code: bash
mkdir -p service-commandes && cd service-commandes
printf 'print("Le service des commandes tourne")\n' > appli.py
printf 'flask==3.0.3\n' > requirements.txt

cat > Dockerfile <<'FIN'
FROM python:3.12-slim
WORKDIR /appli
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY appli.py .
CMD ["python", "appli.py"]
FIN

# Affiche la recette avec le numéro de chaque ligne
cat -n Dockerfile

# Quelle image de départ ?
grep FROM Dockerfile

# Remplacez python:3.12-slim par python:3.11-slim plus haut, puis relancez.

Ce que fait chaque ligne

LigneCe qu'elle fait
FROM python:3.12-slimPart d'une image qui contient déjà Python 3.12
WORKDIR /appliTravaille dans le dossier /appli
COPY requirements.txt .Copie la liste des bibliothèques
RUN pip install -r requirements.txtInstalle ces bibliothèques dans l'image
COPY appli.py .Copie le code de l'application
CMD ["python", "appli.py"]Indique quoi lancer au démarrage du conteneur

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Pourquoi les équipes s'en servent

L'équipe fabrique l'image une seule fois. Elle la dépose dans un registre, un entrepôt partagé d'images.

Le serveur de test et le serveur de production récupèrent la même image. Ce qui a passé les tests est exactement ce que voient les clients.

Pendant les soldes, l'équipe lance dix copies de l'image au lieu d'une. Chaque copie démarre en quelques secondes.

Ce qu'affichent les vraies commandes

CommandeCe qu'elle afficheCe que cela veut dire
docker build -t commandes:1.4 .Successfully tagged commandes:1.4L'image est prête, nommée commandes, version 1.4
docker push registre.exemple.fr/commandes:1.41.4: digest: sha256:9f2c...L'image est dans le registre
docker run -d commandes:1.43b7e1c0a9d42Un conteneur a démarré, voici son identifiant
docker ps3b7e1c0a9d42 commandes:1.4 Up 5 secondsUn conteneur tourne depuis 5 secondes

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.