1. Pourquoi linter un Dockerfile ? #
Trouver les problèmes avant de construire.
Le principe #
Un linter lit le Dockerfile sans le construire et signale les erreurs et mauvaises pratiques : image sans version, ADD au lieu de COPY, cache apt conservé, CMD en forme shell. Hadolint est la référence ; il analyse aussi les commandes RUN avec ShellCheck.
2. Hadolint en pratique #
Un vrai résultat, et comment le lire.
Le Dockerfile à corriger #
FROM node
RUN apt-get update && apt-get install -y curl
ADD . /app
WORKDIR /app
RUN npm install
EXPOSE 3000
CMD npm starthadolint Dockerfile
# ou sans installation
docker run --rm -i hadolint/hadolint:v2.15.1 < DockerfileDockerfile:1 DL3006 warning: Always tag the version of an image explicitly
Dockerfile:2 DL3008 warning: Pin versions in apt get install. Instead of `apt-get install <package>` use `apt-get install <package>=<version>`
Dockerfile:2 DL3015 info: Avoid additional packages by specifying `--no-install-recommends`
Dockerfile:2 DL3009 info: Delete the apt lists (/var/lib/apt/lists) after installing something
Dockerfile:3 DL3020 error: Use COPY instead of ADD for files and folders
Dockerfile:7 DL3025 warning: Use arguments JSON notation for CMD and ENTRYPOINT arguments| Règle | Problème | Correction |
|---|---|---|
| DL3006 | Image sans version | node:22.11-bookworm-slim |
| DL3020 | ADD pour des fichiers locaux | COPY |
| DL3015 / DL3009 | Paquets recommandés, cache apt conservé | --no-install-recommends, rm -rf /var/lib/apt/lists/* |
| DL3025 | CMD en forme shell : signaux mal transmis | CMD ["npm", "start"] |
Le résultat après correction #
Sur le Dockerfile durci de la leçon précédente, Hadolint a encore signalé DL3066 pour USER nonroot : un nom d'utilisateur peut ne pas être résolu par l'hôte. Avec USER 65532:65532, il ne signale plus rien et renvoie le code 0.
Seuils et exceptions #
Par défaut, Hadolint échoue dès le premier constat, même de niveau info. En CI, fixez un seuil, et justifiez chaque exception dans .hadolint.yaml :
hadolint --failure-threshold warning Dockerfile
hadolint -f json Dockerfile # pour un outil de CI# .hadolint.yaml
ignored:
- DL3008 # versions apt gérées par RenovatePonctuellement, un commentaire # hadolint ignore=DL3008 juste au-dessus de la ligne.
3. Les vérifications intégrées #
docker build --check.
docker build --check #
BuildKit embarque ses propres règles (casse des mots-clés, FROM … AS incohérent, variables non définies, CMD en forme shell…). La commande les évalue sans construire l'image :
docker build --check .Elles complètent Hadolint sans le remplacer : Hadolint va plus loin sur les commandes shell et les paquets. Cette commande n'a pas été exécutée pour cet article, faute de démon Docker dans notre environnement de test.
Sources #
Sorties réelles de Hadolint 2.15.1.
Mon suivi
Connectez-vous pour suivre votre progression et prendre des notes. Se connecter
💬 Questions sur cette leçon
Aucune question pour l'instant : soyez le premier à demander de l'aide ou à partager votre configuration.
Glossaire de la formation
Micro-services
Architecture où une application est divisée en plusieurs petits services indépendants, souvent déployés dans le Cloud.
Docker
Outil permettant de virtualiser et packager des applications à l'intérieur de conteneurs légers pour un déploiement optimal.Exemple de déploiement d'u...
Prometheus
Système open source de surveillance et d'alerte, particulièrement adapté pour la collecte de métriques dans des environnements dynamiques (comme Kuber...
Kubernetes
Plateforme open source d'orchestration de conteneurs permettant d'automatiser le déploiement, la mise à l'échelle et la gestion des applications conte...
CI/CD
Intégration Continue et Déploiement Continu. Pratiques DevOps visant à automatiser les tests et le déploiement des applications pour livrer plus rapid...
Terraform
Outil d'Infrastructure as Code (IaC) permettant de définir et de provisionner des ressources d'infrastructure cloud et on-premise via des fichiers de ...
Métriques
Mesures numériques collectées à intervalles réguliers (ex: CPU, RAM, temps de réponse) utilisées pour évaluer l'état de santé global d'un système au f...
DevOps
Culture, mouvement et pratiques visant à unifier le développement logiciel (Dev) et l'administration des infrastructures informatiques (Ops).Découvrir...
API Gateway
Passerelle servant de point d'entrée unique pour l'ensemble des requêtes vers des architectures micro-services. Elle gère le routage, la sécurité et l...
Architecture
Conception globale et structurelle d'un système informatique, définissant ses différents composants, leurs relations et les principes guidant son évol...
Artefact (Artifact)
Résultat final d'un processus de compilation ou de construction logicielle (build), tel qu'un fichier .jar, une archive zip ou une image Docker, prêt ...
Repository
Dépôt de stockage centralisé. Peut désigner un dépôt de code source (ex: Git) ou un dépôt d'artefacts et binaires (ex: Harbor, Nexus, Artifactory).
Ansible
Outil open source d'automatisation informatique (IaC) permettant la gestion des configurations, le déploiement d'applications et l'orchestration, fonc...
Articles recommandés
Bonnes pratiques Docker : images, exécution, sécurité et exploitation
Les bonnes pratiques Docker : Dockerfile et builds multi-étapes, images minimales et reproductibl...
Container registry : choisir et sécuriser son registre d'images (Docker Hub, Harbor, GHCR, ECR)
Comprendre les registres de conteneurs : Docker Hub, GitHub Container Registry, registres cloud (...
Docker : vue d'ensemble, architecture et premiers pas
Découvrir Docker : conteneurs vs machines virtuelles, architecture client/daemon/registre, images...
Scanner ses images Docker : Trivy, Grype et Docker Scout
Détecter les vulnérabilités et erreurs de configuration des images avec Trivy, lire les résultats...
Images durcies : réduire la surface d'attaque de ses conteneurs
Choisir une image de base durcie : slim, distroless, Docker Hardened Images, Chainguard ; non-roo...
Aide-mémoire Docker : Les commandes essentielles
Un guide pratique regroupant toutes les commandes indispensables pour manipuler les images, les c...
SBOM : l'inventaire des composants de vos images
Générer un SBOM CycloneDX ou SPDX, le rescanner sans reconstruire et savoir en quelques secondes ...
Conteneurs, Kubernetes et cloud native dans une démarche DevOps
Le rôle des conteneurs et de Kubernetes dans le DevOps : images reproductibles, Dockerfile multi-...
Sécurité réseau des conteneurs (container network security) et networking Kubernetes
Sécuriser le réseau des conteneurs : fonctionnement du networking Docker et Kubernetes, CNI, Netw...