Schritt für Schritt zum „Chiselled Ubuntu“-Basis-Image Ultraleichtes Ubuntu selbstgemacht
Anbieter zum Thema
Wie sich ein Ubuntu-Image um das 15-fache verkleinern lässt, haben wir schon erfahren. In einer Schritt-für-Schritt-Anleitung wollen wir nun betrachten, wie man sein Ubuntu-Basis-Image für jeden Anwendungsfall anpassen kann.

Ein perfektes Container-Basis-Image wird es vielleicht nie geben. Anfangs schien mir Googles Distroless-Basis ziemlich nah an dieser Vorstellung zu sein. In der Praxis hat sich aber gezeigt, dass man diesem Ziel am nächsten kommt, wenn man das Basis-Image tatsächlich von Grund auf neu erstellt.
Ein Base Image soll nur genau das enthalten, was man benötigt und von einer gut gewarteten und unterstützten Linux-Distribution aus installiert werden. Hier ist die Anleitung für das eigene, auf Ubuntu aufbauende Basis-Container-Image.
Schritt 1: Chiselled Ubuntu mit Docker bauen
Um „chiselled Ubuntu“-Images zu erstellen, benötigen wir zunächst einen „Meißel“, also ein Werkzeug zum Bearbeiten. Das Chisel-Paket-Slicing-Tool, das zum Erstellen von Ubuntu-Basis-Images verwendet wird, ist eine Go-Anwendung. Allerdings gibt es dafür derzeit keine vorgefertigten Versionen. Daher müssen sie mit dem Golang-SDK gebaut werden.
Bei GitHub habe ich eine 20-zeilige Docker-Datei bereitgestellt, die zeigt, wie man Chisel baut und als Container-Image mit Docker, dem Go SDK und dem Chisel selbst verpackt. Nach der Erstellung ist das Ergebnis ein weniger als 16 MB großes, auf Ubuntu basierendes Chisel-Image. Das endgültige Chisel-OCI-Image enthält eine angepasste Ubuntu-Basis (hauptsächlich Glibc und CA-Zertifikate) und das mit Go kompilierte Chisel-Tool, das in unseren zukünftigen Container-Builds verwendet werden kann.
Schritt 2: Ubuntu selbst gemacht
Um sein eigenes Chiselled-Ubuntu-Basis-Image zu erstellen, beginnt man mit einem von Grunde neu gebauten Image und fügt die notwendigen Chiselled-Ubuntu-Bits aus den ausgewählten Paketabhängigkeiten hinzu.
Inspiriert von Googles Distroless-Basis-Image habe ich für dieses Beispiel die folgenden Paket-Slices aus der Ubuntu-Distribution gewählt: base-files_base, base-files_release-info, ca-certificates_data, and libc6_libs.
Dafür folgt man am besten dieser Anweisung in fünf Schritten aus dieser Docker-Datei:
# chiselled-base.dockerfile
# "chisel:22.04" ist unser früheres "chisel" Image von Schritt 1
# gebaut und lokal mit dem Tag des Docker CLI versehen
FROM chisel:22.04 als Installer
WORKDIR /staging
# Schneiden Sie mit einem Chisel die erforderlichen Paketscheiben aus dem
# chisel:22.04 Image und speichern Sie diese im /staging directory
RUN ["chisel", "cut", "--root", "/staging", \
"base-files_base", \
"base-files_release-info", \
"ca-certificates_data", \
"libc6_libs" ]
# Beginnen Sie mit einem Scratch-Image als Basis für unser chiselled Ubuntu-Basis-Image
FROM scratch
# Kopieren Sie die Paket-Slices aus dem Installations-Image
# in das Verzeichnis / unseres Ubuntu-Basisimages
COPY --from=installer [ "/staging/", "/" ]
Sobald Sie diese Docker-Datei erstellt haben, können Sie ihr eigenes neues Chiselled Ubuntu Image mit dieser Kommandozeile bauen:
docker build . -t chiselled-base:22.04 -f chiselled-base.dockerfile
Das angepasste chiselled Ubuntu-Basis-Image sollte etwa 5 MB groß sein und ist bereit, viele C/C++-, Golang- oder andere dynamisch verlinkte, in sich geschlossene Programme auszuführen. Mit der mitgelieferten beispielhaften Dockerdatei, die ein C-Programm über das neue Basis-Image legt, lässt es sich testen.
Schritt 3: SSL-Support für das Basis-Image hinzufügen
Wenn die Anwendung SSL-Unterstützung benötigt, lässt sich diese ganz einfach zu Ihrem Ubuntu-Basis-Image hinzufügen, indem Sie die folgenden Zeilen zur eigenen vorherigen Docker-Datei hinzufügen:
# chiselled-ssl-base.dockerfile
# " chisel:22.04" ist unser vorheriges "chisel"-Image aus Schritt 1
# Wir haben es lokal mit dem Docker CLI gebaut und markiert.
FROM chisel:22.04 als Installer
WORKDIR /staging
RUN ["chisel", "cut", "--root", "/staging", \
"base-files_base", \
"base-files_release-info", \
"ca-certificates_data", \
"libc6_libs", \
"libssl3_libs", \
"openssl_config" ]
FROM scratch
COPY --from=installer [ "/staging/", "/" ]
Zum Erstellen eines neuen Ubuntu-Basis-Image mit SSL-Unterstützung verwendet man den Befehl:
docker build . -t chiselled-ssl-base:22.04 -f chiselled-ssl-base.dockerfile
Ihr neues Basis-Image mit SSL-Unterstützung sollte weniger als 11 MB groß sein. Mit diesem einfachen Verfahren können Sie problemlos Paketabhängigkeiten hinzufügen und entfernen und Ihr chiselled Ubuntu-Basis-Image an spezifische Bedürfnisse und Anforderungen anpassen. Weitere Beispiele und Anwendungsfälle, einschließlich der Erstellung zusätzlicher Paket-Slices, finden sich im weiter unten gelisteten Git-Repository für Beispiele.
Fazit
Chiselled Ubuntu Container-Images kombinieren die Vorteile einer bekannten und gut gewarteten Linux-Distribution mit den Vorteilen ultrakleiner Container-Images vom Typ Distroless. Letztere liefern eine sichere und effiziente Grundlage für die Entwicklung und Bereitstellung von containerisierten Anwendungen.
Warum also nicht einmal chiselled Ubuntu-Container-Images ausprobieren und sich von den Vorteilen überzeugen? „Probieren geht über Studieren“ – oder in diesem Fall die Größe Ihres Container-Images!
Artikelfiles und Artikellinks
(ID:49540295)