Warum ist mein „debian-slim“-Containerimage viel größer als bei Verwendung von „Alpine“?

Warum ist mein „debian-slim“-Containerimage viel größer als bei Verwendung von „Alpine“?

Ich möchte debian:bookwormals 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-slimdauert länger, weil apt-get updatees 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 ansiblefü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 nginxoder verwenden ansiblesollte, 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 updateKö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-slimdiese hinzufügen muss?

verwandte Informationen