Zum Inhalt springen

Chainguard Images

Minimale Zero-CVE-Container-Images basierend auf Wolfi Linux für sichere Software-Lieferketten.

BefehlBeschreibung
docker pull cgr.dev/chainguard/static:latestMinimales statisches Base-Image abrufen
docker pull cgr.dev/chainguard/busybox:latestBusybox-Image zum Debuggen abrufen
docker pull cgr.dev/chainguard/wolfi-base:latestWolfi-Base-Image mit Shell abrufen
docker pull cgr.dev/chainguard/python:latestPython-Runtime-Image abrufen
docker pull cgr.dev/chainguard/node:latestNode.js-Runtime-Image abrufen
docker pull cgr.dev/chainguard/go:latestGo-Build-Image abrufen
docker pull cgr.dev/chainguard/nginx:latestnginx-Webserver-Image abrufen
docker pull cgr.dev/chainguard/git:latestMinimales Git-Image abrufen
docker pull cgr.dev/chainguard/jdk:latestJava-JDK-Image abrufen
docker pull cgr.dev/chainguard/rust:latestRust-Build-Image abrufen
docker pull cgr.dev/chainguard/redis:latestRedis-Server-Image abrufen
docker pull cgr.dev/chainguard/postgres:latestPostgreSQL-Image abrufen
docker pull cgr.dev/chainguard/curl:latestMinimales curl-Image abrufen
BefehlBeschreibung
:latest-TagNeuester Build, produktionsbereit
:latest-dev-TagEntwicklungsvariante mit Shell und Paketmanager
:latest auf -dev-ImagesEnthält apk, Shell und Debugging-Tools
cgr.dev/chainguard-private/IMAGEPrivate/Enterprise-Image-Registry
Digest-Pinning @sha256:abc123...Auf exakten Image-Build für Reproduzierbarkeit festpinnen
BefehlBeschreibung
FROM cgr.dev/chainguard/static:latestStatisches Image im Dockerfile verwenden
FROM cgr.dev/chainguard/python:latest-devDev-Variante mit pip und Shell verwenden
FROM cgr.dev/chainguard/node:latest AS buildAls Build-Stage verwenden
FROM cgr.dev/chainguard/go:latest AS builderGo-Image für Kompilierung verwenden
docker run --rm cgr.dev/chainguard/wolfi-base shInteraktive Shell ausführen
docker run --rm -p 8080:8080 cgr.dev/chainguard/nginxnginx-Server ausführen
docker run --rm cgr.dev/chainguard/python -- python -c "print('hello')"Python-Einzeiler ausführen
# Build-Phase
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

# Laufzeit-Phase - distroless, keine Shell, kein Paketmanager
FROM cgr.dev/chainguard/static:latest
COPY --from=builder /server /server
EXPOSE 8080
ENTRYPOINT ["/server"]
# Build-Phase mit verfügbarem pip
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 . .

# Laufzeit-Phase - minimales Python, kein pip, keine Shell
FROM cgr.dev/chainguard/python:latest
COPY --from=builder /install /usr/local
COPY --from=builder /app /app
WORKDIR /app
ENTRYPOINT ["python", "-m", "myapp"]
# Build-Phase
FROM cgr.dev/chainguard/node:latest-dev AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build

# Laufzeit-Phase
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"]
# Build-Phase
FROM cgr.dev/chainguard/jdk:latest-dev AS builder
WORKDIR /app
COPY . .
RUN ./gradlew build --no-daemon -x test

# Laufzeit-Phase
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"]
BefehlBeschreibung
chainctl auth loginBei Chainguard authentifizieren
chainctl auth login --headlessIn Headless-Umgebungen anmelden
chainctl auth configure-dockerDocker für Chainguard-Registry konfigurieren
chainctl images listVerfügbare Chainguard-Images auflisten
chainctl images repos list --group=GROUP_IDImage-Repos für eine Gruppe auflisten
chainctl images diff IMAGE1 IMAGE2Zwei Image-Versionen vergleichen
chainctl images history cgr.dev/chainguard/pythonImage-Versionsverlauf anzeigen
images.chainguard.dev durchsuchenWeb-Katalog aller Images
BefehlBeschreibung
crane ls cgr.dev/chainguard/pythonVerfügbare Tags für ein Image auflisten
crane manifest cgr.dev/chainguard/python:latestImage-Manifest anzeigen
crane config cgr.dev/chainguard/python:latestImage-Konfiguration anzeigen
docker inspect cgr.dev/chainguard/python:latestImage-Metadaten inspizieren
docker history cgr.dev/chainguard/python:latestImage-Layer anzeigen
dive cgr.dev/chainguard/python:latestImage-Layer interaktiv erkunden
BefehlBeschreibung
cosign verify --certificate-oidc-issuer=https://token.actions.githubusercontent.com --certificate-identity-regexp='chainguard' cgr.dev/chainguard/pythonImage-Signatur verifizieren
cosign verify-attestation --type spdx cgr.dev/chainguard/pythonSBOM-Attestation verifizieren
cosign verify-attestation --type vuln cgr.dev/chainguard/pythonVulnerability-Attestation verifizieren
cosign tree cgr.dev/chainguard/pythonSupply-Chain-Artefakte anzeigen
cosign verify-attestation --type slsaprovenance cgr.dev/chainguard/pythonSLSA-Provenance verifizieren
# Signatur eines Chainguard-Images verifizieren
cosign verify \
  --certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
  --certificate-identity-regexp="chainguard" \
  cgr.dev/chainguard/python:latest

# SBOM-Attestation verifizieren und ausgeben
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 .

# Vulnerability-Scan-Attestation verifizieren
cosign verify-attestation \
  --type vuln \
  --certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
  --certificate-identity-regexp="chainguard" \
  cgr.dev/chainguard/python:latest
BefehlBeschreibung
grype cgr.dev/chainguard/pythonImage auf Schwachstellen mit Grype scannen
grype cgr.dev/chainguard/python --only-fixedNur behebbare Schwachstellen anzeigen
trivy image cgr.dev/chainguard/pythonMit Trivy-Scanner scannen
trivy image --severity HIGH,CRITICAL cgr.dev/chainguard/pythonNur hohe/kritische Schwachstellen scannen
docker scout cves cgr.dev/chainguard/pythonMit Docker Scout scannen
chainctl images vulns cgr.dev/chainguard/pythonBekannte Schwachstellen über chainctl anzeigen
BefehlBeschreibung
apk updatePaketindex aktualisieren (in Dev-Images)
apk add curlPaket installieren
apk add --no-cache python3 py3-pipOhne Cache-Index installieren
apk add --virtual .build-deps gcc musl-devVirtuelle Build-Abhängigkeiten installieren
apk del .build-depsVirtuelle Paketgruppe entfernen
apk del curlPaket entfernen
apk list --installedInstallierte Pakete auflisten
apk search nginxVerfügbare Pakete suchen
apk info python3Paketdetails anzeigen
apk info -L python3Dateien in einem Paket auflisten
BefehlBeschreibung
melange keygenSignaturschlüssel für Pakete generieren
melange build recipe.yaml --signing-key melange.rsaAPK-Paket aus Rezept bauen
melange build recipe.yaml --arch x86_64,aarch64Für mehrere Architekturen bauen
melange bump recipe.yaml 1.2.3Version im Rezept aktualisieren
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
BefehlBeschreibung
apko build config.yaml tag output.tarOCI-Image aus YAML-Konfiguration bauen
apko publish config.yaml tagImage bauen und in Registry pushen
apko build config.yaml tag output.tar --arch x86_64,aarch64Multi-Arch-Image bauen
docker load < output.tarGebautes Image in Docker laden
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"
BefehlBeschreibung
cosign download sbom cgr.dev/chainguard/pythonImage-SBOM herunterladen
syft cgr.dev/chainguard/pythonSBOM mit Syft generieren
syft cgr.dev/chainguard/python -o spdx-jsonSPDX-SBOM generieren
syft cgr.dev/chainguard/python -o cyclonedx-jsonCycloneDX-SBOM generieren
cosign download attestation cgr.dev/chainguard/pythonAlle Attestations herunterladen
cosign verify-attestation --type slsaprovenance cgr.dev/chainguard/pythonSLSA-Provenance verifizieren
chainctl images vulns cgr.dev/chainguard/pythonBekannte Schwachstellen anzeigen
# Sigstore Policy Controller - Chainguard-Signaturen erfordern
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
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/*"
# GitHub Actions - vor Deployment verifizieren und scannen
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
  1. Multi-Stage-Builds verwenden — In -dev-Images bauen (die Compiler und Paketmanager haben) und nur das finale Artefakt in das minimale Laufzeit-Image kopieren.

  2. Images per Digest festpinnen@sha256:...-Digests statt Tags für Produktions-Deployments verwenden, um Reproduzierbarkeit zu garantieren.

  3. Das richtige Base-Image wählenstatic für kompilierte Binaries ohne OS-Abhängigkeiten, wolfi-base wenn eine Shell benötigt wird, und sprachspezifische Images für interpretierte Sprachen verwenden.

  4. Signaturen in CI/CD verifizieren — Chainguard-Image-Signaturen vor dem Bauen oder Deployen immer mit cosign verifizieren.

  5. Auch Zero-CVE-Images scannen — Schwachstellenscans als Validierungsschritt durchführen; Chainguard-Images sollten null Ergebnisse liefern, was bestätigt, dass die Pipeline echte Images verwendet.

  6. -dev-Varianten nur in Build-Phasen verwenden — Niemals -dev-Images in Produktion ausliefern; sie enthalten Tools, die die Angriffsfläche vergrößern.

  7. Als nonroot ausführen — Chainguard-Images verwenden standardmäßig den nonroot-Benutzer; dies in Dockerfiles beibehalten, indem nicht zu root gewechselt wird.

  8. Image-Richtlinien durchsetzen — Kyverno, OPA Gatekeeper oder Sigstore Policy Controller verwenden, um Container-Registries in Clustern einzuschränken.

  9. SBOMs generieren und speichern — Syft oder cosign verwenden, um SBOMs für Compliance und Audit-Trails herunterzuladen.

  10. Images aktuell halten — Chainguard baut Images häufig neu; Digests regelmäßig aktualisieren, um die neuesten Sicherheitspatches zu erhalten.