Chainguard Images
Imágenes de contenedor mínimas con cero CVEs construidas sobre Wolfi Linux para cadenas de suministro de software seguras.
Primeros Pasos
Sección titulada «Primeros Pasos»Descargar Imágenes
Sección titulada «Descargar Imágenes»| Comando | Descripción |
|---|---|
docker pull cgr.dev/chainguard/static:latest | Descargar imagen base estática mínima |
docker pull cgr.dev/chainguard/busybox:latest | Descargar imagen busybox para depuración |
docker pull cgr.dev/chainguard/wolfi-base:latest | Descargar imagen base Wolfi con shell |
docker pull cgr.dev/chainguard/python:latest | Descargar imagen de runtime Python |
docker pull cgr.dev/chainguard/node:latest | Descargar imagen de runtime Node.js |
docker pull cgr.dev/chainguard/go:latest | Descargar imagen de compilación Go |
docker pull cgr.dev/chainguard/nginx:latest | Descargar imagen del servidor web nginx |
docker pull cgr.dev/chainguard/git:latest | Descargar imagen mínima de git |
docker pull cgr.dev/chainguard/jdk:latest | Descargar imagen de Java JDK |
docker pull cgr.dev/chainguard/rust:latest | Descargar imagen de compilación Rust |
docker pull cgr.dev/chainguard/redis:latest | Descargar imagen del servidor Redis |
docker pull cgr.dev/chainguard/postgres:latest | Descargar imagen de PostgreSQL |
docker pull cgr.dev/chainguard/curl:latest | Descargar imagen mínima de curl |
Etiquetas de Imagen
Sección titulada «Etiquetas de Imagen»| Comando | Descripción |
|---|---|
Etiqueta :latest | Compilación más reciente, lista para producción |
Etiqueta :latest-dev | Variante de desarrollo con shell y gestor de paquetes |
:latest en imágenes -dev | Incluye apk, shell y herramientas de depuración |
cgr.dev/chainguard-private/IMAGE | Registro de imágenes privado/empresarial |
Fijación por digest @sha256:abc123... | Fijar a compilación exacta de imagen para reproducibilidad |
Uso de Imágenes
Sección titulada «Uso de Imágenes»Uso Básico
Sección titulada «Uso Básico»| Comando | Descripción |
|---|---|
FROM cgr.dev/chainguard/static:latest | Usar imagen estática en Dockerfile |
FROM cgr.dev/chainguard/python:latest-dev | Usar variante dev con pip y shell |
FROM cgr.dev/chainguard/node:latest AS build | Usar como etapa de compilación |
FROM cgr.dev/chainguard/go:latest AS builder | Usar imagen Go para compilación |
docker run --rm cgr.dev/chainguard/wolfi-base sh | Ejecutar shell interactivo |
docker run --rm -p 8080:8080 cgr.dev/chainguard/nginx | Ejecutar servidor nginx |
docker run --rm cgr.dev/chainguard/python -- python -c "print('hello')" | Ejecutar una línea de Python |
Compilación Multi-Etapa en Go
Sección titulada «Compilación Multi-Etapa en Go»# Etapa de compilación
FROM cgr.dev/chainguard/go:latest AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -ldflags="-s -w" -o /server ./cmd/server
# Etapa de runtime - distroless, sin shell, sin gestor de paquetes
FROM cgr.dev/chainguard/static:latest
COPY --from=builder /server /server
EXPOSE 8080
ENTRYPOINT ["/server"]
Compilación Multi-Etapa en Python
Sección titulada «Compilación Multi-Etapa en Python»# Etapa de compilación con pip disponible
FROM cgr.dev/chainguard/python:latest-dev AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir --prefix=/install -r requirements.txt
COPY . .
# Etapa de runtime - Python mínimo, sin pip, sin shell
FROM cgr.dev/chainguard/python:latest
COPY --from=builder /install /usr/local
COPY --from=builder /app /app
WORKDIR /app
ENTRYPOINT ["python", "-m", "myapp"]
Compilación Multi-Etapa en Node.js
Sección titulada «Compilación Multi-Etapa en Node.js»# Etapa de compilación
FROM cgr.dev/chainguard/node:latest-dev AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
# Etapa de runtime
FROM cgr.dev/chainguard/node:latest
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./
EXPOSE 3000
ENTRYPOINT ["node", "dist/index.js"]
Compilación Multi-Etapa en Java
Sección titulada «Compilación Multi-Etapa en Java»# Etapa de compilación
FROM cgr.dev/chainguard/jdk:latest-dev AS builder
WORKDIR /app
COPY . .
RUN ./gradlew build --no-daemon -x test
# Etapa de runtime
FROM cgr.dev/chainguard/jre:latest
COPY --from=builder /app/build/libs/app.jar /app/app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app/app.jar"]
Descubrimiento
Sección titulada «Descubrimiento»Operaciones de Chainctl
Sección titulada «Operaciones de Chainctl»| Comando | Descripción |
|---|---|
chainctl auth login | Autenticarse con Chainguard |
chainctl auth login --headless | Iniciar sesión en entornos headless |
chainctl auth configure-docker | Configurar Docker para usar el registro de Chainguard |
chainctl images list | Listar imágenes disponibles de Chainguard |
chainctl images repos list --group=GROUP_ID | Listar repositorios de imágenes para un grupo |
chainctl images diff IMAGE1 IMAGE2 | Comparar dos versiones de imagen |
chainctl images history cgr.dev/chainguard/python | Mostrar historial de versiones de imagen |
Navegar a images.chainguard.dev | Catálogo web de todas las imágenes |
Inspección de Imágenes
Sección titulada «Inspección de Imágenes»| Comando | Descripción |
|---|---|
crane ls cgr.dev/chainguard/python | Listar etiquetas disponibles de una imagen |
crane manifest cgr.dev/chainguard/python:latest | Ver manifiesto de la imagen |
crane config cgr.dev/chainguard/python:latest | Ver configuración de la imagen |
docker inspect cgr.dev/chainguard/python:latest | Inspeccionar metadatos de la imagen |
docker history cgr.dev/chainguard/python:latest | Ver capas de la imagen |
dive cgr.dev/chainguard/python:latest | Explorar capas de la imagen interactivamente |
Verificación
Sección titulada «Verificación»Verificación de Firmas
Sección titulada «Verificación de Firmas»| Comando | Descripción |
|---|---|
cosign verify --certificate-oidc-issuer=https://token.actions.githubusercontent.com --certificate-identity-regexp='chainguard' cgr.dev/chainguard/python | Verificar firma de la imagen |
cosign verify-attestation --type spdx cgr.dev/chainguard/python | Verificar atestación SBOM |
cosign verify-attestation --type vuln cgr.dev/chainguard/python | Verificar atestación de vulnerabilidades |
cosign tree cgr.dev/chainguard/python | Ver artefactos de la cadena de suministro |
cosign verify-attestation --type slsaprovenance cgr.dev/chainguard/python | Verificar procedencia SLSA |
Ejemplo de Verificación con Cosign
Sección titulada «Ejemplo de Verificación con Cosign»# Verificar la firma de una imagen Chainguard
cosign verify \
--certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
--certificate-identity-regexp="chainguard" \
cgr.dev/chainguard/python:latest
# Verificar atestación SBOM y mostrarla
cosign verify-attestation \
--type spdx \
--certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
--certificate-identity-regexp="chainguard" \
cgr.dev/chainguard/python:latest | jq -r '.payload' | base64 -d | jq .
# Verificar atestación de escaneo de vulnerabilidades
cosign verify-attestation \
--type vuln \
--certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
--certificate-identity-regexp="chainguard" \
cgr.dev/chainguard/python:latest
Escaneo de Vulnerabilidades
Sección titulada «Escaneo de Vulnerabilidades»| Comando | Descripción |
|---|---|
grype cgr.dev/chainguard/python | Escanear imagen en busca de vulnerabilidades con Grype |
grype cgr.dev/chainguard/python --only-fixed | Mostrar solo vulnerabilidades corregibles |
trivy image cgr.dev/chainguard/python | Escanear con escáner Trivy |
trivy image --severity HIGH,CRITICAL cgr.dev/chainguard/python | Escanear solo alta/crítica |
docker scout cves cgr.dev/chainguard/python | Escanear con Docker Scout |
chainctl images vulns cgr.dev/chainguard/python | Ver vulnerabilidades conocidas vía chainctl |
Gestión de APK de Wolfi
Sección titulada «Gestión de APK de Wolfi»Operaciones de Paquetes
Sección titulada «Operaciones de Paquetes»| Comando | Descripción |
|---|---|
apk update | Actualizar índice de paquetes (en imágenes dev) |
apk add curl | Instalar un paquete |
apk add --no-cache python3 py3-pip | Instalar sin cachear índice |
apk add --virtual .build-deps gcc musl-dev | Instalar dependencias de compilación virtuales |
apk del .build-deps | Eliminar grupo de paquetes virtuales |
apk del curl | Eliminar un paquete |
apk list --installed | Listar paquetes instalados |
apk search nginx | Buscar paquetes disponibles |
apk info python3 | Mostrar detalles del paquete |
apk info -L python3 | Listar archivos de un paquete |
Construcción de Imágenes Personalizadas
Sección titulada «Construcción de Imágenes Personalizadas»Construcción de Paquetes con Melange
Sección titulada «Construcción de Paquetes con Melange»| Comando | Descripción |
|---|---|
melange keygen | Generar claves de firma para paquetes |
melange build recipe.yaml --signing-key melange.rsa | Compilar paquete APK desde receta |
melange build recipe.yaml --arch x86_64,aarch64 | Compilar para múltiples arquitecturas |
melange bump recipe.yaml 1.2.3 | Actualizar versión en la receta |
Ejemplo de Receta Melange
Sección titulada «Ejemplo de Receta Melange»package:
name: myapp
version: 1.0.0
epoch: 0
description: My custom application
copyright:
- license: Apache-2.0
environment:
contents:
packages:
- build-base
- go
- ca-certificates-bundle
pipeline:
- uses: git-checkout
with:
repository: https://github.com/org/myapp
tag: v${{package.version}}
- uses: go/build
with:
packages: ./cmd/myapp
output: myapp
ldflags: -s -w
- uses: strip
Construcción de Imágenes con Apko
Sección titulada «Construcción de Imágenes con Apko»| Comando | Descripción |
|---|---|
apko build config.yaml tag output.tar | Compilar imagen OCI desde configuración YAML |
apko publish config.yaml tag | Compilar y publicar imagen en registro |
apko build config.yaml tag output.tar --arch x86_64,aarch64 | Compilar imagen multi-arquitectura |
docker load < output.tar | Cargar imagen compilada en Docker |
Ejemplo de Configuración Apko
Sección titulada «Ejemplo de Configuración Apko»contents:
packages:
- ca-certificates-bundle
- wolfi-baselayout
- myapp
repositories:
- https://packages.wolfi.dev/os
- /path/to/local/packages
accounts:
groups:
- groupname: nonroot
gid: 65532
users:
- username: nonroot
uid: 65532
gid: 65532
run-as: 65532
entrypoint:
command: /usr/bin/myapp
archs:
- x86_64
- aarch64
environment:
APP_ENV: production
PORT: "8080"
SBOM y Procedencia
Sección titulada «SBOM y Procedencia»Artefactos de la Cadena de Suministro
Sección titulada «Artefactos de la Cadena de Suministro»| Comando | Descripción |
|---|---|
cosign download sbom cgr.dev/chainguard/python | Descargar SBOM de la imagen |
syft cgr.dev/chainguard/python | Generar SBOM con Syft |
syft cgr.dev/chainguard/python -o spdx-json | Generar SBOM en formato SPDX |
syft cgr.dev/chainguard/python -o cyclonedx-json | Generar SBOM en formato CycloneDX |
cosign download attestation cgr.dev/chainguard/python | Descargar todas las atestaciones |
cosign verify-attestation --type slsaprovenance cgr.dev/chainguard/python | Verificar procedencia SLSA |
chainctl images vulns cgr.dev/chainguard/python | Ver vulnerabilidades conocidas |
Aplicación de Políticas
Sección titulada «Aplicación de Políticas»Política de Admisión de Kubernetes
Sección titulada «Política de Admisión de Kubernetes»# Sigstore Policy Controller - requerir firmas de Chainguard
apiVersion: policy.sigstore.dev/v1beta1
kind: ClusterImagePolicy
metadata:
name: require-chainguard-signatures
spec:
images:
- glob: "cgr.dev/chainguard/**"
- glob: "cgr.dev/chainguard-private/**"
authorities:
- keyless:
url: https://fulcio.sigstore.dev
identities:
- issuerRegExp: ".*"
subjectRegExp: ".*chainguard.*"
ctlog:
url: https://rekor.sigstore.dev
Ejemplo de Política Kyverno
Sección titulada «Ejemplo de Política Kyverno»apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-chainguard-images
spec:
validationFailureAction: Enforce
background: true
rules:
- name: check-image-registry
match:
any:
- resources:
kinds:
- Pod
validate:
message: "Only Chainguard images from cgr.dev are allowed."
pattern:
spec:
containers:
- image: "cgr.dev/chainguard/*"
initContainers:
- image: "cgr.dev/chainguard/*"
Pipeline de Verificación CI/CD
Sección titulada «Pipeline de Verificación CI/CD»# GitHub Actions - verificar y escanear antes del despliegue
name: Image Verification
on:
push:
branches: [main]
jobs:
verify:
runs-on: ubuntu-latest
steps:
- name: Install cosign
uses: sigstore/cosign-installer@v3
- name: Verify image signature
run: |
cosign verify \
--certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
--certificate-identity-regexp="chainguard" \
cgr.dev/chainguard/python:latest
- name: Scan for vulnerabilities
uses: anchore/grype-action@v0
with:
image: cgr.dev/chainguard/python:latest
fail-on: high
Mejores Prácticas
Sección titulada «Mejores Prácticas»-
Usa compilaciones multi-etapa — compila en imágenes
-dev(que tienen compiladores y gestores de paquetes) y copia solo el artefacto final a la imagen de runtime mínima. -
Fija imágenes por digest — usa digests
@sha256:...en lugar de etiquetas para despliegues en producción para garantizar reproducibilidad. -
Elige la imagen base correcta — usa
staticpara binarios compilados sin dependencias del SO,wolfi-basecuando necesites shell, e imágenes específicas del lenguaje para lenguajes interpretados. -
Verifica firmas en CI/CD — siempre verifica las firmas de imágenes Chainguard con cosign antes de compilar o desplegar.
-
Escanea incluso imágenes con cero CVEs — ejecuta escaneos de vulnerabilidades como paso de validación; las imágenes Chainguard deberían devolver cero hallazgos, confirmando que tu pipeline usa imágenes genuinas.
-
Usa variantes
-devsolo en etapas de compilación — nunca envíes imágenes-deva producción; incluyen herramientas que aumentan la superficie de ataque. -
Ejecuta como nonroot — las imágenes Chainguard usan usuario nonroot por defecto; mantén esto en tus Dockerfiles sin cambiar a root.
-
Aplica políticas de imagen — usa Kyverno, OPA Gatekeeper o Sigstore Policy Controller para restringir registros de contenedores en tus clústeres.
-
Genera y almacena SBOMs — usa Syft o cosign para descargar SBOMs para cumplimiento y auditoría.
-
Mantén las imágenes actualizadas — Chainguard reconstruye imágenes frecuentemente; actualiza tus digests regularmente para obtener los últimos parches de seguridad.