Alpine vs Debian als Basis-Image - die richtige Wahl treffen
Alpine vs Debian als Basis-Image - die richtige Wahl treffen
Die Wahl des Basis-Images beeinflusst Image-Größe, Kompatibilität, Debugging-Komfort und manchmal das Laufzeitverhalten. Es gibt keine universelle Antwort — aber klare Kriterien.
Alpine Linux
Alpine basiert auf musl libc statt der üblichen glibc und verwendet busybox statt der GNU-Coreutils. Das Ergebnis ist ein minimales Image:
alpine:3.18 → 7.3 MB
- Vorteile:
- Sehr kleine Image-Größe
- Minimale Angriffsfläche (weniger installierte Pakete = weniger CVEs)
- Schnell gepullt und deployed
- Nachteile:
musl libcist nicht vollständig glibc-kompatibel — native Extensions (Python, Ruby, bestimmte npm-Pakete) können nicht oder nur nach Patches kompiliert werden- Debugging auf Alpine ist aufwendiger: viele bekannte Tools fehlen oder verhalten sich anders
- Fehlermeldungen aus nativen Bibliotheken können in Alpine-Containern irreführend sein
Debian und debian:slim
debian:bookworm → 117 MB
debian:bookworm-slim → 75 MB
Debian-basierte Images nutzen glibc und haben breite Paket-Kompatibilität. debian:slim ist eine abgespeckte Variante ohne Dokumentation und Locale-Dateien — gut für Produktions-Images.
- Vorteile:
- Volle glibc-Kompatibilität → keine Überraschungen mit nativen Bibliotheken
- Bekannte Toolchain, vertrautes Verhalten
- Einfacheres Debugging (apt-get install verfügbar)
- Nachteile:
- Größer als Alpine
- Mehr potenzielle CVE-Oberfläche
Wann was verwenden
- Alpine sinnvoll für:
- Statisch gelinkte Go-Binaries (CGO_ENABLED=0 — kein glibc-Bedarf)
- Einfache Shell-Skripte und Tools
- Situations, wo Image-Größe kritisch ist
- Debian/slim sinnvoll für:
- Python (native Extensions wie numpy, cryptography, psutil brauchen glibc)
- Java, Ruby, PHP
- Alles, das native Linux-Bibliotheken einbindet
# Go: Alpine ist ideal — statisch gelinkt
FROM alpine:3.18
COPY server /app/server
# Python: Debian-slim ist sicherer
FROM python:3.12-slim
Distroless als dritte Option
Google's Distroless-Images (gcr.io/distroless/base) enthalten weder Shell noch Paketmanager — nur die Laufzeit-Bibliotheken. Noch kleiner als Alpine, aber kein sh für Debugging.
FROM gcr.io/distroless/python3
COPY app.py /app/
CMD ["app.py"]
Für maximale Sicherheit in Produktion interessant. Im Fehlerfall jedoch kaum debuggbar — nur mit docker cp oder Sidecar-Containern.
Fazit
Anfangen mit den offiziellen slim-Images der jeweiligen Laufzeit (python:3.12-slim, node:20-slim). Zu Alpine wechseln, wenn man die Kompatibilität kennt und Image-Größe ein tatsächliches Kriterium ist.