Einführung
Docker-Images sind wesentliche Komponenten, die zum Erstellen von Docker-Containern verwendet werden. Obwohl eng verwandt, gibt es große Unterschiede zwischen Docker-Images und Containern.
Ein Docker-Image ist die Basis eines Containers. Diese Images werden durch das Schreiben von Dockerfiles erstellt, Listen von Anweisungen, die automatisch ausgeführt werden, um ein bestimmtes Docker-Image zu erstellen.
Wenn Sie ein Docker-Image erstellen, sollten Sie darauf achten, dass es leicht bleibt. Das Vermeiden großer Images beschleunigt das Erstellen und Bereitstellen von Containern. Daher ist es wichtig, die Bildgröße auf ein Minimum zu reduzieren.
Lesen Sie weiter, um zu erfahren, wie Sie Ihre Docker-Images klein halten können.
Verwenden Sie eine kleinere Bildbasis (alpin)
Um ein Docker-Image zu erstellen, benötigen Sie eine Basis, auf der Sie bei Bedarf Komponenten installieren und hinzufügen können. Sie können ein vorhandenes übergeordnetes Image herunterladen und als Basis für Ihr eigenes Image verwenden oder eines von Grund auf neu erstellen.
Sie installieren eine Variation eines Betriebssystems als Basis eines Images. Die Betriebssystembasis kann sich drastisch auf die Größe Ihres endgültigen Docker-Images auswirken, weshalb die Entscheidung für das richtige Image eine wichtige Rolle spielt.
Linux hat eine hilfreiche Alternative geschaffen, die leicht ist und eine minimale POSIX-Umgebung hat – Alpine. Diese Linux-Distributions-Image-Basis ist nur 5 MB groß und basiert auf musl libc und BusyBox.
Im Vergleich zu anderen Betriebssystem-Images ist Alpine viel kleiner. Das am häufigsten heruntergeladene Betriebssystem-Image, Ubuntu, ist 188 MB groß, während Alpine nur 5 MB groß ist.
Verwenden Sie eine .dockerignore-Datei
Das Ausschließen bestimmter Dateien, die für Ihr Bild nicht erforderlich sind, kann Ihnen helfen, die Bildgröße zu reduzieren. Dort befindet sich die .dockerignore Datei kommt herein.
Wenn Sie ein Image erstellen, schreiben Sie eine Docker-Datei mit Spezifikationen, wie dieses Image aussehen soll.
Beim Skizzieren des Build-Kontexts ist es wichtig, auch eine .dockerignore-Datei einzuschließen und sie im selben Ordner wie die Dockerfile zu speichern.
Diese Docker-Funktion wird mit docker run
initiiert . Das System prüft, ob eine solche Datei vorhanden ist und wendet deren Ausnahmen und Ignorierregeln an. Auf diese Weise entfernen Sie alle irrelevanten Inhalte aus dem erstellten Kontext.
Verwenden Sie die Multi-Stage-Builds-Funktion in Docker
Docker hat die mehrstufige Funktion in seiner Version 17.05 eingeführt. Es ermöglicht Benutzern, das Dockerfile in mehrere Phasen zu unterteilen.
Jede Phase beginnt mit einem FROM
Anweisung. Das erforderliche Artefakt geht in die nächste Phase über und hinterlässt Inhalte, die Sie im endgültigen Bildartefakt nicht benötigen.
Da der Prozess nur die notwendigen Komponenten des Artefakts überträgt, müssen Sie nicht nach jeder Anweisung manuell aufräumen.
Mit der mehrstufigen Funktion vermeiden Sie das Hinzufügen unnötiger Ebenen, was sich erheblich auf die Gesamtbildgröße auswirkt.
Vermeiden Sie es, unnötige Ebenen hinzuzufügen, um die Docker-Image-Größe zu reduzieren
Ein Docker-Image nimmt mit jeder hinzugefügten Ebene mehr Platz ein. Je mehr Ebenen Sie also haben, desto mehr Platz benötigt das Bild.
Jeder RUN
Anweisung in einer Docker-Datei fügt Ihrem Bild eine neue Ebene hinzu. Aus diesem Grund sollten Sie versuchen, die Dateimanipulation innerhalb eines einzigen RUN
durchzuführen Befehl. Kombinieren Sie auch verschiedene Befehle in einer Anweisung mit &&
Option.
Beispielsweise können Sie das Repository aktualisieren und mehrere Pakete in einem einzigen RUN
installieren Anweisung. Um eine klare, umfassende Zeile zu erhalten, verwenden Sie den Backslash (\ ), um den Befehl in mehreren Zeilen einzugeben.
Abgesehen von der Aktualisierung und Installation der Pakete sollten Sie auch den apt-Cache mit && rm -rf /var/lib/apt/lists/*
bereinigen um noch mehr Platz zu sparen.
RUN apt-get update && apt-get install -y\
[package-one] \
[package-two]
&& rm -rf /var/lib/apt/lists/*
Vorsicht vor Updates und unnötigen Paketen und Abhängigkeiten
Eine weitere Möglichkeit, Speicherplatz zu sparen und Ihr Docker-Image klein zu halten, besteht darin, sicherzustellen, dass Sie die neueste Version der Plattform ausführen, auf der Sie bauen.
Indem Sie die neueste Version haben, vermeiden Sie umfangreiche Updates, die unzählige RPM-Pakete herunterladen und viel Speicherplatz beanspruchen.
Die Installation eines Pakets beinhaltet oft auch das Herunterladen von Abhängigkeiten, auf die sich die Software stützt. Manchmal speichert der Download jedoch auch Pakete, die nicht benötigt, sondern eher empfohlen werden.
Solche unerwünschten Pakete können sich summieren und viel Speicherplatz verbrauchen. Um nur die Hauptabhängigkeiten herunterzuladen, fügen Sie --no-install-recommends
hinzu Option zum Installationsbefehl.
Zum Beispiel:
RUN apt-get install --no-install-recommends [package-one]
Bonus-Tipp:Caching
Obwohl sich dieser Tipp nicht auf die Gesamtgröße des Docker-Images auswirkt, hilft er bei schnelleren Docker-Builds.
Docker beschleunigt die Image-Erstellung, indem vorhandene Ebenen einer Docker-Datei lokal zwischengespeichert und verwendet werden, um Images schneller neu zu erstellen.
Stellen Sie sich zum Beispiel vor, Sie haben ein einfaches Dockerfile, das aus drei Schichten besteht. Sobald Sie ein Image aus dieser Datei erstellt haben, werden diese drei Ebenen vom System automatisch zwischengespeichert. Wenn Sie das Image das nächste Mal erstellen, wird es aus dem lokalen Cache geladen.
Wenn Sie sich entscheiden, das Bild zu ändern und eine der Ebenen zu ändern, wird der Cache für nichts nach der geänderten Ebene verwendet.
Wir empfehlen, die Anweisungen so anzuordnen, dass die Effizienz verbessert und die Caching-Funktion genutzt wird. Platzieren Sie Anweisungen, die sich wahrscheinlich ändern werden, so weit unten wie möglich in der Docker-Datei.