DOCKER - 4 6 Les bases du Dockerfile
Un Dockerfile est un fichier texte contenant une recette pour construire une image Docker. Ce n'est pas un script shell, mais un langage de configuration propre à Docker. Chaque ligne constitue une instruction qui crée une couche dans l'image finale. Les instructions s'exécutent de haut en bas et leur ordre est important.
Directives essentielles
FROM : Obligatoire, c'est la première instruction. Elle spécifie l'image de base (ex : FROM debian:bookworm ou FROM alpine). RUN : Exécute des commandes shell dans le conteneur (ex : installer un paquet avec apt-get ou apk). Pour économiser les couches, enchaînez les commandes avec &&. ENV : Définit des variables d'environnement. WORKDIR : Change le répertoire de travail courant. COPY : Copie des fichiers depuis votre machine vers le conteneur.
Exposition et démarrage
EXPOSE : Documente les ports sur lesquels le conteneur écoutera (ex : EXPOSE 80 443). Note : cela ne les ouvre pas automatiquement, simplement les déclare. CMD : Obligatoire, c'est la commande par défaut exécutée quand le conteneur démarre. Pour les logs, routez stdout/stderr plutôt que des fichiers log, Docker capturera automatiquement tout ce qui va à stdout/stderr, facilitant la gestion centralisée des logs.
En résumé
Le Dockerfile est la recette fondamentale pour construire des images Docker. Ce cours couvre les commandes essentielles (FROM, ENV, RUN, EXPOSE) et explique comment Docker exécute chaque ligne comme une couche distincte. On apprend pourquoi utiliser des distributions minimales comme Alpine, comment chaîner les commandes efficacement avec &&, et l'importance de diriger la journalisation vers stdout/stderr pour que Docker gère la capture des logs.
Points clés
- FROM : commande obligatoire qui définit l'image de base (Debian, Alpine, Ubuntu) — doit toujours être première
- ENV : déclare les variables d'environnement, essentielles pour configurer les conteneurs à la construction et l'exécution
- RUN : exécute des commandes shell (installation de paquets, modifications de fichiers) — chaque RUN crée une couche
- Chaîner les RUN avec && : combine plusieurs commandes en une seule couche, économisant espace disque et temps de construction
- Distributions minimales (Alpine, Debian) : plus légères qu'Ubuntu, avec paquets de base seulement et mises à jour de sécurité automatiques
- EXPOSE : déclare les ports TCP/UDP du conteneur dans le Dockerfile, mais n'expose rien réellement sans option -p au lancement
- Logging : envoyer les logs à stdout/stderr depuis le conteneur — Docker gère automatiquement la capture via le daemon
Questions fréquentes
Pourquoi la commande FROM est-elle obligatoire et doit-elle être première ?
FROM définit l'image de base sur laquelle toutes les autres couches sont ajoutées. C'est le point de départ de chaque Dockerfile et doit être la première commande pour que Docker sache avec quelle distribution travailler (Debian, Alpine, etc.).
Quel est l'intérêt de chaîner les commandes RUN avec && ?
Chaîner les RUN avec && les combine en une seule couche au lieu de créer plusieurs couches. Cela réduit la taille finale de l'image et accélère la construction. C'est une meilleure pratique car chaque couche ajoute de l'espace disque.
Quelle est la différence entre EXPOSE et l'option -p de docker run ?
EXPOSE documente les ports du conteneur dans le Dockerfile mais n'expose rien réellement. Pour accéder aux ports du conteneur depuis l'hôte, vous devez utiliser l'option -p lors du lancement (ex: docker run -p 80:80).