Aller au contenu

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 :latest restent 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:latest par dhi.io/nginx:1 et ç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.

Docker hub

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.13 atteint 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)
Terminal window
# Installation via asdf
asdf plugin add oras && asdf install oras 1.3.0
asdf plugin add grype && asdf install grype latest
# Mesures de taille avec ORAS
oras manifest fetch cgr.dev/chainguard/nginx:latest | jq
oras manifest fetch dhi.io/nginx:1 | jq
# Scans CVE avec Grype
grype cgr.dev/chainguard/nginx:latest -o json
grype dhi.io/nginx:1 -o json

Tests comparatifs : nginx

Taille et architecture

CritèreDocker HardenedChainguard
Taille11.21 MB (11,759,082 bytes)6.91 MB (7,242,321 bytes)
DistributionDebian 13Wolfi
Layers610
Versionnginx 1.29.4nginx 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 HardenedChainguard
CRITICAL00
HIGH00
MEDIUM00
LOW20
NEGLIGIBLE260
Total280

Sécurité et configuration

AspectDocker HardenedChainguard
Usernginx (non-root)65532 (non-root)
Port exposé8080/tcpAucun (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èreDocker HardenedChainguard
Taille21.22 MB (22,246,448 bytes)23.56 MB (24,702,732 bytes)
DistributionDebian 13Wolfi
Layers611
VersionPython 3.13Python 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 HardenedChainguard
CRITICAL00
HIGH00
MEDIUM40
LOW80
NEGLIGIBLE180
Total300

Sécurité et configuration

AspectDocker HardenedChainguard
Usernonroot (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èreDocker HardenedChainguardExplication simple
💰 PrixGratuit illimité⚠️ 50 images gratuitesDocker : tout gratuit. Chainguard : freemium
📜 Licence✅ Apache 2.0✅ LibreLes deux : aucune restriction commerciale
📦 Images gratuitesToutes⚠️ ~50Docker : catalogue complet gratuit
🏷️ Versions multiples✅ Oui (1.28, 1.29, latest)❌ :latest seulementDocker : choisissez votre version
🔒 SBOM natif✅ Oui (SLSA L3)✅ OuiLes deux : traçabilité complète
🛡️ Rootless✅ Oui✅ Oui (UID 65532)Les deux : sécurité renforcée
⚡ Fixes CVE rapides7j (payant)<24h (payant)Chainguard plus rapide, mais payant
✅ Conformité CISIntégré❌ NonDocker : standards de sécurité inclus
🎖️ FIPS/STIGPayantPayantConformité militaire : payant partout
⏳ Support post-EOL+5 ans (payant)+6 mois (payant)Docker : 10x plus long
📚 Catalogue total1000+1883 projetsChainguard : plus de choix (payant)
📏 nginx11.2 MB6.9 MB (-38%)Chainguard plus léger
🐍 python21.2 MB (-10%)23.5 MBDocker plus léger
🔄 MigrationDrop-in⚠️ AjustementsDocker : 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 ?

  1. Traçabilité : savoir exactement ce qui tourne sur vos serveurs
  2. Audit de sécurité : détecter les composants vulnérables rapidement
  3. Conformité : prouver aux auditeurs que tout est en ordre
  4. 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 11
autres

Chaque 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 :latest uniquement (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

SituationDocker HardenedChainguard
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 : -dev avec 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 : :latest et :latest-dev uniquement

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èreDocker HardenedChainguard
Projets d’imagesNon communiqué1883
Images gratuitesToutes~50
Tags par imageMultiples (1.x, 2.x, latest)Multiples (payant)
Tags gratuitsTous:latest uniquement
FIPS gratuit❌ Non❌ Non
Helm charts✅ Oui (CNCF)✅ 42 charts
RebuildsQuotidiensQuotidiens (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.

Liens utiles