Hadolint : Analyse statique de Dockerfiles
Mise à jour :
Lorsqu’on écrit un Dockerfile, il est facile de faire des erreurs qui peuvent impacter la sécurité, les performances ou la maintenabilité des images. C’est là qu’intervient Hadolint, un analyseur statique conçu pour détecter les mauvaises pratiques et proposer des améliorations. En s’appuyant sur des règles bien définies et sur les recommandations de Docker, il aide à écrire des Dockerfiles plus efficaces et conformes aux standards.
Fonctionnement
Hadolint est conçu pour analyser les Dockerfiles et détecter les erreurs, les mauvaises pratiques et les recommandations d’optimisation. Voici ses principales fonctionnalités.
Lorsqu’un Dockerfile est analysé, Hadolint renvoie une liste de recommandations classées par gravité. Chaque erreur est associée à un code spécifique qui permet de comprendre et corriger le problème.
Exemple d’analyse :
hadolint Dockerfile
Résultat typique :
Dockerfile:3 DL3008 warning: Pin versions in apt-get installDockerfile:6 DL4006 error: Set the SHELL option -o pipefail before RUN with a pipe in it
Hadolint aide aussi à identifier les problèmes liés aux dépendances, comme
l’absence de versions épinglées dans les instructions RUN apt-get install
.
Cela permet d’éviter des builds non reproductibles et des erreurs inattendues.
Installation
L’installation de Hadolint est simple et s’adapte à plusieurs environnements. Voici comment procéder en fonction de votre système d’exploitation.
Linux et macOS
La méthode la plus simple consiste à télécharger le binaire directement :
sudo wget -O /usr/local/bin/hadolint https://github.com/hadolint/hadolint/releases/latest/download/hadolint-$(uname -s)-$(uname -m)sudo chmod +x /usr/local/bin/hadolint
Windows
Sous Windows, Hadolint peut être installé via Chocolatey :
choco install hadolint
Ou avec Scoop :
scoop install hadolint
Vérification de l’installation
On peut ensuite vérifier l’installation avec :
hadolint --versionHaskell Dockerfile Linter 2.12.0
Utilisation de base
Une fois Hadolint installé, son utilisation est simple. Il suffit de l’exécuter sur un Dockerfile pour obtenir un rapport détaillé des erreurs et recommandations.
Lancer une analyse de base
La commande la plus simple pour analyser un Dockerfile est :
hadolint Dockerfile
Si le fichier contient des erreurs, Hadolint affichera une liste avec le numéro de ligne, le code de la règle et une brève description du problème :
Dockerfile:3 DL3008 warning: Pin versions in apt-get installDockerfile:6 DL4006 error: Set the SHELL option -o pipefail before RUN with a pipe in it
Interpréter les résultats
Chaque message d’erreur est accompagné d’un code de règle (ex: DL3008, DL4006). Ces règles sont documentées sur le site officiel de Hadolint ↗, ce qui permet de comprendre leur signification et comment les corriger.
Corriger les erreurs courantes
-
DL3008 : Ne pas installer des paquets sans version spécifique Mauvais exemple :
RUN apt-get install -y curlBon exemple :
RUN apt-get install -y curl=7.68.0-1ubuntu2.7 -
DL4006 : Utiliser
SHELL
pour modifier les options par défautMauvais exemple :
RUN echo "Hello" | catBon exemple :
SHELL ["/bin/bash", "-o", "pipefail", "-c"]RUN echo "Hello" | cat
Exclure certaines règles
Si une règle n’est pas pertinente pour un projet, on peut l’ignorer avec :
hadolint --ignore DL3008 Dockerfile
Ou ajouter un commentaire directement dans le Dockerfile :
# hadolint ignore=DL3008RUN apt-get install -y curl
Avec ces bases, Hadolint devient un outil incontournable pour améliorer la qualité des Dockerfiles et éviter les mauvaises pratiques.
Configuration d’Hadolint
Pour éviter de répeter les ignore à répéition, il suffit de créer un fichier
.hadolint.yaml
pour gérer la configuration :
ignored: - DL3008 - DL4006
Intégration dans un pipeline CI/CD
L’intégration de Hadolint dans un pipeline CI/CD permet d’automatiser la vérification des Dockerfiles et d’empêcher le déploiement de mauvaises pratiques
GitLab CI/CD
Dans un projet GitLab, on peut ajouter une étape d’analyse Hadolint dans
le fichier .gitlab-ci.yml
:
stages: - lint
hadolint: image: hadolint/hadolint:latest stage: lint script: - hadolint Dockerfile
Si des erreurs sont détectées, le pipeline échouera et demandera une correction avant de poursuivre le déploiement.
GitHub Actions
Pour GitHub, on peut créer un workflow .github/workflows/hadolint.yml
:
name: Hadolint
on: [push, pull_request]
jobs: hadolint: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v3 - name: Run Hadolint uses: hadolint/hadolint-action@v3.1.0 with: dockerfile: Dockerfile
Ce workflow exécute Hadolint à chaque push
ou pull request
et affiche
les erreurs directement dans l’interface de GitHub Actions.
Conclusion
Vous l’aurez compris Hadolint est un outil essentiel pour garantir des Dockerfiles propres, sécurisés et conformes aux bonnes pratiques. En intégrant son analyse dans un pipeline CI/CD, on automatise la détection des erreurs avant le déploiement, ce qui évite des problèmes en production. Son utilisation est simple, sa configuration flexible. Qu’attendez vous pour l’utiliser ?
Plus d’infos
Voici quelques ressources pour approfondir l’utilisation de Hadolint :
- Site officiel : GitHub - Hadolint ↗
- Documentation : Hadolint README ↗
- Liste des règles : Hadolint Rules ↗
- Image Docker officielle : Hadolint sur Docker Hub ↗