L’image Express est construite avec docker build --tag express-docker:0.1.0 ., puis lancée en arrière-plan avec suppression à l’arrêt et publication du port 3000 du conteneur vers le port 3000 de l’hôte.
L’exemple Express utilise le port 3000 et répond « Hello, Express! » à une requête GET sur la racine « / ».
Le Dockerfile de l’exemple Express utilise FROM node, COPY . ., RUN npm install, EXPOSE 3000 et CMD ["npm", "start"].
Le fichier .dockerignore exclut :
Définir l’image, copier les fichiers, installer les dépendances, exposer le port, lancer l’application.
★ À maîtriser
📌 RUN exécute une commande pendant la construction de l’image et cette commande doit être non interactive, car aucune entrée ne peut être fournie à Docker pendant le build.
FROM définit l’image de base, par exemple FROM alpine:3.4.
CMD définit la commande par défaut exécutée par un conteneur, par exemple CMD ["nginx", "-g", "daemon off;"].
Compléments
COPY copie des fichiers du contexte de construction vers un emplacement du système de fichiers du conteneur.
ENV définit une variable d’environnement, tandis qu’EXPOSE documente les ports réseau sur lesquels le conteneur écoute.
Ces instructions configurent le conteneur :
ARG définit un paramètre de construction de l’image, tandis qu’ONBUILD ajoute une instruction déclenchée lorsque l’image sert de base à une autre construction.
ADD copie des fichiers, répertoires ou fichiers distants dans le conteneur, peut invalider les caches et est à éviter au profit de COPY.
Chaque instruction d’un Dockerfile crée une nouvelle couche de l’image Docker, comparable à un instantané à un moment donné.
Les couches favorisent la mise en cache et le partage des données.
Visualiser l’image comme une pile d’instantanés réutilisables.
★ À maîtriser
📌 Il faut choisir une image de base spécifiée au moins jusqu’à une version mineure, comme node:20.8-alpine, afin de stabiliser la construction et d’éviter des ruptures dues aux mises à jour en amont.
Compléments
📌 Le répertoire de travail est la racine (/) par défaut, mais il convient de le définir ailleurs selon les conventions du langage et du framework afin de réserver un emplacement à l’application.
Image de base plus petite → image plus légère, build et publication accélérés, surface d’attaque réduite.
★ À maîtriser
📌 Définir un utilisateur non-root ajoute une couche de défense en profondeur, en complément de la protection que les espaces de noms utilisateur peuvent fournir entre les utilisateurs root du conteneur.
📌 npm ci assure un état reproductible, contrairement à npm install, et l’option --only=production empêche l’installation des dépendances de développement non nécessaires.
Compléments
★ À maîtriser
📌 Copier les fichiers de dépendances, tels que package*.json, puis installer les dépendances avant de copier le code permet de préserver leur couche en cache lorsque seul le code de l’application change.
Compléments
Copier d’abord les fichiers de dépendances → les changements de code préservent leur cache.
★ À maîtriser
Compléments
Dans l’exemple multi-stage, le stage de base part de node:20.8-alpine, définit /usr/src/app comme répertoire de travail et copie package*.json.
Dans l’exemple de production, le stage définit NODE_ENV=production, installe avec npm ci --only=production, utilise l’utilisateur node, copie src avec --chown=node:node, expose le port 3000 et lance node index.js.
Le stage dev privilégie le confort de développement ; le stage de production conserve une configuration de déploiement.
Teste tes connaissances sur Images Docker et bonnes pratiques avec 11 questions à choix multiples et corrections détaillées.
1. Quel est le rôle principal d’un Dockerfile dans la création d’une image Docker ?
2. Une équipe prépare un Dockerfile pour une application dont la commande de lancement est complexe. Quelle organisation correspond à la structure nominale décrite ?
Mémorisez les concepts clés de Images Docker et bonnes pratiques avec 10 flashcards interactives.
Que définit un Dockerfile ?
Les étapes nécessaires à la création d’une image Docker.
Quels éléments comprend la structure nominale d’un Dockerfile ?
L’image de base, l’application, ses dépendances, les autres fichiers, le port d’écoute interne et la commande de lancement.
Quel message répond l’application Express à une requête GET sur « / » ?
« Hello, Express! »
Importe ton cours et l'IA génère fiches, QCM et flashcards en 30 secondes.
Générateur de fiches