Chainguard Images: imágenes mínimas y firmadas

Contenedores metálicos apilados en puerto industrial representando seguridad de contenedores

Chainguard es la empresa de los creadores de Sigstore, enfocada en supply chain security práctica. Su producto principal: Chainguard Images, imágenes Docker construidas con rigor extremo — zero CVEs, SBOMs firmados, reproducible builds. Para empresas con compliance estricta o que quieren reducir superficie de ataque, son una alternativa seria a debian:latest o alpine:latest.

Qué ofrecen

Cada imagen Chainguard tiene:

  • Minimal: solo lo necesario para ejecutar la app, nada más.
  • Zero known CVEs: reconstruidas diariamente; vulnerabilidades corregidas en horas.
  • Firmadas con Sigstore: verificables.
  • SBOMs generados automáticamente, firmados.
  • Reproducible builds: hash determinista dado el mismo input.
  • Distroless opcional: variantes sin shell, sin package manager.

Estructura

Chainguard publica imágenes para decenas de lenguajes/stacks:

  • cgr.dev/chainguard/python — base Python.
  • cgr.dev/chainguard/node — Node.js.
  • cgr.dev/chainguard/go — Go.
  • cgr.dev/chainguard/nginx — Nginx.
  • cgr.dev/chainguard/postgres — PostgreSQL.
  • Muchas más.

Dos variantes típicas:

  • Runtime: para ejecutar apps (distroless, sin shell).
  • Dev: con herramientas adicionales para desarrollo/builds.

Uso: Dockerfile típico

Multi-stage build:

FROM cgr.dev/chainguard/node:latest-dev AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM cgr.dev/chainguard/node:latest
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
CMD ["node", "dist/index.js"]

Build: ~100MB runtime (vs ~200-300MB Node oficial).

Verificación con cosign

Cualquiera puede verificar:

cosign verify cgr.dev/chainguard/node:latest \
  --certificate-oidc-issuer=https://token.actions.githubusercontent.com \
  --certificate-identity-regexp='.*chainguard.*'

Reproducibilidad verificable: built by Chainguard, via their GitHub Actions.

Comparación tamaños

Tamaños orientativos:

Stack Oficial Alpine Distroless Chainguard
Node 20 1.1GB 180MB 180MB 170MB
Python 3.12 1GB 170MB 200MB 170MB
nginx 187MB 40MB 35MB
Go runtime 70MB 50MB

Tamaño similar a Distroless de Google, pero con CVE management activo y SBOMs.

Precio

Tier público:

  • Imagens gratuitas: cgr.dev/chainguard/* latest (más populares).
  • Actualizaciones diarias: sí.

Tier empresarial:

  • Versioned images: cgr.dev/chainguard/node:20 (pinned).
  • Soporte SLA.
  • Imagens custom.
  • Acceso a FIPS-certified variantes.

Pricing por imagen o por volumen.

Chainguard vs Alpine

Aspecto Chainguard Alpine
Base system Wolfi musl + BusyBox
CVE management Proactive, daily Community
SBOMs Incluidos, firmados No nativo
Compatibilidad glibc musl (puede romper)
Tamaño Similar Similar

Alpine usa musl libc que ocasionalmente causa incompatibilidades sutiles con apps diseñadas para glibc (DNS resolution quirks, locale handling). Chainguard usa Wolfi (distro propia de Chainguard) con glibc.

Chainguard vs Distroless

Google Distroless vs Chainguard:

  • Distroless: sin package manager, solo runtime.
  • Chainguard: también minimal, pero con opción -dev variant con tooling.
  • Updates: Distroless tiene pace lenta; Chainguard diaria.
  • SBOM: Chainguard de fábrica; Distroless via external tools.

Para proyectos que quieren control fino de updates y visibilidad de contenido, Chainguard gana.

Cuándo tiene sentido

  • Compliance estricta (PCI-DSS, HIPAA, FedRAMP): pipelines auditables.
  • Supply chain security como prioridad alta.
  • Reducción de CVEs como métrica ESG.
  • Producción con workloads sensibles.

Menos sentido para:

  • Proyectos personales / experimentación.
  • Apps legacy que requieren glibc-specific o package específicos no cubiertos.
  • Cuando el vendor lock-in es preocupación (aunque pueden migrar).

Limitaciones

  • Ecosistema propio: Wolfi es distro propia; menos paquetes que Debian.
  • Coste para versiones específicas.
  • Tamaño del catálogo: cubre lo popular, no todo el long tail.
  • Algunas build tools no disponibles en runtime variants.

Alternativas

  • Distroless (Google): similar minimal approach.
  • Scratch: imagen vacía para binarios Go.
  • Wolfi (Chainguard OSS): la distro base, puedes usar directamente.
  • Iron Bank (DoD): similar approach para defense.

Conclusión

Chainguard Images representan la dirección donde va el ecosistema de contenedores enterprise: minimal, firmado, actualizable, auditable. Para empresas con compliance o que valoran supply chain security serio, el investment en migrar merece la pena. El tier público gratuito permite probar sin compromiso. Contra imagenes oficiales “latest” de Docker Hub, la diferencia en CVE count y profile de riesgo es tangible. El precio para tier enterprise puede ser alto pero el coste de un incidente supply chain es mayor.

Síguenos en jacar.es para más sobre container security, supply chain y Sigstore.

Entradas relacionadas