Aller au contenu

Hadolint : Analyse statique de Dockerfiles

Mise à jour :

Logo hadolint

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 :

Terminal window
hadolint Dockerfile

Résultat typique :

Terminal window
Dockerfile:3 DL3008 warning: Pin versions in apt-get install
Dockerfile: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 :

Terminal window
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 :

Terminal window
choco install hadolint

Ou avec Scoop :

Terminal window
scoop install hadolint

Vérification de l’installation

On peut ensuite vérifier l’installation avec :

Terminal window
hadolint --version
Haskell 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 :

Terminal window
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 :

Terminal window
Dockerfile:3 DL3008 warning: Pin versions in apt-get install
Dockerfile: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 curl

    Bon exemple :

    RUN apt-get install -y curl=7.68.0-1ubuntu2.7
  • DL4006 : Utiliser SHELL pour modifier les options par défaut

    Mauvais exemple :

    RUN echo "Hello" | cat

    Bon 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 :

Terminal window
hadolint --ignore DL3008 Dockerfile

Ou ajouter un commentaire directement dans le Dockerfile :

# hadolint ignore=DL3008
RUN 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 :