Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
minimal — Collection minimale d'images de conteneurs durcies contre les CVE | Kitploit
Outils/GitHubGitHub/rtvkiz/minimal
Scanners de VulnérabilitésSécurité des ConteneursAudit de ConfigurationSécurité CloudDevSecOpsSécurité de la Chaîne Logistique
GitHubrtvkiz/minimal

minimal

Collection minimale d'images de conteneurs durcies contre les CVE

Voir le dépôt
513213il y a 14h 28mVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

minimal — images de conteneurs durcis

Images de conteneurs compactes, durcies, gratuites et sous licence MIT.
Construites à partir des sources avec les paquets apko de Chainguard et Wolfi, reconstruites toutes les six heures.
Chaque image est signée avec cosign, inclut une attestation de SBOM SPDX, et possède une provenance de construction SLSA Niveau 3. Vous pouvez tout vérifier sans compte.

🌐  Parcourir le catalogue complet sur minimalcontainers.com  →

Build status Catalogue d'images Licence: MIT SLSA Niveau 3 Images : 57 Architectures

Catalogue d'images · Vérifier une image · Les 57 images ·

Télécharger l’outil
Discussion HN

Télécharger et vérifier en 30 secondes

L'intérêt de ces images est que vous n'avez pas à me faire confiance. Téléchargez-en une, puis vérifiez vous-même la provenance :```bash

Pull. It's public — no login, no rate limit.

docker pull ghcr.io/rtvkiz/minimal-python:latest

Verify the build provenance. This proves the image was produced by the

workflow file in this repo, at a specific commit, on a GitHub-hosted runner.

gh attestation verify oci://ghcr.io/rtvkiz/minimal-python:latest --owner rtvkiz

Pull the SPDX SBOM so you can see exactly what's inside.

cosign verify-attestation --type spdxjson
--certificate-identity-regexp='https://github.com/rtvkiz/minimal/'
--certificate-oidc-issuer='https://token.actions.githubusercontent.com'
ghcr.io/rtvkiz/minimal-python:latest
| jq -r '.payload | @base64d | fromjson | .predicate' > python-sbom.spdx.json

root@kitploit:~
Plus de recettes de vérification (signature cosign, SBOM, provenance SLSA) se trouvent dans [`.github/SECURITY.md`](https://github.com/rtvkiz/minimal/blob/main/.github/SECURITY.md).

## En quoi `minimal` est différent

|  | minimal | Chainguard | Docker Hardened | Minimus / RapidFort |
|---|:---:|:---:|:---:|:---:|
| **Licence** | MIT | Propriétaire | Apache-2.0 | Propriétaire |
| **Coût** | 0 $ | ~30 000 $/image/an | Gratuit + support payant | Appel commercial |
| **Authentification nécessaire pour extraire** | Non | Oui | Oui | Oui |
| **Limites de débit** | Aucune | Oui | Oui | Oui |
| **Recettes de construction publiques** | Oui, chaque `melange.yaml` | Non | Oui, Dockerfiles | Non |
| **Signature Cosign + SBOM + SLSA L3** | Oui | Oui | Oui | Oui |
| **SLA fournisseur, FedRAMP/STIG** | Non | Oui (payant) | Oui (payant) | Oui (payant) |

Optez pour `minimal` si vous voulez des images durcies sans payer ni vous inscrire, si vous voulez lire chaque recette de construction de bout en bout, ou si vous voulez un modèle fonctionnel à forker dans votre propre catalogue interne.

Ce n'est probablement pas le bon choix si vous avez besoin d'un contrat fournisseur, de documents d'accréditation FedRAMP ou STIG, ou de plus d'un millier d'images dès le premier jour — ce sont des besoins réels que ce projet ne cherche pas à résoudre.

## Ce que chaque image embarque

- Une signature keyless Cosign, vérifiable auprès du registre de transparence public Rekor.
- Un SBOM SPDX attaché comme une attestation in-toto — chaque paquet, version et licence.
- Une provenance de construction SLSA v1.0 — preuve cryptographique de quel workflow, quel commit et quel runner a produit l'image.
- Un scan Grype quotidien, avec les résultats dans le [catalogue public](https://minimalcontainers.com) et l'onglet Sécurité GitHub.
- Des constructions natives `linux/amd64` et `linux/arm64`.
- Un utilisateur non-root par défaut (UID 65532), sauf si l'upstream insiste autrement.
- Pas de shell si possible — la plupart des images ne contiennent pas `/bin/sh`.
- Un cycle de reconstruction de six heures, afin que les correctifs de CVE Wolfi arrivent en quelques heures, pas en jours.

## Images disponibles — 57 au total

| Catégorie | Nombre | Points forts |
|---|---|---|
| **Langages & environnements d'exécution** | 9 | python, node-slim, bun, go, java, ruby, php, dotnet, deno |
| **Bases de données** | 5 | mysql, mariadb, postgres-slim, sqlite, opensearch |
| **Caches, files d'attente, messagerie** | 7 | redis-slim, valkey, memcached, kafka, rabbitmq, nats, mosquitto |
| **Serveurs web & proxies** | 6 | nginx, httpd, caddy, haproxy, traefik, envoy |
| **Observabilité** | 14 | prometheus, alertmanager, victoria-metrics, thanos, mimir, jaeger, loki, tempo, otelcol, fluent-bit, telegraf, node-exporter, blackbox-exporter, pushgateway |
| **Infrastructure** | 7 | coredns, etcd, openbao, keycloak, qdrant, registry, consul |
| **Kubernetes, CI & IaC** | 4 | helm, kubectl, opentofu, trivy |
| **Applications** | 5 | jenkins, gitea, minio, rails, mailpit |

Parcourez chaque image — avec des scans CVE en direct, tous les tags, SBOM et provenance de construction — sur **[minimalcontainers.com](https://minimalcontainers.com)**, ou développez la liste complète des commandes d'extraction ci-dessous.

<details>
<summary><strong>Catalogue complet des images avec commandes d'extraction</strong></summary>

<br>

| Image | Commande d'extraction | Shell | Cas d'usage |
|-------|--------------|-------|----------|
| | | **Langages** | |
| Python | `docker pull ghcr.io/rtvkiz/minimal-python:latest` | Non | Applications Python, microservices |
| Node.js-slim | `docker pull ghcr.io/rtvkiz/minimal-node-slim:latest` | Non | Applications Node.js, JavaScript |
| Bun | `docker pull ghcr.io/rtvkiz/minimal-bun:latest` | Non | Environnement d'exécution JavaScript/TypeScript rapide |
| Go | `docker pull ghcr.io/rtvkiz/minimal-go:latest` | Non | Développement Go, constructions CGO |
| .NET Runtime | `docker pull ghcr.io/rtvkiz/minimal-dotnet:latest` | Non | Environnement d'exécution .NET 10 pour applications |
| Java | `docker pull ghcr.io/rtvkiz/minimal-java:latest` | Non | OpenJDK 26 JRE pour applications Java |
| Ruby | `docker pull ghcr.io/rtvkiz/minimal-ruby:latest` | Non | Environnement d'exécution Ruby 4.0 (construit à partir des sources) |
| PHP | `docker pull ghcr.io/rtvkiz/minimal-php:latest` | Non | CLI PHP 8.5 (construit à partir des sources) |
| Rails | `docker pull ghcr.io/rtvkiz/minimal-rails:latest` | Non | Ruby 4.0 + Rails 8.1 (construit à partir des sources) |
| Deno | `docker pull ghcr.io/rtvkiz/minimal-deno:latest` | Non | Environnement d'exécution sécurisé TypeScript/JavaScript |
| | | **Bases de données** | |
| MySQL | `docker pull ghcr.io/rtvkiz/minimal-mysql:latest` | Oui | MySQL LTS 8.4.x, construit à partir des sources |
| MariaDB | `docker pull ghcr.io/rtvkiz/minimal-mariadb:latest` | Oui | MariaDB LTS 11.4.x, construit à partir des sources |
| PostgreSQL-slim | `docker pull ghcr.io/rtvkiz/minimal-postgres-slim:latest` | Non | Base de données relationnelle |
| SQLite | `docker pull ghcr.io/rtvkiz/minimal-sqlite:latest` | Non | CLI de base de données SQL embarquée |
| OpenSearch | `docker pull ghcr.io/rtvkiz/minimal-opensearch:latest` | Non* | OpenSearch 3.x — recherche & analyse |
| | | **Caches, files d'attente, messagerie** | |
| Redis-slim | `docker pull ghcr.io/rtvkiz/minimal-redis-slim:latest` | Non | Stockage de données en mémoire |
| Memcached | `docker pull ghcr.io/rtvkiz/minimal-memcached:latest` | Non | Mise en cache en mémoire (construit à partir des sources) |
| Valkey | `docker pull ghcr.io/rtvkiz/minimal-valkey:latest` | Non | Fork de Redis sous licence BSD (LF) |
| Kafka | `docker pull ghcr.io/rtvkiz/minimal-kafka:latest` | Oui | Apache Kafka 4.x, mode KRaft |
| RabbitMQ | `docker pull ghcr.io/rtvkiz/minimal-rabbitmq:latest` | Oui | Courtier AMQP RabbitMQ 4.x |
| NATS | `docker pull ghcr.io/rtvkiz/minimal-nats:latest` | Non | Serveur NATS avec JetStream |
| Mosquitto | `docker pull ghcr.io/rtvkiz/minimal-mosquitto:latest` | Non | Courtier MQTT Eclipse Mosquitto (EPL-2.0/EDL-1.0) |
| | | **Serveurs web & proxys** | |
| Nginx | `docker pull ghcr.io/rtvkiz/minimal-nginx:latest` | Non | Proxy inverse, fichiers statiques |
| HTTPD | `docker pull ghcr.io/rtvkiz/minimal-httpd:latest` | Peut-être* | Serveur web Apache |
| Caddy | `docker pull ghcr.io/rtvkiz/minimal-caddy:latest` | Non | Serveur web HTTPS automatique |
| HAProxy | `docker pull ghcr.io/rtvkiz/minimal-haproxy:latest` | Non | Équilibreur de charge TCP/HTTP |
| Traefik | `docker pull ghcr.io/rtvkiz/minimal-traefik:latest` | Non | Proxy inverse cloud-native |
| Envoy | `docker pull ghcr.io/rtvkiz/minimal-envoy:latest` | Non | Proxy de service & équilibreur de charge |
| | | **Observabilité** | |
| Prometheus | `docker pull ghcr.io/rtvkiz/minimal-prometheus:latest` | Non | Collecte de métriques & alerting |
| VictoriaMetrics | `docker pull ghcr.io/rtvkiz/minimal-victoria-metrics:latest` | Non | Stockage de métriques haute performance |
| Jaeger | `docker pull ghcr.io/rtvkiz/minimal-jaeger:latest` | Non | Traçage distribué (v2) |
| Loki | `docker pull ghcr.io/rtvkiz/minimal-loki:latest` | Non | Agrégation de logs (Grafana Labs) |
| Tempo | `docker pull ghcr.io/rtvkiz/minimal-tempo:latest` | Non | Backend de traçage distribué (Grafana Labs, AGPL) |
| OTel Collector | `docker pull ghcr.io/rtvkiz/minimal-otelcol:latest` | Non | Cœur du collecteur OpenTelemetry |
| Fluent Bit | `docker pull ghcr.io/rtvkiz/minimal-fluent-bit:latest` | Non | Processeur de logs léger |
| Node Exporter | `docker pull ghcr.io/rtvkiz/minimal-node-exporter:latest` | Non | Métriques matérielles et OS de l'hôte Prometheus |
| Blackbox Exporter | `docker pull ghcr.io/rtvkiz/minimal-blackbox-exporter:latest` | Non | Sondage de points de terminaison Prometheus (HTTP/DNS/TCP/ICMP) |
| Pushgateway | `docker pull ghcr.io/rtvkiz/minimal-pushgateway:latest` | Non | Push de métriques Prometheus pour les tâches batch |
| | | **Infrastructure** | |
| CoreDNS | `docker pull ghcr.io/rtvkiz/minimal-coredns:latest` | Non | DNS par défaut de Kubernetes |
| etcd | `docker pull ghcr.io/rtvkiz/minimal-etcd:latest` | Non | Stockage clé-valeur distribué |
| OpenBao | `docker pull ghcr.io/rtvkiz/minimal-openbao:latest` | Non | Gestion de secrets (fork Vault) |
| Keycloak | `docker pull ghcr.io/rtvkiz/minimal-keycloak:latest` | Oui | Gestion des identités et des accès |
| Qdrant | `docker pull ghcr.io/rtvkiz/minimal-qdrant:latest` | Non | Base de données vectorielle pour IA/ML (Rust) |
| Registry | `docker pull ghcr.io/rtvkiz/minimal-registry:latest` | Non | Registre de distribution OCI (Docker Registry v2), construit à partir des sources |
| Consul | `docker pull ghcr.io/rtvkiz/minimal-consul:latest` | Non | Découverte de services HashiCorp Consul + KV (BUSL-1.1) |
| | | **Kubernetes & CI** | |
| Helm | `docker pull ghcr.io/rtvkiz/minimal-helm:latest` | Non | CLI Helm 3 pour le déploiement de charts Kubernetes |
| kubectl | `docker pull ghcr.io/rtvkiz/minimal-kubectl:latest` | Non | CLI kubectl pour les opérations sur les clusters Kubernetes |
| | | **Applications** | |
| Jenkins | `docker pull ghcr.io/rtvkiz/minimal-jenkins:latest` | Oui | Automatisation CI/CD |
| Gitea | `docker pull ghcr.io/rtvkiz/minimal-gitea:latest` | Oui | Service Git auto-hébergé |
| MinIO | `docker pull ghcr.io/rtvkiz/minimal-minio:latest` | Non | Stockage d'objets compatible S3 |
| Mailpit | `docker pull ghcr.io/rtvkiz/minimal-mailpit:latest` | Non | Test SMTP & email pour développeurs, construit à partir des sources |
| | | **IA / ML** | |
| CUDA Python | *désactivé* | Non | Python + CUDA 12.9 + cuDNN 9.10 (construction suspendue, code conservé) |

*\*HTTPD, Jenkins, Kafka, MySQL, OpenSearch, Gitea, Keycloak incluent un shell (`sh`/`busybox`/`bash`) via des dépendances Wolfi transitives ou parce que le point d'entrée upstream l'exige. La CI traite la présence du shell comme informative.*

</details>

## Démarrage rapide```bash
# Python app
docker run --rm -v $(pwd):/app ghcr.io/rtvkiz/minimal-python:latest /app/main.py

# Nginx reverse proxy
docker run -d -p 8080:80 ghcr.io/rtvkiz/minimal-nginx:latest

# PostgreSQL
docker run -d -p 5432:5432 -v pgdata:/var/lib/postgresql/data \
  ghcr.io/rtvkiz/minimal-postgres-slim:latest

# Redis
docker run -d -p 6379:6379 ghcr.io/rtvkiz/minimal-redis-slim:latest

# Kafka (KRaft mode — auto-initializes storage on first boot)
docker run -d -p 9092:9092 -v kafkadata:/var/kafka/data \
  ghcr.io/rtvkiz/minimal-kafka:latest
Plus docker run exemples (Node, Go, MySQL, MariaDB, Java, .NET, PHP, Rails, RabbitMQ, Gitea, …)


```bash

Node.js

docker run --rm -v $(pwd):/app -w /app ghcr.io/rtvkiz/minimal-node-slim:latest index.js

Bun

docker run --rm ghcr.io/rtvkiz/minimal-bun:latest --version

Go

docker run --rm -v $(pwd):/app -w /app ghcr.io/rtvkiz/minimal-go:latest build -o /tmp/app .

HTTPD

docker run -d -p 8080:80 ghcr.io/rtvkiz/minimal-httpd:latest

Jenkins

docker run -d -p 8080:8080 -v jenkins_home:/var/jenkins_home ghcr.io/rtvkiz/minimal-jenkins:latest

MySQL

docker run -d -p 3306:3306 -v mysqldata:/var/lib/mysql ghcr.io/rtvkiz/minimal-mysql:latest

Memcached

docker run -d -p 11211:11211 ghcr.io/rtvkiz/minimal-memcached:latest

SQLite

docker run --rm -v $(pwd):/data ghcr.io/rtvkiz/minimal-sqlite:latest /data/mydb.sqlite "SELECT sqlite_version();"

.NET

docker run --rm -v $(pwd):/app ghcr.io/rtvkiz/minimal-dotnet:latest /app/myapp.dll

Java

docker run --rm -v $(pwd):/app ghcr.io/rtvkiz/minimal-java:latest -jar /app/myapp.jar

PHP

docker run --rm -v $(pwd):/app ghcr.io/rtvkiz/minimal-php:latest /app/index.php

Rails

docker run --rm -v $(pwd):/app ghcr.io/rtvkiz/minimal-rails:latest -e "require 'rails'; puts Rails.version"

RabbitMQ

docker run -d -p 5672:5672 -v rabbitmqdata:/var/lib/rabbitmq ghcr.io/rtvkiz/minimal-rabbitmq:latest

Gitea

docker run -d -p 3000:3000 -v giteadata:/data/gitea ghcr.io/rtvkiz/minimal-gitea:latest

root@kitploit:~
</details>

## Utilisation en production

**Épinglez des tags de version immuables.** Chaque image est publiée avec deux tags :

| Étiquette | Format | Exemple | Modifiable |
|---|---|---|---|
| Version | `VERSION-rEPOCH` | `ghcr.io/rtvkiz/minimal-redis-slim:8.4.1-r0` | Non |
| Dernière | `latest` | `ghcr.io/rtvkiz/minimal-redis-slim:latest` | Oui |

### Variantes Dev (`:latest-dev`)

La plupart des images publient un compagnon `-dev` construit à partir de la **même source que la prod** — même version d’exécution, même ensemble de paquets choisis — plus un shell, un gestionnaire de paquets, une chaîne de compilation et des outils de débogage adaptés à l’image. Destiné aux étapes de construction CI et au débogage dans le pod, **pas pour le déploiement en production**.

Utilisation multi‑étapes typique :```dockerfile
FROM ghcr.io/rtvkiz/minimal-ruby:latest-dev AS build
WORKDIR /work
COPY Gemfile Gemfile.lock ./
RUN bundle install

FROM ghcr.io/rtvkiz/minimal-ruby:latest
COPY --from=build /work /work

Pour obtenir un shell interactif, remplacez le point d'entrée (les images de développement conservent le point d'entrée de production pour une compatibilité directe) :```bash docker run -it --entrypoint /bin/sh ghcr.io/rtvkiz/minimal-:latest-dev docker run -it --entrypoint /bin/bash ghcr.io/rtvkiz/minimal-:latest-dev

root@kitploit:~
Les variantes Dev partagent la signature, la SBOM et le pipeline de provenance SLSA de l'image de production. Elles ne sont **pas suivies sur le tableau de bord CVE public** — elles offrent intentionnellement une surface d'attaque plus large. Voir [`.github/SECURITY.md`](https://github.com/rtvkiz/minimal/blob/main/.github/SECURITY.md#dev-variants--dev-tags) pour la politique et [`docs/dev-variants/CONVENTIONS.md`](https://github.com/rtvkiz/minimal/blob/main/docs/dev-variants/CONVENTIONS.md) pour les règles de composition des paquets.

**Fourni aujourd'hui :** 57 variantes Dev sur 57 — chaque image du catalogue fournit désormais un compagnon `:latest-dev` construit à partir de la même source que la version de production.

<details>
<summary><strong>État des variantes Dev par image</strong></summary>

<br>

Légende : ✅ fournit `:latest-dev` · 🚧 en cours · 📝 planifié

Les catégories suivent les trois modèles dans [`docs/dev-variants/templates/`](https://github.com/rtvkiz/minimal/blob/main/docs/dev-variants/templates) (runtime / démon / serveur). La colonne « Référence » indique où nous reflétons l'ensemble de paquets public `<image>-public/devConfigs` de Chainguard ; **interne** signifie que Chainguard fournit une image réservée à l'Enterprise et que nous avons conçu nous-mêmes la composition Dev.

| Image | Catégorie | Référence | Statut |
|---|---|---|---|
| ruby | runtime | Chainguard `ruby-public` | ✅ |
| python | runtime | Chainguard `python-public` | ✅ |
| node-slim | runtime | Chainguard `node-public` | ✅ |
| go | runtime | Chainguard `go-public` | ✅ |
| java | runtime | Chainguard `jdk-public` | ✅ |
| dotnet | runtime | Chainguard `dotnet-runtime-10-public` | ✅ |
| php | runtime | interne (composant reporté — voir la PR) | ✅ |
| rails | runtime | interne (dérivé de ruby) | ✅ |
| bun | runtime | interne | ✅ |
| deno | runtime | interne | ✅ |
| postgres-slim | démon | Chainguard `postgres-public` | ✅ |
| mariadb | démon | Chainguard `mariadb-public` | ✅ |
| mysql | démon | interne | ✅ |
| redis-slim | démon | Chainguard `redis-public` | ✅ |
| valkey | démon | Chainguard `valkey-public` | ✅ |
| memcached | démon | interne | ✅ |
| sqlite | démon | interne | ✅ |
| opensearch | démon | interne | ✅ |
| kafka | démon | interne | ✅ |
| rabbitmq | démon | interne | ✅ |
| nats | démon | interne | ✅ |
| etcd | démon | interne | ✅ |
| qdrant | démon | interne | ✅ |
| nginx | serveur | Chainguard `nginx-public` | ✅ |
| haproxy | serveur | Chainguard `haproxy-public` | ✅ |
| minio | serveur | Chainguard `minio-client-public` (serveur en interne) | ✅ |
| httpd | serveur | interne | ✅ |
| caddy | serveur | interne | ✅ |
| traefik | serveur | interne | ✅ |
| envoy | serveur | interne | ✅ |
| prometheus | serveur | interne | ✅ |
| victoria-metrics | serveur | interne | ✅ |
| jaeger | serveur | interne | ✅ |
| otelcol | serveur | interne | ✅ |
| loki | serveur | interne | ✅ |
| fluent-bit | serveur | interne | ✅ |
| node-exporter | serveur | interne | ✅ |
| blackbox-exporter | serveur | interne | ✅ |
| pushgateway | serveur | interne | ✅ |
| coredns | serveur | interne | ✅ |
| gitea | serveur | interne | ✅ |
| jenkins | serveur | interne | ✅ |
| keycloak | serveur | interne | ✅ |
| openbao | serveur | interne | ✅ |
| registry | serveur | Chainguard `registry-public` | ✅ |
| mailpit | serveur | interne (Chainguard ne fournit pas de mailpit public) | ✅ |
| consul | serveur | interne (Chainguard ne fournit pas de consul public ; BUSL-1.1) | ✅ |
| tempo | serveur | interne (Chainguard ne fournit pas de tempo public ; AGPL-3.0) | ✅ |
| mosquitto | démon | interne (Chainguard ne fournit pas de mosquitto public ; EPL-2.0/EDL-1.0) | ✅ |

</details>```dockerfile
# Production Dockerfile — pin by version tag, ideally by digest
FROM ghcr.io/rtvkiz/minimal-go:1.26.0-r0 AS build
WORKDIR /src
COPY . .
RUN go build -o /out/app

FROM ghcr.io/rtvkiz/minimal-python:3.14.0-r0
COPY --from=build /out/app /usr/bin/app
ENTRYPOINT ["/usr/bin/app"]

Appliquer la signature + la provenance dans Kubernetes avec sigstore-policy-controller ou Kyverno :```yaml

Kyverno ClusterPolicy — only allow signed minimal-* images

apiVersion: kyverno.io/v1 kind: ClusterPolicy metadata: name: verify-minimal-images spec: validationFailureAction: Enforce rules: - name: check-signature match: any: - resources: kinds: [Pod] verifyImages: - imageReferences: - "ghcr.io/rtvkiz/minimal-" attestors: - entries: - keyless: subject: "https://github.com/rtvkiz/minimal/" issuer: "https://token.actions.githubusercontent.com"

root@kitploit:~
Le suffixe `-r0` correspond au numéro de révision — il revient à `r0` à chaque augmentation de version amont, puis s'incrémente (`r1`, `r2`, …) pour les reconstructions de la même version amont (par exemple, correctifs de dépendances). Les anciennes étiquettes de version sont conservées lors des reconstructions.

## Pipeline de construction

<details>
<summary><strong>Diagramme du pipeline</strong></summary>

<br>```
┌─────────────────────────────────────────────────────────────────────────────┐
│                            BUILD PIPELINE                                   │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  Signing Keys:                                                              │
│  ┌─────────────────────────────────────────────────────────────────────┐    │
│  │  PRs: keygen job (ephemeral) │ Main: repository secrets (persistent)│    │
│  └─────────────────────────────────────────────────────────────────────┘    │
│                              │                                              │
│                              ▼                                              │
│  ┌─────────────────────────────┐    ┌─────────────────────────────────────┐ │
│  │  melange-build              │    │      build-apko                     │ │
│  │  Native ARM64 runners       │    │      Wolfi pre-built packages       │ │
│  │  ┌────────┐  ┌────────────┐ │    │  ┌─────────┐     ┌───────────────┐  │ │
│  │  │ x86_64 │  │  aarch64   │ │    │  │  Wolfi  │────►│ apko publish  │  │ │
│  │  │ ubuntu │  │ ubuntu-arm │ │    │  │ packages│     │ (multi-arch)  │  │ │
│  │  └────┬───┘  └─────┬──────┘ │    │  └─────────┘     └───────┬───────┘  │ │
│  │       └─────┬──────┘        │    │                          │          │ │
│  │             ▼               │    └──────────────────────────│──────────┘ │
│  │     ┌──────────────┐        │                               │            │
│  │     │   artifacts  │        │                               │            │
│  │     │ (x86+arm64)  │        │                               │            │
│  │     └──────┬───────┘        │                               │            │
│  └────────────│────────────────┘                               │            │
│               ▼                                                │            │
│  ┌─────────────────────────────┐                               │            │
│  │  build-melange              │                               │            │
│  │  ┌─────────┐ ┌────────────┐ │                               │            │
│  │  │  merge  │►│   apko     │─┼───────────────────────────────┤            │
│  │  │ packages│ │  publish   │ │                               │            │
│  │  └─────────┘ └────────────┘ │                               │            │
│  └─────────────────────────────┘                               │            │
│                                                                ▼            │
│  ┌──────────────────────────────────────────────────────────────────────┐   │
│  │                     Verification & Attestation                       │   │
│  │  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌─────────────────────┐   │   │
│  │  │  Grype   │─►│   Test   │─►│  cosign  │─►│  SBOM + SLSA L3     │   │   │
│  │  │ CVE scan │  │  image   │  │   sign   │  │    attestations     │   │   │
│  │  └──────────┘  └──────────┘  └──────────┘  └─────────────────────┘   │   │
│  └──────────────────────────────────────────────────────────────────────┘   │
│                                                                             │
│  Note: PRs build and test but do not publish. Only main branch publishes.   │
└─────────────────────────────────────────────────────────────────────────────┘

Planifier les mises à jour

DéclencheurQuandObjectif
PlanifiéToutes les 6 heuresRécupérer les derniers correctifs CVE de Wolfi
PushLors d'un merge vers mainDéployer les changements de configuration
ManuelDispatch de workflowReconstructions d'urgence

Les résultats des analyses de vulnérabilités apparaissent dans le catalogue en direct, le résumé du job et l'onglet GitHub Security.

Suivi automatisé des sources amont

Les images construites à partir de sources sont suivies par des workflows dédiés qui vérifient les sources amont quotidiennement et ouvrent des PRs :

Workflows de mise à jour par image (21 au total)
WorkflowSurveilleCe qu'il fait
update-jenkins.ymlVersions LTS de JenkinsMet à jour la version dans la configuration melange, le Makefile, build.yml
update-redis.ymlVersions GitHub de RedisMet à jour la version et le SHA256
update-mysql.ymlTags GitHub MySQL LTS (8.4.x)Met à jour la version et le SHA256
update-memcached.ymlVersions GitHub de MemcachedMet à jour la version et le SHA256
update-kafka.ymlTags GitHub Apache Kafka 4.xMet à jour la version et le SHA512
update-php.ymlAPI de versions de php.netMet à jour la version et le SHA256 ; ouvre un ticket pour les nouvelles séries mineures/majeures
update-rails.ymlAPI RubyGems + Tags GitHub RubyMet à jour indépendamment les versions du gem Rails et de Ruby
update-rabbitmq.ymlVersions GitHub de RabbitMQMet à jour la version et le SHA256
update-minio.ymlVersions GitHub de MinIOMet à jour le tag de release, la version basée sur la date et le SHA256
update-victoria-metrics.ymlVersions GitHub de VictoriaMetricsMet à jour la version et le SHA256
update-jaeger.ymlVersions GitHub de Jaeger v2.xMet à jour la version et le SHA256 ; prévient en cas de changement de version majeure
update-otelcol.ymlVersions stables de l'OTel CollectorMet à jour la version et le SHA256 ; ignore les pré‑versions
update-qdrant.ymlVersions GitHub de Qdrant v1.xMet à jour la version et le SHA256
update-etcd.ymlVersions GitHub d'etcd v3.xMet à jour la version et le SHA256
update-opensearch.ymlVersions GitHub d'OpenSearch 3.xMet à jour la version dans le Makefile et le README

Les mises à jour de correctifs sont automatiquement PRées et validées par la CI. Les montées de versions mineures/majeures créent un ticket GitHub avec une checklist de mise à niveau manuelle.

Spécifications des images (versions, utilisateurs, points d'entrée)
ImageVersionUtilisateurPoint d'entréeRépertoire de travail
Python3.14.xnonroot (65532)/usr/bin/python3/app
Node.js-slim25.xnonroot (65532)/usr/bin/dumb-init -- /usr/bin/node/app
Bunlatestnonroot (65532)/usr/bin/bun/app
Go1.26.xnonroot (65532)/usr/bin/go/app
Nginxmainlinenginx (65532)/usr/sbin/nginx -g "daemon off;"/
HTTPD2.4.xwww-data (65532)/usr/sbin/httpd -DFOREGROUND/var/www/localhost/htdocs
Jenkins2.555.x LTSjenkins (1000)tini -- java -jar jenkins.war/var/jenkins_home
Redis8.6.xredis (65532)/usr/bin/redis-server/
MySQL8.4.xmysql (65532)/usr/bin/docker-entrypoint.sh/
MariaDB11.4.xmariadb (65532)/usr/bin/mariadbd/var/lib/mysql
Memcached1.6.xmemcached (65532)/usr/bin/memcached/
PostgreSQL18.xpostgres (70)/usr/bin/postgres/
SQLite3.51.xnonroot (65532)/usr/bin/sqlite3/data
.NET Runtime10.x

Construire localement```bash

Prerequisites

go install chainguard.dev/apko@latest go install chainguard.dev/melange@latest brew install anchore/grype/grype

Build & test a specific image

make python make test-python

Build everything

make build

Scan for CVEs

make scan

root@kitploit:~
See the [Makefile](https://github.com/rtvkiz/minimal/blob/main/Makefile) for the full target list.

## Structure du projet

<details>
<summary><strong>Organisation du dépôt</strong></summary>

<br>```
minimal/
├── <image>/
│   ├── apko/<name>.yaml          # final image config
│   ├── melange.yaml              # source build (optional)
│   └── test.sh                   # smoke test
├── .github/
│   ├── SECURITY.md               # disclosure policy + verification recipes
│   └── workflows/
│       ├── build.yml             # main CI pipeline (6h rebuilds)
│       ├── patch-go-deps.yml     # daily Go transitive CVE patching
│       ├── update-<image>.yml    # per-image upstream version tracking
│       └── update-wolfi-packages.yml
├── Makefile
├── README.md
├── CONTRIBUTING.md
└── LICENSE

Statut et feuille de route

Récemment mis en œuvre :

  • Signatures sans clé Cosign sur chaque image.
  • SBOM SPDX joints en tant qu'attestations in-toto, vérifiables avec cosign verify-attestation.
  • Preuve de provenance SLSA v1.0, vérifiable avec gh attestation verify.
  • Un tableau de bord public des CVE avec des répartitions par image.
  • Une cadence de reconstruction de six heures, plus un correctif quotidien des CVE transitives de Go.

À venir :

  • Déclarations VEX pour les CVE qui ne sont pas réellement exploitables dans nos images, afin que le tableau de bord cesse d'afficher du bruit.
  • Consolidation des workflows de mise à jour par image en un seul travail piloté par matrice.
  • Images niche IA/ML (variantes Python compatibles CUDA) — il y a un fil HN où cela a été évoqué et cela semble valoir la peine d'être exploré.

Ce que ce projet n'est pas :

  • Maintenu en solo, donc pas de SLA de fournisseur ni d'astreinte.
  • Pas accrédité FedRAMP / FIPS / STIG. La provenance vérifiable et les SBOM aident pour les audits, mais ne remplacent pas les formalités administratives.

Contribuer

Les PR sont les bienvenues. CONTRIBUTING.md contient la configuration de construction, les conventions d'image et la liste de contrôle de validation locale que j'exécute avant de pousser.

Si vous trouvez un problème de sécurité, veuillez utiliser le rapport de vulnérabilité privé de GitHub plutôt que d'ouvrir un problème public. La politique de divulgation et le calendrier de réponse se trouvent dans .github/SECURITY.md.

Licence

MIT — voir LICENSE.

Les images de conteneurs incluent des paquets provenant de Wolfi et d'autres sources, chacun avec ses propres licences (Apache-2.0, MIT, GPL, LGPL, BSD, etc.). Les informations complètes sur la licence se trouvent dans le SBOM de chaque image :```bash cosign download sbom ghcr.io/rtvkiz/minimal-python:latest | jq '.packages[].licenseConcluded'

root@kitploit:~
update-gitea.yml
Tags GitHub de Gitea v1.x
Met à jour la version et le SHA256
update-coredns.ymlTags GitHub de CoreDNS v1.xMet à jour la version et le SHA256
update-openbao.ymlTags GitHub d'OpenBao v2.xMet à jour la version et le SHA256
update-loki.ymlTags GitHub de Loki v3.xMet à jour la version et le SHA256
update-fluent-bit.ymlTags GitHub de Fluent Bit v5.xMet à jour la version et le SHA256
update-keycloak.ymlTags GitHub de Keycloak 26.xMet à jour la version et le SHA256
update-wolfi-packages.ymlAPKINDEX de WolfiDétecte les nouvelles versions de Python, Node, Go, .NET, Java, PostgreSQL, Deno
nonroot (65532)
/usr/bin/dotnet
/app
Java26.xnonroot (65532)/usr/bin/java/app
Ruby4.0.xnonroot (65532)/usr/bin/ruby/work
PHP8.5.xnonroot (65532)/usr/bin/php/app
RailsRuby 4.0.x + Rails 8.1.xnonroot (65532)/usr/bin/ruby/app
Kafka4.2.xkafka (65532)/usr/bin/kafka-entrypoint.sh/
RabbitMQ4.3.xrabbitmq (65532)/opt/rabbitmq/sbin/rabbitmq-server/
NATSlatestnonroot (65532)/usr/bin/nats-server/
Valkeylatestnonroot (65532)/usr/bin/valkey-server/
MinIORELEASE.2025-10-15minio (65532)/usr/bin/minio server --console-address :9001 /data/data
OpenSearch3.7.0opensearch (65532)/usr/share/opensearch/opensearch-docker-entrypoint.sh/usr/share/opensearch/data
etcd3.6.xnonroot (65532)/usr/bin/etcd/var/lib/etcd
VictoriaMetrics1.142.xnonroot (65532)/usr/bin/victoria-metrics/
Jaeger2.18.xnonroot (65532)/usr/bin/jaeger/
OTel Collector0.151.xnonroot (65532)/usr/bin/otelcol/
Qdrant1.17.xnonroot (65532)/usr/bin/qdrant/qdrant
Deno2.xnonroot (65532)/usr/bin/deno/app
Gitea1.26.xgitea (65532)/usr/bin/gitea web --config /etc/gitea/app.ini/var/lib/gitea
CoreDNS1.14.xnonroot (65532)/usr/bin/coredns/
OpenBao2.5.xopenbao (65532)/usr/bin/bao server/openbao/data
Keycloak26.6.xkeycloak (65532)/opt/keycloak/bin/kc.sh start-dev/opt/keycloak/data
Loki3.6.xloki (65532)/usr/bin/loki/loki
Fluent Bit5.0.xnonroot (65532)/usr/bin/fluent-bit/