
Ich möchte debian:bookworm
als mein Basis-Container-Image verwenden. Ich stelle jedoch fest, dass das Container-Image (laut dive
) sehr schnell wächst, wenn ich Anwendungen mit installiere apt-get
.
Haftungsausschluss: Diese „Benchmark“-Ergebnisse sind der Durchschnitt einiger wiederholter Durchläufe auf meinem Computer, ich denke aber, dass sie im Großen und Ganzen repräsentativ für das Problem sind.
Vergleichen für eine einzelne App
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y --no-install-recommends nginx
FROM alpine:3.18.2
RUN apk add --no-cache nginx
was dazu führt:
Base | Bauzeit | Größe |
---|---|---|
alpin | 2,3 Sekunden | 9,2 MB |
debian-slim | 5,1 Sekunden | Datenträger |
debian-slim
dauert länger, weil apt-get update
es langsamer ist, aber der Unterschied im Basisbild ist für eine einzelne Anwendung erheblich.
Vergleichen mit mehreren Apps
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y --no-install-recommends nginx curl wget git iputils-ping rsync unzip && \
apt-get clean && \
rm -rf /var/cache/apt/archives /var/lib/apt/lists/*
FROM alpine:3.18.2
RUN apk add --no-cache nginx curl wget git iputils-ping rsync unzip
Base | Bauzeit | Größe |
---|---|---|
alpin | 3,2 Sekunden | Datenblatt |
debian-slim | 9,0 Sekunden | Datenträger |
Bei Alpine war eine Steigerung um 0,9 s und 13,8 MB zu verzeichnen. Bei Debian war eine Steigerung um 3,9 s und 69 MB zu verzeichnen.
Dateiliste
Verwenden vondocker run --rm -it <tag> du -h > debian.txt
alpin:https://pastebin.com/mHTHDFwW debian-slim:https://pastebin.com/wTpuYGDD
Etwa 50 MB scheinen damit zusammenzuhängen perl
?
Beispiel für einen Extremfall
Ich habe ein Image, das eine Reihe von Build-Tools (Java, Go, NodeJS, ...) enthält, die offensichtlich schwer sind, aber ich bin trotzdem überrascht, dass es 7,1 GB groß ist. Aber es ist vielleicht nicht die Schuld von Debian/Apt. Allein das Ausführen pip3 install ansible
fügt 565 MB hinzu, von denen 222 MB für fortinet
(was vermutlich nur wenige Leute verwenden) bestimmt sind. Die Lektion ist also, dass man bei der Verwendung von Paketmanagern vorsichtig sein und nicht die allgemeinen nginx
oder verwenden ansible
sollte, sondern spezifischere/explizite Pakete.
Frage
Warum wächst Debian so viel schneller und installiert Anwendungen viel langsamer? Dies ist insbesondere bei großen Container-Images relevant, bei denen der Unterschied 100 MB gegenüber 1 GB betragen kann.
Soweit ich online gelesen habe, ist Alpine mit Community-Paketen auf dem neuesten Stand, vergleichbar mit Arch, während Debian-Pakete vertrauenswürdiger sind. Für den Einsatz in Unternehmen in einer sicherheitskritischen Umgebung scheint es notwendig zu sein, Debian-Pakete zu verwenden, aber es ist auch schwer, so große Images zu rechtfertigen. Ist Alpine für den Einsatz in Unternehmen vertrauenswürdig? (Idealerweise wären alle Binärdateien reproduzierbar und von den Entwicklern signiert, sodass unabhängige Builds vertrauenswürdig wären, aber ich verstehe, dass wir davon weit entfernt sind?).
Kann man etwas tun, um die Größe von Debian bzw. die Zeit zum Erstellen zu reduzieren? Eine Möglichkeit besteht darin, Binärdateien manuell zu installieren. apt-get update
Könnte das durch die Verwendung eines Apt-Proxys auf dem Build-Server schneller gehen?
Eine Erklärung könnte sein, dass das Alpine-Image viele integrierte Abhängigkeiten hat (Busybox?), während debian
/ debian-slim
diese hinzufügen muss?