Kleine, sicherere Containerbilder
Dein Bild ist wahrscheinlich zehnmal größer, als es sein muss. Wie ich meine schrumpfe und härte.
Dein Bild ist wahrscheinlich zehnmal größer, als es sein muss. Wie ich meine schrumpfe und härte.

Lauf ! docker images Sie werden Bilder von 800 MB, 1 GB, manchmal mehr, für eine Anwendung finden, deren Code ein paar Megabyte beträgt. Der Rest ist ein komplettes Betriebssystem, Compiler, Paketmanager, Shell, Debugging-Tools und übriggebliebene Dateien.
Große Bilder brauchen länger, um zu bauen, zu ziehen und zu starten. Außerdem ist jedes zusätzliche Paket ein Sicherheitsrisiko. So mache ich meine kleiner und sicherer.
Der größte Sieg, bei weitem. Verwenden Sie eine Stufe mit allen Erstellungswerkzeugen, um Ihre App zu kompilieren, und kopieren Sie dann nur das Ergebnis in ein minimales Endbild.
# Build stage
FROM golang:1.25 AS build
WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o /app ./cmd/server
# Final stage
FROM gcr.io/distroless/static-debian12:nonroot
COPY --from=build /app /app
USER nonroot
ENTRYPOINT ["/app"]
Das letzte Bild enthält die Binärzahl und fast nichts anderes. Keine Shell, kein Paketmanager, kein Compiler. Für eine Go-App kann das bedeuten, von etwa einem Gigabyte auf etwa zwanzig Megabyte zu gehen.
Das gleiche Muster funktioniert für andere Sprachen: Bauen Sie mit dem vollständigen SDK-Image, laufen Sie mit einem schlanken Laufzeit-Image.
Das Basisbild bestimmt die Größe Ihres Bildes und die Anzahl der Verwundbarkeiten.
ubuntu, debian, node, python): bequem, groß, viele Pakete, die man nicht braucht.python:3.13-slim, node:22-slim): eine gute Mittelweg.Eine Notiz zu Bitnami: viele Teams verließen sich auf Bitnamis kostenlose Containerbilder und Helm-Diagramme. Im Jahr 2025 änderte Broadcom den freien Katalog erheblich und verlegte die meisten Versionenbilder in ein älteres Repository, das keine Updates mehr erhält. Wenn Ihre Diagramme oder Dockerfiles noch auf Bitnami-Bilder verweisen, überprüfen Sie sie jetzt und wechseln Sie zu unterstützten Alternativen.
Jedes Paket in deinem Bild ist ein Paket, das du reparieren musst. Die leichteste Schwachstelle zu reparieren ist die, die Sie nie ausgeliefert haben.
Docker baut Ebenen in der Reihenfolge auf und verwendet zwischengespeicherte Ebenen wieder, bis sich etwas ändert. Also zählt die Reihenfolge:
package.json, go.mod, requirements.txt), Installation von Abhängigkeiten und dann Kopieren des Restcodes. Codeänderungen machen die Abhängigkeitsschicht nicht ungültig..dockerignore zu halten node_modules, .git, Testdaten und lokale Geheimnisse aus dem Kontext des Baus.RUN --mount=type=cache,target=/root/.cache/pip \
pip install -r requirements.txt
--cache-to und --cache-from mit docker buildxDie Anlagen sind in der Regel mit einem hohen Gehalt an Rohrleitungen ausgestattet.USER in der Dockerfile und runAsNonRoot: true in Kubernetes.--mount=type=secret) für alles, was zur Bauzeit benötigt wird.Scannen Sie Bilder in CI und scheitern Sie beim Aufbau auf ernsthafte, behebliche Schwachstellen:
trivy image --severity HIGH,CRITICAL --ignore-unfixed \
--exit-code 1 registry.example.com/shop-api:1.4.2
Trivy und Grippe sind beide ausgezeichnete Open-Source-Scanner. Docker Scout und die meisten Registrierungen scannen ebenfalls automatisch.
Zwei Tipps: --ignore-unfixed (oder ähnlich) so dass Sie nicht durch Schwachstellen blockiert werden, die niemand noch beheben kann, und wieder Scannen von Bildern regelmäßig, nicht nur bei der Erstellung Zeit, weil neue Schwachstellen in alten Bildern jeden Tag gefunden werden.
Nehmen Sie Ihr größtes Bild. Hinzu kommen ein mehrstufiges Bauen und eine schlanke oder distrolose Basis. Trivy vor und nach. Der Unterschied in Größe und Sicherheit ist normalerweise so groß, dass der Rest des Teams es auch will.
Meine Meinung: Versenden Sie Ihre App, nicht ein ganzes Betriebssystem. Kleinere Bilder sind schneller, billiger und sicherer, alles auf einmal.
Desly