Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
minimal — Colección de imágenes de contenedor mínimas y endurecidas contra CVE | Kitploit
Herramientas/GitHubGitHub/rtvkiz/minimal
Escáneres de VulnerabilidadesSeguridad de ContenedoresAuditoría de ConfiguraciónSeguridad en la NubeDevSecOpsSeguridad de Cadena de Suministro
GitHubrtvkiz/minimal

minimal

Colección de imágenes de contenedor mínimas y endurecidas contra CVE

Ver Repositorio
513213hace 14h 28mRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

minimal — imágenes de contenedor minimalistas y endurecidas

Imágenes de contenedor pequeñas, reforzadas, gratuitas y con licencia MIT.
Construidas desde el código fuente con apko de Chainguard y paquetes Wolfi, reconstruidas cada seis horas.
Cada imagen está firmada con cosign, incluye una atestación SPDX SBOM y cuenta con una procedencia de compilación SLSA Nivel 3. Puedes verificar todo sin necesidad de una cuenta.

🌐  Explora el catálogo completo en minimalcontainers.com  →

Estado de compilación Catálogo de imágenes Licencia: MIT SLSA Nivel 3 Imágenes: 57 Arquitecturas

Catálogo de imágenes · Verificar una imagen · ·

Descargar herramienta
Todas las 57 imágenes
Discusión en HN

Descargar y verificar en 30 segundos

El objetivo de estas imágenes es que no tienes que confiar en mí. Descarga una y luego comprueba la procedencia tú mismo:```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:~
Más recetas de verificación (firma cosign, SBOM, procedencia SLSA) viven en [`.github/SECURITY.md`](https://github.com/rtvkiz/minimal/blob/main/.github/SECURITY.md).

## Cómo `minimal` es diferente

|  | minimal | Chainguard | Docker Hardened | Minimus / RapidFort |
|---|:---:|:---:|:---:|:---:|
| **Licencia** | MIT | Propietario | Apache-2.0 | Propietario |
| **Costo** | $0 | ~$30k/imagen/año | Gratuito + soporte de pago | Llamada comercial |
| **Autenticación para pull** | No | Sí | Sí | Sí |
| **Límites de tasa** | Ninguno | Sí | Sí | Sí |
| **Recetas de compilación públicas** | Sí, cada `melange.yaml` | No | Sí, Dockerfiles | No |
| **Firma Cosign + SBOM + SLSA L3** | Sí | Sí | Sí | Sí |
| **SLA del proveedor, FedRAMP/STIG** | No | Sí (pago) | Sí (pago) | Sí (pago) |

Opta por `minimal` si deseas imágenes endurecidas sin pagar ni registrarte, si deseas leer cada receta de compilación de principio a fin, o si deseas una plantilla funcional para bifurcar en tu propio catálogo interno.

Probablemente no sea la opción adecuada si necesitas un contrato con un proveedor, papeleo de acreditación FedRAMP o STIG, o más de mil imágenes desde el primer día — esas son cosas reales que este proyecto no intenta resolver.

## Lo que incluye cada imagen

- Una firma sin clave de cosign, verificable contra el registro de transparencia público de Rekor.
- Un SBOM SPDX adjunto como una atestación in-toto — cada paquete, versión y licencia.
- Procedencia de compilación SLSA v1.0 — prueba criptográfica de qué flujo de trabajo, qué commit y qué runner produjo la imagen.
- Un escaneo diario de Grype, con resultados en el [catálogo público](https://minimalcontainers.com) y en la pestaña de Seguridad de GitHub.
- Compilaciones nativas `linux/amd64` y `linux/arm64`.
- Un usuario no root por defecto (UID 65532), a menos que el upstream insista en lo contrario.
- Sin shell cuando sea posible — la mayoría de las imágenes no incluyen `/bin/sh`.
- Una cadencia de reconstrucción de seis horas, para que los parches de CVE de Wolfi lleguen en horas, no en días.

## Imágenes disponibles — 57 en total

| Categoría | Cantidad | Destacados |
|---|---|---|
| **Lenguajes y tiempos de ejecución** | 9 | python, node-slim, bun, go, java, ruby, php, dotnet, deno |
| **Bases de datos** | 5 | mysql, mariadb, postgres-slim, sqlite, opensearch |
| **Cachés, colas, mensajería** | 7 | redis-slim, valkey, memcached, kafka, rabbitmq, nats, mosquitto |
| **Servidores web y proxies** | 6 | nginx, httpd, caddy, haproxy, traefik, envoy |
| **Observabilidad** | 14 | prometheus, alertmanager, victoria-metrics, thanos, mimir, jaeger, loki, tempo, otelcol, fluent-bit, telegraf, node-exporter, blackbox-exporter, pushgateway |
| **Infraestructura** | 7 | coredns, etcd, openbao, keycloak, qdrant, registry, consul |
| **Kubernetes, CI e IaC** | 4 | helm, kubectl, opentofu, trivy |
| **Aplicaciones** | 5 | jenkins, gitea, minio, rails, mailpit |

Explora cada imagen — con escaneos de CVE en vivo, todas las etiquetas, SBOMs y procedencia de compilación — en **[minimalcontainers.com](https://minimalcontainers.com)**, o expande la lista completa de comandos de pull a continuación.

<details>
<summary><strong>Catálogo completo de imágenes con comandos de pull</strong></summary>

<br>

| Imagen | Comando de pull | Shell | Caso de uso |
|-------|--------------|-------|----------|
| | | **Lenguajes** | |
| Python | `docker pull ghcr.io/rtvkiz/minimal-python:latest` | No | Aplicaciones Python, microservicios |
| Node.js-slim | `docker pull ghcr.io/rtvkiz/minimal-node-slim:latest` | No | Aplicaciones Node.js, JavaScript |
| Bun | `docker pull ghcr.io/rtvkiz/minimal-bun:latest` | No | Entorno de ejecución rápido para JavaScript/TypeScript |
| Go | `docker pull ghcr.io/rtvkiz/minimal-go:latest` | No | Desarrollo de Go, compilaciones CGO |
| .NET Runtime | `docker pull ghcr.io/rtvkiz/minimal-dotnet:latest` | No | Entorno de ejecución .NET 10 para aplicaciones |
| Java | `docker pull ghcr.io/rtvkiz/minimal-java:latest` | No | OpenJDK 26 JRE para aplicaciones Java |
| Ruby | `docker pull ghcr.io/rtvkiz/minimal-ruby:latest` | No | Entorno de ejecución Ruby 4.0 (compilado desde fuente) |
| PHP | `docker pull ghcr.io/rtvkiz/minimal-php:latest` | No | PHP 8.5 CLI (compilado desde fuente) |
| Rails | `docker pull ghcr.io/rtvkiz/minimal-rails:latest` | No | Ruby 4.0 + Rails 8.1 (compilado desde fuente) |
| Deno | `docker pull ghcr.io/rtvkiz/minimal-deno:latest` | No | Entorno de ejecución seguro para TypeScript/JavaScript |
| | | **Bases de datos** | |
| MySQL | `docker pull ghcr.io/rtvkiz/minimal-mysql:latest` | Sí | MySQL LTS 8.4.x, compilado desde fuente |
| MariaDB | `docker pull ghcr.io/rtvkiz/minimal-mariadb:latest` | Sí | MariaDB LTS 11.4.x, compilado desde fuente |
| PostgreSQL-slim | `docker pull ghcr.io/rtvkiz/minimal-postgres-slim:latest` | No | Base de datos relacional |
| SQLite | `docker pull ghcr.io/rtvkiz/minimal-sqlite:latest` | No | CLI de base de datos SQL embebida |
| OpenSearch | `docker pull ghcr.io/rtvkiz/minimal-opensearch:latest` | No* | OpenSearch 3.x — búsqueda y análisis |
| | | **Cachés, Colas, Mensajería** | |
| Redis-slim | `docker pull ghcr.io/rtvkiz/minimal-redis-slim:latest` | No | Almacén de datos en memoria |
| Memcached | `docker pull ghcr.io/rtvkiz/minimal-memcached:latest` | No | Caché en memoria (compilado desde fuente) |
| Valkey | `docker pull ghcr.io/rtvkiz/minimal-valkey:latest` | No | Fork de Redis con licencia BSD (LF) |
| Kafka | `docker pull ghcr.io/rtvkiz/minimal-kafka:latest` | Sí | Apache Kafka 4.x, modo KRaft |
| RabbitMQ | `docker pull ghcr.io/rtvkiz/minimal-rabbitmq:latest` | Sí | Broker AMQP RabbitMQ 4.x |
| NATS | `docker pull ghcr.io/rtvkiz/minimal-nats:latest` | No | Servidor NATS con JetStream |
| Mosquitto | `docker pull ghcr.io/rtvkiz/minimal-mosquitto:latest` | No | Broker MQTT Eclipse Mosquitto (EPL-2.0/EDL-1.0) |
| | | **Servidores web y proxies** | |
| Nginx | `docker pull ghcr.io/rtvkiz/minimal-nginx:latest` | No | Proxy inverso, archivos estáticos |
| HTTPD | `docker pull ghcr.io/rtvkiz/minimal-httpd:latest` | Quizás* | Servidor web Apache |
| Caddy | `docker pull ghcr.io/rtvkiz/minimal-caddy:latest` | No | Servidor web HTTPS automático |
| HAProxy | `docker pull ghcr.io/rtvkiz/minimal-haproxy:latest` | No | Balanceador de carga TCP/HTTP |
| Traefik | `docker pull ghcr.io/rtvkiz/minimal-traefik:latest` | No | Proxy inverso nativo de la nube |
| Envoy | `docker pull ghcr.io/rtvkiz/minimal-envoy:latest` | No | Proxy de servicio y balanceador de carga |
| | | **Observabilidad** | |
| Prometheus | `docker pull ghcr.io/rtvkiz/minimal-prometheus:latest` | No | Recolección de métricas y alertas |
| VictoriaMetrics | `docker pull ghcr.io/rtvkiz/minimal-victoria-metrics:latest` | No | Almacenamiento de métricas de alto rendimiento |
| Jaeger | `docker pull ghcr.io/rtvkiz/minimal-jaeger:latest` | No | Trazado distribuido (v2) |
| Loki | `docker pull ghcr.io/rtvkiz/minimal-loki:latest` | No | Agregación de registros (Grafana Labs) |
| Tempo | `docker pull ghcr.io/rtvkiz/minimal-tempo:latest` | No | Backend de trazado distribuido (Grafana Labs, AGPL) |
| OTel Collector | `docker pull ghcr.io/rtvkiz/minimal-otelcol:latest` | No | Núcleo del colector OpenTelemetry |
| Fluent Bit | `docker pull ghcr.io/rtvkiz/minimal-fluent-bit:latest` | No | Procesador de registros ligero |
| Node Exporter | `docker pull ghcr.io/rtvkiz/minimal-node-exporter:latest` | No | Métricas de hardware y SO del host de Prometheus |
| Blackbox Exporter | `docker pull ghcr.io/rtvkiz/minimal-blackbox-exporter:latest` | No | Sondeo de endpoints de Prometheus (HTTP/DNS/TCP/ICMP) |
| Pushgateway | `docker pull ghcr.io/rtvkiz/minimal-pushgateway:latest` | No | Push de métricas de Prometheus para trabajos por lotes |
| | | **Infraestructura** | |
| CoreDNS | `docker pull ghcr.io/rtvkiz/minimal-coredns:latest` | No | DNS predeterminado de Kubernetes |
| etcd | `docker pull ghcr.io/rtvkiz/minimal-etcd:latest` | No | Almacén clave-valor distribuido |
| OpenBao | `docker pull ghcr.io/rtvkiz/minimal-openbao:latest` | No | Gestión de secretos (fork de Vault) |
| Keycloak | `docker pull ghcr.io/rtvkiz/minimal-keycloak:latest` | Sí | Gestión de identidad y acceso |
| Qdrant | `docker pull ghcr.io/rtvkiz/minimal-qdrant:latest` | No | Base de datos vectorial para IA/ML (Rust) |
| Registry | `docker pull ghcr.io/rtvkiz/minimal-registry:latest` | No | Registro de distribución OCI (Docker Registry v2), compilado desde fuente |
| Consul | `docker pull ghcr.io/rtvkiz/minimal-consul:latest` | No | Descubrimiento de servicios de HashiCorp Consul + KV (BUSL-1.1) |
| | | **Kubernetes y CI** | |
| Helm | `docker pull ghcr.io/rtvkiz/minimal-helm:latest` | No | CLI de Helm 3 para despliegue de charts de Kubernetes |
| kubectl | `docker pull ghcr.io/rtvkiz/minimal-kubectl:latest` | No | CLI de kubectl para operaciones de clúster Kubernetes |
| | | **Aplicaciones** | |
| Jenkins | `docker pull ghcr.io/rtvkiz/minimal-jenkins:latest` | Sí | Automatización de CI/CD |
| Gitea | `docker pull ghcr.io/rtvkiz/minimal-gitea:latest` | Sí | Servicio Git auto-alojado |
| MinIO | `docker pull ghcr.io/rtvkiz/minimal-minio:latest` | No | Almacenamiento de objetos compatible con S3 |
| Mailpit | `docker pull ghcr.io/rtvkiz/minimal-mailpit:latest` | No | Pruebas de SMTP y correo electrónico para desarrolladores, compilado desde fuente |
| | | **IA / ML** | |
| CUDA Python | *deshabilitado* | No | Python + CUDA 12.9 + cuDNN 9.10 (compilación en pausa, código retenido) |

*\*HTTPD, Jenkins, Kafka, MySQL, OpenSearch, Gitea, Keycloak incluyen shell (`sh`/`busybox`/`bash`) a través de dependencias transitivas de Wolfi o porque el punto de entrada (entrypoint) del upstream lo requiere. CI trata la presencia de shell como informativo.*

</details>

## Inicio rápido```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
Más ejemplos de docker run (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>

## Uso en producción

**Fija etiquetas de versión inmutables.** Cada imagen se publica con dos etiquetas:

| Etiqueta | Formato | Ejemplo | Mutable |
|---|---|---|---|
| Versión | `VERSION-rEPOCH` | `ghcr.io/rtvkiz/minimal-redis-slim:8.4.1-r0` | No |
| Latest | `latest` | `ghcr.io/rtvkiz/minimal-redis-slim:latest` | Sí |

### Variantes de desarrollo (`:latest-dev`)

La mayoría de las imágenes publican un acompañante `-dev` construido a partir de la **misma fuente que la versión de producción** — misma versión de runtime, mismo conjunto de paquetes seleccionados — además de un shell, gestor de paquetes, cadena de herramientas de compilación y herramientas de depuración adecuadas para la imagen. Diseñado para etapas de compilación de CI y depuración en pods, **no para implementación en producción**.

Uso típico en múltiples etapas:```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

Para obtener un shell interactivo, sobrescribe el entrypoint (las imágenes dev conservan el entrypoint de producción para compatibilidad de inserción directa):```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:~
Las variantes de desarrollo comparten la firma, la SBOM y la cadena de procedencia SLSA de la imagen de producción. No están **registradas en el panel público de CVE** — expresamente tienen una superficie de ataque mayor. Consulte [`.github/SECURITY.md`](https://github.com/rtvkiz/minimal/blob/main/.github/SECURITY.md#dev-variants--dev-tags) para la política y [`docs/dev-variants/CONVENTIONS.md`](https://github.com/rtvkiz/minimal/blob/main/docs/dev-variants/CONVENTIONS.md) para las reglas de composición de paquetes.

**Envío hoy:** 57 de 57 variantes de desarrollo — cada imagen del catálogo ahora incluye un acompañante `:latest-dev` construido desde la misma fuente que la de producción.

<details>
<summary><strong>Estado de variante de desarrollo por imagen</strong></summary>

<br>

Leyenda: ✅ con envío de `:latest-dev` · 🚧 en progreso · 📝 planificado

Las categorías siguen las tres plantillas en [`docs/dev-variants/templates/`](https://github.com/rtvkiz/minimal/blob/main/docs/dev-variants/templates) (runtime / daemon / server). La columna "Referencia" muestra dónde reflejamos el conjunto de paquetes públicos de Chainguard `<image>-public/devConfigs`; **interno** significa que Chainguard envía una imagen solo para Enterprise y nosotros diseñamos la composición de desarrollo internamente.

| Imagen | Categoría | Referencia | Estado |
|---|---|---|---|
| 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 | interno (composer diferido — ver PR) | ✅ |
| rails | runtime | interno (derivado de ruby) | ✅ |
| bun | runtime | interno | ✅ |
| deno | runtime | interno | ✅ |
| postgres-slim | daemon | Chainguard `postgres-public` | ✅ |
| mariadb | daemon | Chainguard `mariadb-public` | ✅ |
| mysql | daemon | interno | ✅ |
| redis-slim | daemon | Chainguard `redis-public` | ✅ |
| valkey | daemon | Chainguard `valkey-public` | ✅ |
| memcached | daemon | interno | ✅ |
| sqlite | daemon | interno | ✅ |
| opensearch | daemon | interno | ✅ |
| kafka | daemon | interno | ✅ |
| rabbitmq | daemon | interno | ✅ |
| nats | daemon | interno | ✅ |
| etcd | daemon | interno | ✅ |
| qdrant | daemon | interno | ✅ |
| nginx | server | Chainguard `nginx-public` | ✅ |
| haproxy | server | Chainguard `haproxy-public` | ✅ |
| minio | server | Chainguard `minio-client-public` (server interno) | ✅ |
| httpd | server | interno | ✅ |
| caddy | server | interno | ✅ |
| traefik | server | interno | ✅ |
| envoy | server | interno | ✅ |
| prometheus | server | interno | ✅ |
| victoria-metrics | server | interno | ✅ |
| jaeger | server | interno | ✅ |
| otelcol | server | interno | ✅ |
| loki | server | interno | ✅ |
| fluent-bit | server | interno | ✅ |
| node-exporter | server | interno | ✅ |
| blackbox-exporter | server | interno | ✅ |
| pushgateway | server | interno | ✅ |
| coredns | server | interno | ✅ |
| gitea | server | interno | ✅ |
| jenkins | server | interno | ✅ |
| keycloak | server | interno | ✅ |
| openbao | server | interno | ✅ |
| registry | server | Chainguard `registry-public` | ✅ |
| mailpit | server | interno (Chainguard no envía ningún mailpit público) | ✅ |
| consul | server | interno (Chainguard no envía ningún consul público; BUSL-1.1) | ✅ |
| tempo | server | interno (Chainguard no envía ningún tempo público; AGPL-3.0) | ✅ |
| mosquitto | daemon | interno (Chainguard no envía ningún mosquitto público; 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"]

Aplicar firma + procedencia en Kubernetes con sigstore-policy-controller o 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:~
The `-r0` suffix es el número de revisión — se reinicia a `r0` en cada incremento de versión upstream, se incrementa (`r1`, `r2`, …) para reconstrucciones de la misma versión upstream (por ejemplo, parches de dependencias). Las etiquetas de versiones antiguas se conservan entre reconstrucciones.

## Pipeline de construcción

<details>
<summary><strong>Diagrama del 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.   │
└─────────────────────────────────────────────────────────────────────────────┘

Programación de actualizaciones

DisparadorCuándoPropósito
ScheduledCada 6 horasObtener los últimos parches de CVE de Wolfi
PushAl fusionar en mainImplementar cambios de configuración
ManualWorkflow dispatchReconstrucciones de emergencia

Los resultados del escaneo de vulnerabilidades aparecen en el catálogo en vivo, el resumen del trabajo y la pestaña de Seguridad de GitHub.

Seguimiento ascendente automatizado

Las imágenes compiladas desde el origen son rastreadas por flujos de trabajo dedicados que verifican el upstream diariamente y abren PRs:

Flujos de trabajo de actualización por imagen (21 en total)
Flujo de trabajoSupervisaQué hace
update-jenkins.ymlVersiones LTS de JenkinsActualiza la versión en la configuración de melange, Makefile, build.yml
update-redis.ymlLanzamientos de Redis en GitHubActualiza la versión y SHA256
update-mysql.ymlEtiquetas de GitHub de MySQL LTS (8.4.x)Actualiza la versión y SHA256
update-memcached.ymlLanzamientos de Memcached en GitHubActualiza la versión y SHA256
update-kafka.ymlEtiquetas de GitHub de Apache Kafka 4.xActualiza la versión y SHA512
update-php.ymlAPI de lanzamientos de php.netActualiza la versión y SHA256; abre un issue para nuevas series menores/principales
update-rails.ymlAPI de RubyGems + etiquetas de GitHub de RubyActualiza la gema Rails y las versiones fuente de Ruby de forma independiente
update-rabbitmq.ymlLanzamientos de RabbitMQ en GitHubActualiza la versión y SHA256
update-minio.ymlLanzamientos de MinIO en GitHubActualiza la etiqueta de lanzamiento, versión basada en fecha y SHA256
update-victoria-metrics.ymlLanzamientos de VictoriaMetrics en GitHubActualiza la versión y SHA256
update-jaeger.ymlLanzamientos de Jaeger v2.x en GitHubActualiza la versión y SHA256; advierte sobre cambios de versión principal
update-otelcol.ymlLanzamientos estables de OTel CollectorActualiza la versión y SHA256; omite prelanzamientos
update-qdrant.ymlLanzamientos de Qdrant v1.x en GitHubActualiza la versión y SHA256
update-etcd.ymlLanzamientos de etcd v3.x en GitHubActualiza la versión y SHA256
update-opensearch.ymlLanzamientos de OpenSearch 3.x en GitHubActualiza la versión en Makefile y README

Las actualizaciones de parches se auto-PR y validan por CI. Los incrementos menores/principales crean un Issue de GitHub con una lista de verificación de actualización manual.

Especificaciones de las imágenes (versiones, usuarios, puntos de entrada)
ImagenVersiónUsuarioPunto de entradaDirectorio de trabajo
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

Compilar localmente```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:~
Consulta el [Makefile](https://github.com/rtvkiz/minimal/blob/main/Makefile) para la lista completa de objetivos.

## Estructura del proyecto

<details>
<summary><strong>Estructura del repositorio</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

Estado y hoja de ruta

Recientemente implementado:

  • Firmas Cosign sin clave en cada imagen.
  • SPDX SBOMs adjuntos como atestaciones in-toto, verificables con cosign verify-attestation.
  • SLSA v1.0 prueba de procedencia, verificable con gh attestation verify.
  • Un panel público de CVE con desgloses por imagen.
  • Una cadencia de reconstrucción de seis horas, más parches diarios de CVEs transitivos de Go.

Próximamente:

  • Declaraciones VEX para CVEs que no son realmente explotables en nuestras imágenes, para que el panel deje de mostrar ruido.
  • Consolidar los flujos de trabajo de actualización por imagen en un solo trabajo basado en matrices.
  • Imágenes especializadas de IA/ML (variantes de Python con soporte CUDA) — hay un hilo en HN donde se mencionó esto y parece que vale la pena explorarlo.

Qué no es este proyecto:

  • Mantenido por una sola persona, por lo que no hay SLA del proveedor ni guardias rotativas.
  • No acreditado por FedRAMP / FIPS / STIG. La procedencia verificable y los SBOMs ayudan con las auditorías, pero no reemplazan el papeleo.

Contribuciones

Se aceptan PRs. CONTRIBUTING.md tiene la configuración de compilación, las convenciones de imágenes y la lista de verificación de validación local que ejecuto antes de subir cambios.

Si encuentra un problema de seguridad, utilice el informe privado de vulnerabilidades de GitHub en lugar de abrir un informe público. La política de divulgación y el cronograma de respuesta están en .github/SECURITY.md.

Licencia

MIT — ver LICENSE.

Las imágenes de contenedor incluyen paquetes de Wolfi y otras fuentes, cada una con sus propias licencias (Apache-2.0, MIT, GPL, LGPL, BSD, etc.). La información completa de licencias está en el SBOM de cada imagen:```bash cosign download sbom ghcr.io/rtvkiz/minimal-python:latest | jq '.packages[].licenseConcluded'

root@kitploit:~
update-gitea.ymlEtiquetas de GitHub de Gitea v1.xActualiza la versión y SHA256
update-coredns.ymlEtiquetas de GitHub de CoreDNS v1.xActualiza la versión y SHA256
update-openbao.ymlEtiquetas de GitHub de OpenBao v2.xActualiza la versión y SHA256
update-loki.ymlEtiquetas de GitHub de Loki v3.xActualiza la versión y SHA256
update-fluent-bit.ymlEtiquetas de GitHub de Fluent Bit v5.xActualiza la versión y SHA256
update-keycloak.ymlEtiquetas de GitHub de Keycloak 26.xActualiza la versión y SHA256
update-wolfi-packages.ymlAPKINDEX de WolfiDetecta nuevas versiones 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/