Docker Hardened Images : la guerre des images durcies gratuites est lancée
Publié le :
Le marché des images conteneurs vit depuis 2022 une guerre sans merci entre acteurs historiques et nouveaux entrants. En trois ans à peine, le paysage s’est radicalement transformé : ce qui était gratuit devient payant, les géants vacillent, et de nouveaux modèles économiques émergent.
Pourquoi cette guerre vous concerne directement :
- 20 milliards de téléchargements/mois sur Docker Hub : tout le monde est impacté
- 60 milliards de dollars de coûts liés aux failles de sécurité chaque année
- Vos pipelines CI/CD peuvent casser du jour au lendemain (voir Bitnami août 2025)
- Le choix d’une image n’est plus seulement technique, c’est aussi stratégique et économique
Dans ce billet, je vous raconte cette guerre des images conteneurs et je compare avec des mesures réelles (ORAS, Grype) les deux protagonistes actuels : Chainguard (le disrupteur de 2022) vs Docker Hardened Images (la riposte gratuite de décembre 2025).
Rappel historique : comment on en est arrivés là
Le 28 août 2025, Bitnami (propriété de Broadcom) a provoqué un séisme dans l’écosystème DevOps. Du jour au lendemain, toutes les images Debian gratuites versionnées ont disparu du dépôt public.
Ce qui a changé concrètement :
- Les tags spécifiques (
postgresql:15.2.0,nginx:1.24.0) — utilisés par des milliers de pipelines CI/CD — ont migré vers un dépôt “Legacy” (bitnamilegacy/*) - Ces images Legacy ne reçoivent plus aucune mise à jour ni correctif de sécurité
- Seules les images avec tag
:latestrestent gratuites (pour le développement uniquement) - Pour avoir des versions fixes + support + correctifs CVE : Bitnami Secure Images (offre payante)
Le message était clair : vous voulez des images sécurisées et maintenues pour la production ? Sortez la carte bancaire.
Cette décision n’était pas isolée : Red Hat (passage payant de RHEL), Docker (Docker Desktop payant en entreprise) avaient déjà amorcé ce mouvement. La tendance est lourde : sécuriser la supply chain logicielle devient un produit, pas un service gratuit.
Résultat pour les équipes DevOps :
- Pipelines cassés du jour au lendemain (les tags versionnés introuvables)
- Risque CVE accru sur les images Legacy figées sans patch
- Choix cornélien : payer un abonnement, construire vos propres images (expertise + temps), ou trouver une alternative gratuite
- Grogne généralisée : la communauté n’a pas apprécié ce changement brutal sans période de transition
Pour en savoir plus sur ce changement et les stratégies de migration, voir l’article de DoNow : « Images Bitnami : ce qui va changer fin août et comment anticiper la transition » ↗.
Une solution alternative ? Chainguard, le pionnier (depuis 2022)
En 2022, Chainguard a lancé ses images durcies, révolutionnant le marché avec des images ultra-minimales qui promettaient 97,6% de réduction des CVE en moyenne. C’était une rupture totale avec les images traditionnelles.
Récemment, j’ai publié une comparaison détaillée entre Chainguard et les images standards qui a fait beaucoup de bruit sur LinkedIn. Les chiffres étaient sans appel.
Mais il y avait ce petit hic : le modèle freemium. ~50 images gratuites (tag
:latest uniquement), le reste payant. Et la question qui tue : si Chainguard
recopiait le modèle Bitnami un jour ?
Décembre 2025 : Docker contre-attaque avec ses images 100% gratuites
Le 17 décembre 2025, Docker frappe un grand coup : ses Docker Hardened Images (DHI) — des images “durcies” c’est-à-dire sécurisées et allégées — deviennent 100% gratuites pour tout le monde, sous licence Apache 2.0. Avant, il fallait payer pour y accéder.
Ce qui change la donne :
- Catalogue complet gratuit avec toutes les versions (pas juste
:latest) - Licence Apache 2.0 : zéro restriction, même pour usage commercial
- Conformité CIS intégrée : standards de sécurité dès l’installation
- Compatible drop-in : remplacez
nginx:latestpardhi.io/nginx:1et ça marche
Timing stratégique : 5 mois après le séisme Bitnami (août 2025), Docker propose une alternative crédible et 100% gratuite.

La question qui tue : Docker Hardened vs Chainguard, qui gagne vraiment ?
Mon test récent montrait Chainguard écrasant les images classiques. Mais face aux images DHI, que se passe-t-il ?
Questions auxquelles je réponds dans ce billet (avec mesures réelles) :
- Docker Hardened est-il aussi léger que Chainguard ?
- Le “gratuit illimité” Docker est-il un vrai game changer face au freemium Chainguard ?
- Qu’en est-il des CVE : Docker Hardened tient-il la promesse de sécurité ?
- Quid de la conformité (SBOM, SLSA, CIS) entre les deux acteurs ?
Ma méthode : pas de marketing, que des mesures réelles avec ORAS et Grype. Tailles, CVE, configuration de sécurité — je compare tout.
Le problème des images Docker classiques (rappel)
Analogie simple : une image Docker classique, c’est comme un couteau suisse avec 150 outils dont vous n’utilisez que 3. Les 147 autres ne servent qu’à alourdir votre poche et à augmenter les risques qu’un outil se casse.
Concrètement :
- Une image
nginx:latest(serveur web) pèse 152 MB et contient 150 programmes système - Une image
python:3.13atteint 412 MB et 610 programmes - Sur ces centaines de programmes, vous en utilisez peut-être 10
Le problème ? Chaque programme inutile peut contenir des CVE (Common Vulnerabilities and Exposures — en français : des failles de sécurité connues). C’est comme laisser 147 portes déverrouillées dans votre maison alors que vous n’en utilisez que 3.
⚠️ Important sur la gestion des CVE : La chasse aux CVE doit être menée intelligemment. Oui, il faut prioriser celles qui sont directement exposées (services web publics, APIs accessibles). Mais attention : les CVE “non exposées” ne doivent pas être ignorées pour autant.
Pourquoi ? Parce qu’en cas de compromission initiale (phishing, credential leak, 0-day), ces CVE deviennent des portes dérobées pour les mouvements latéraux. Un attaquant qui entre par un point A utilisera ces failles “non exposées” pour pivoter vers des systèmes critiques (bases de données, secrets, backups).
Règle pragmatique :
- Priorité 1 : CVE exposées publiquement (traitement immédiat)
- Priorité 2 : CVE exploitables en interne (pour bloquer les mouvements latéraux)
- Réduire la surface d’attaque reste la meilleure stratégie : moins de packages = moins de CVE à gérer
Méthodologie de test : mesures réelles du 19 décembre 2025
Ma promesse : pas de blabla marketing, que des mesures réelles et vérifiables.
Outils utilisés
1. ORAS 1.3.0 — Mesure de taille
- Récupère les manifests des images sans Docker
- Calcule la taille exacte en bytes des layers
- Compte le nombre de composants (layers)
2. Grype 0.104.2 — Scan de vulnérabilités
- Détecte les CVE par sévérité (CRITICAL, HIGH, MEDIUM, LOW)
- Base de données à jour (19 décembre 2025)
- Scan sans télécharger l’image complète
Images testées
cgr.dev/chainguard/nginx:latest(amd64)dhi.io/nginx:1(amd64)cgr.dev/chainguard/python:latest(amd64)dhi.io/python:3.13(amd64)
🔧 Commandes utilisées (reproductibles)
# Installation via asdfasdf plugin add oras && asdf install oras 1.3.0asdf plugin add grype && asdf install grype latest
# Mesures de taille avec ORASoras manifest fetch cgr.dev/chainguard/nginx:latest | jqoras manifest fetch dhi.io/nginx:1 | jq
# Scans CVE avec Grypegrype cgr.dev/chainguard/nginx:latest -o jsongrype dhi.io/nginx:1 -o jsonTests comparatifs : nginx
Taille et architecture
| Critère | Docker Hardened | Chainguard |
|---|---|---|
| Taille | 11.21 MB (11,759,082 bytes) | 6.91 MB (7,242,321 bytes) |
| Distribution | Debian 13 | Wolfi |
| Layers | 6 | 10 |
| Version | nginx 1.29.4 | nginx 1.29.3 |
Différence : Chainguard est 38.4% plus léger
Vulnérabilités (CVE)
Scan Grype du 19 décembre 2025 :
| Sévérité | Docker Hardened | Chainguard |
|---|---|---|
| CRITICAL | 0 | 0 |
| HIGH | 0 | 0 |
| MEDIUM | 0 | 0 |
| LOW | 2 | 0 |
| NEGLIGIBLE | 26 | 0 |
| Total | 28 | 0 |
Sécurité et configuration
| Aspect | Docker Hardened | Chainguard |
|---|---|---|
| User | nginx (non-root) | 65532 (non-root) |
| Port exposé | 8080/tcp | Aucun (déclaré) |
| Conformité CIS | ✅ Intégrée | ❌ Non |
| SBOM | ✅ SLSA Level 3 | ✅ Signé |
📊 Détails techniques complets
Docker Hardened nginx:1 :
- Distribution : Debian 13
- Layers : 6
- Taille exacte : 11,759,082 bytes
- User :
nginx - Port : 8080/tcp
- Entrypoint :
nginx -g "daemon off;" - Conformité : CIS par défaut
- Provenance : SLSA Level 3
Chainguard nginx:latest :
- Distribution : Wolfi
- Layers : 10
- Taille exacte : 7,242,321 bytes
- User :
65532(UID non-root) - Packages : 15
- Entrypoint :
/usr/sbin/nginx -c /etc/nginx/nginx.conf -e /dev/stderr -g "daemon off;" - CVE : Zéro absolu
Tests comparatifs : Python 3.13
Taille et architecture
| Critère | Docker Hardened | Chainguard |
|---|---|---|
| Taille | 21.22 MB (22,246,448 bytes) | 23.56 MB (24,702,732 bytes) |
| Distribution | Debian 13 | Wolfi |
| Layers | 6 | 11 |
| Version | Python 3.13 | Python 3.13.x |
Différence : Docker Hardened est 9.9% plus léger
Vulnérabilités (CVE)
Scan Grype du 19 décembre 2025 :
| Sévérité | Docker Hardened | Chainguard |
|---|---|---|
| CRITICAL | 0 | 0 |
| HIGH | 0 | 0 |
| MEDIUM | 4 | 0 |
| LOW | 8 | 0 |
| NEGLIGIBLE | 18 | 0 |
| Total | 30 | 0 |
Sécurité et configuration
| Aspect | Docker Hardened | Chainguard |
|---|---|---|
| User | nonroot (non-root) | 65532 (non-root) |
| Working dir | / | - |
| Conformité CIS | ✅ Intégrée | ❌ Non |
| SBOM | ✅ SLSA Level 3 | ✅ Signé |
📊 Détails techniques complets
Docker Hardened python:3.13 :
- Distribution : Debian 13
- Layers : 6
- Taille exacte : 22,246,448 bytes
- User :
nonroot - Working dir :
/ - Cmd :
python3 - Conformité : CIS par défaut
- Provenance : SLSA Level 3
Chainguard python:latest :
- Distribution : Wolfi
- Layers : 11
- Taille exacte : 24,702,732 bytes
- User :
65532(UID non-root) - Packages : ~25 APK
- Entrypoint :
/usr/bin/python - CVE : Zéro absolu
Tableau comparatif global
| Critère | Docker Hardened | Chainguard | Explication simple |
|---|---|---|---|
| 💰 Prix | ✅ Gratuit illimité | ⚠️ 50 images gratuites | Docker : tout gratuit. Chainguard : freemium |
| 📜 Licence | ✅ Apache 2.0 | ✅ Libre | Les deux : aucune restriction commerciale |
| 📦 Images gratuites | ✅ Toutes | ⚠️ ~50 | Docker : catalogue complet gratuit |
| 🏷️ Versions multiples | ✅ Oui (1.28, 1.29, latest) | ❌ :latest seulement | Docker : choisissez votre version |
| 🔒 SBOM natif | ✅ Oui (SLSA L3) | ✅ Oui | Les deux : traçabilité complète |
| 🛡️ Rootless | ✅ Oui | ✅ Oui (UID 65532) | Les deux : sécurité renforcée |
| ⚡ Fixes CVE rapides | 7j (payant) | <24h (payant) | Chainguard plus rapide, mais payant |
| ✅ Conformité CIS | ✅ Intégré | ❌ Non | Docker : standards de sécurité inclus |
| 🎖️ FIPS/STIG | Payant | Payant | Conformité militaire : payant partout |
| ⏳ Support post-EOL | ✅ +5 ans (payant) | +6 mois (payant) | Docker : 10x plus long |
| 📚 Catalogue total | 1000+ | 1883 projets | Chainguard : plus de choix (payant) |
| 📏 nginx | 11.2 MB | ⭐ 6.9 MB (-38%) | Chainguard plus léger |
| 🐍 python | ⭐ 21.2 MB (-10%) | 23.5 MB | Docker plus léger |
| 🔄 Migration | ✅ Drop-in | ⚠️ Ajustements | Docker : copier-coller, Chainguard : adapter |
Vérification de sécurité : SBOM et provenance expliqués
Analogie : acheter une voiture d’occasion
- Sans SBOM : vous ne savez pas d’où viennent les pièces, si elles ont été remplacées, par qui
- Avec SBOM : carnet d’entretien complet, traçabilité de chaque pièce, certifications
Un SBOM (Software Bill of Materials = liste des ingrédients du logiciel), c’est la même chose pour une image Docker : la liste exhaustive de tout ce qui est dedans.
Pourquoi c’est important ?
- Traçabilité : savoir exactement ce qui tourne sur vos serveurs
- Audit de sécurité : détecter les composants vulnérables rapidement
- Conformité : prouver aux auditeurs que tout est en ordre
- Réactivité : en cas de faille découverte, savoir instantanément si vous êtes impacté
Chainguard : transparence totale
Chainguard génère un SBOM pour chaque build, signé cryptographiquement.
Exemple concret : l’image nginx de Chainguard contient exactement 15 composants, pas un de plus :
ca-certificates-bundle (certificats sécurisés) glibc (bibliothèque système)nginx-mainline (le serveur web) libssl3 (chiffrement) ... et 11autresChaque composant est audité, sa version est figée, son origine vérifiée.
Docker Hardened : conformité intégrée
Docker va plus loin avec des annotations de conformité directement dans l’image.
Exemple : l’image nginx Docker Hardened annonce dans ses métadonnées :
{ "compliance": "cis", "distro": "debian-13", "licenses": "BSD-2-Clause"}Le tag "compliance": "cis" signifie que l’image respecte les benchmarks
CIS (Center for Internet Security) — des standards de sécurité reconnus
mondialement.
Avantage pratique : lors d’un audit, vous montrez ce fichier et c’est validé immédiatement. Pas besoin de passer 3 jours à durcir l’image manuellement.
Licences et coûts : qui est vraiment gratuit ?
Question clé : “Gratuit” ne veut pas toujours dire “sans limites”. Décortiquons.
Docker Hardened Images : licence Apache 2.0 (vraiment libre)
Apache 2.0 = la licence la plus permissive du monde open source.
Concrètement, vous pouvez :
- ✅ Utiliser dans n’importe quel projet commercial (startup, SaaS, produit vendu)
- ✅ Modifier l’image comme bon vous semble
- ✅ Redistribuer vos versions modifiées
- ✅ Vendre un produit qui utilise ces images
- ✅ Tirer des milliards de requêtes sans payer un centime
Ce que vous ne devez PAS faire :
- ❌ Prétendre que vous avez créé l’image (attribution requise)
Exemple réel : Vous créez un SaaS de gestion de projets. Vous utilisez
dhi.io/nginx:1 + dhi.io/python:3.13. Vous vendez des abonnements à 50€/mois.
Résultat : zéro redevance à Docker, utilisation légale à 100%.
Chainguard : gratuit avec limitations, freemium assumé
~50 images gratuites avec ces restrictions :
- ✅ Usage commercial autorisé (vous pouvez vendre votre produit)
- ⚠️ Tags
:latestuniquement (pas de version fixe) - ⚠️ Pas de SLA sur les corrections de failles
- ⚠️ Support communautaire seulement (Slack, forums)
Pour débloquer :
- Per-Image : payer par type d’image (ex: PostgreSQL FIPS)
- Catalog : abonnement complet, accès aux 1883 projets, toutes versions
- SLA : correctifs garantis en <7 jours (critiques) / 14 jours (autres)
Exemple réel : Vous testez une app avec Chainguard gratuit. Ça marche. Vous
passez en prod. Problème : tag :latest change, votre app casse.
Solution : payer pour avoir python:3.11.5 figé ou revenir à Docker
Hardened (gratuit, versions multiples).
Tableau de comparaison économique
| Situation | Docker Hardened | Chainguard |
|---|---|---|
| Projet perso / learning | ✅ Gratuit illimité | ✅ Gratuit |
| Startup en dev | ✅ Gratuit | ✅ Gratuit (~50 images) |
| Prod avec versions fixes | ✅ Gratuit (ex: nginx:1.28) | ⚠️ Payant |
| Catalogue complet d’images | ✅ Gratuit | ⚠️ Payant (Catalog) |
| Conformité FIPS | ⚠️ Payant (Enterprise) | ⚠️ Payant |
| Support <7j sur CVE | ⚠️ Payant (Enterprise) | ⚠️ Payant |
| Usage commercial SaaS | ✅ Gratuit Apache 2.0 | ✅ Autorisé (gratuit) |
Mon avis : Docker est “vraiment gratuit” pour 95% des usages. Chainguard = freemium intelligent (goûtez gratuit, payez pour la prod sérieuse).
Exploration des catalogues : ce qui est vraiment disponible
Docker Hardened Images : catalogue structuré par catégories
Le catalogue DHI est organisé autour de catégories d’usage :
Images de base
- OS : Debian 12/13, Alpine 3.21, Ubuntu
- Langages : Python (3.9-3.13), Node.js, Go, Rust, Ruby, Java
- Tags multiples :
nginx:1.28,nginx:1.29,nginx:latest - Variantes dev :
-devavec shell et outils de debug
Images applicatives
- Bases de données : PostgreSQL, MySQL, MongoDB, Redis, MariaDB
- Web servers : nginx, Apache, Caddy
- Outils DevOps : Jenkins, GitLab Runner, Terraform
- CNCF : Prometheus, Grafana, cert-manager, Istio
Images spécialisées (Enterprise)
- FIPS-validated : nginx-fips, python-fips (cryptographie certifiée)
- STIG-hardened : durcissement OS selon standards DISA
- AI/ML : TensorFlow, PyTorch, Jupyter
Accès : docker pull dhi.io/<image>:<tag> (authentification gratuite
requise)
Chainguard : 1883 projets d’images
Le catalogue Chainguard est beaucoup plus large mais segmenté :
Images gratuites (~50)
- Langages de base : go, node, python, ruby, rust
- Outils populaires : git, curl, busybox, wolfi-base
- Tags :
:latestet:latest-devuniquement
Production Containers (payant)
-
1883 projets d’images couvrant :
- CNCF ecosystem complet (Kubernetes, Istio, Prometheus, Argo…)
- Bases de données (PostgreSQL, MySQL, Cassandra, CockroachDB…)
- CI/CD (Jenkins, GitLab, GitHub Actions runners…)
- AI/ML (PyTorch, TensorFlow, ONNX, Triton…)
- Observability (Grafana, Loki, Tempo, Jaeger…)
-
Tags multiples par projet : versions historiques disponibles (ex: Python 3.10.0, 3.10.1, 3.11.0…)
-
FIPS images : 400+ images avec validation FIPS 140-3
-
Helm Charts : 42 charts durcis avec images Chainguard intégrées
-
Accès gratuit :
docker pull cgr.dev/chainguard/<image>:latest -
Accès payant : authentification avec token, accès à tous les tags et variantes
Comparaison quantitative
| Critère | Docker Hardened | Chainguard |
|---|---|---|
| Projets d’images | Non communiqué | 1883 |
| Images gratuites | Toutes | ~50 |
| Tags par image | Multiples (1.x, 2.x, latest) | Multiples (payant) |
| Tags gratuits | Tous | :latest uniquement |
| FIPS gratuit | ❌ Non | ❌ Non |
| Helm charts | ✅ Oui (CNCF) | ✅ 42 charts |
| Rebuilds | Quotidiens | Quotidiens (nightly) |
Verdict catalogues : Chainguard affiche 1883 projets (chiffre vérifié) mais verrouillés derrière un paywall. Docker propose un catalogue gratuit avec tous les tags mais sans communiquer le nombre exact de projets disponibles.
Conclusion : le match est ouvert
Docker remporte le round économique : licence Apache 2.0, catalogue complet gratuit, toutes les versions accessibles. Pour une majorité d’équipes, c’est la solution la plus simple et la plus accessible.
Chainguard conserve l’avantage sur les SLA : correctifs CVE en moins de 24h (payant), approche “zéro CVE par conception”, images ultra-légères pour les environnements contraints (edge, IoT).
La vraie question maintenant : comment vont réagir les autres acteurs ?
- Bitnami va-t-il revoir sa stratégie payante après cette annonce ?
- Red Hat (UBI) va-t-il contre-attaquer ?
- Autres vendors (Canonical, SUSE) vont-ils suivre le mouvement ?
Le marché des images conteneurs est en pleine recomposition. Docker a remis la gratuité au centre du jeu, forçant tous les acteurs à repositionner leur offre.
La suite dans les prochaines semaines : je continuerai à suivre l’évolution de ce marché, les réactions de Bitnami et Chainguard, et les nouvelles annonces à venir.