Container-Images optimieren: Von 1.2 GB zu 45 MB
Große Docker-Images verlangsamen CI/CD-Pipelines und Deployments. Mit Multi-Stage Builds und Best Practices reduzieren Sie die Image-Größe drastisch.
Warum Image-Größe wichtig ist
Ein 1.2 GB Docker-Image bedeutet: langsamere Builds, langsamere Pushes zur Registry, langsamere Pulls auf den Nodes und eine größere Angriffsfläche. Kleinere Images sind schneller und sicherer.
Multi-Stage Builds
Der wichtigste Hebel: Trennen Sie Build-Dependencies von Runtime-Dependencies. In der Build-Stage installieren Sie Compiler, Build-Tools und Dev-Dependencies. In die finale Stage kopieren Sie nur die kompilierten Artefakte.
Base Image Auswahl
- Alpine: ~5 MB Base Image, ideal für Go- und Rust-Anwendungen. Vorsicht bei PHP und Python — musl vs. glibc kann Kompatibilitätsprobleme verursachen.
- Distroless: Google's Distroless Images enthalten nur die Runtime — keine Shell, keine Package Manager. Maximale Sicherheit.
- Debian Slim: Guter Kompromiss aus Kompatibilität und Größe für PHP und Node.js Anwendungen.
Layer-Optimierung
- Reihenfolge: Selten ändernde Layers (OS, Dependencies) vor häufig ändernden Layers (App-Code) — maximale Cache-Nutzung.
- .dockerignore: Schließen Sie node_modules, .git, Tests und Dokumentation aus dem Build Context aus.
- Kombinieren: Mehrere RUN-Befehle in einem Layer zusammenfassen, um Zwischenlayer zu vermeiden.
Ergebnis
Durch diese Techniken haben wir in einem Kundenprojekt die Image-Größe von 1.2 GB auf 45 MB reduziert. Die Build-Zeit sank von 8 auf 2 Minuten, und Deployments sind dreimal schneller.
Fragen zu diesem Thema?
Wir beraten Sie gerne zu den in diesem Artikel beschriebenen Technologien und Lösungen.
Kontakt aufnehmen