paint-brush
Wie können Sie Ihr Docker-Image einsparen?von@infinity
2,203 Lesungen
2,203 Lesungen

Wie können Sie Ihr Docker-Image einsparen?

von Rishabh Agarwal4m2024/01/19
Read on Terminal Reader
Read this story w/o Javascript

Zu lang; Lesen

Containerisierung ist ein Softwarebereitstellungsprozess, der den Code einer Anwendung mit allen Dateien und Bibliotheken bündelt, die er für die Ausführung auf einer beliebigen Infrastruktur benötigt. Durch die Optimierung Ihrer Docker-Images können Sie den gesamten Entwicklungszyklus beschleunigen, aber Sie stärken auch die vorhandenen Sicherheitsmaßnahmen und sorgen so für eine robustere und effizientere Softwareumgebung.
featured image - Wie können Sie Ihr Docker-Image einsparen?
Rishabh Agarwal HackerNoon profile picture

Containerisierung “, sagte mein Manager unmissverständlich, als ich ihn nach dem größten Ding fragte, das die Softwareentwicklungsbranche revolutioniert hat. Er argumentierte, dass ohne Containerisierung die schnelle Skalierung und globale Bereitstellung der heutigen Software eine weitaus größere Herausforderung gewesen wäre. Es ist bemerkenswert, dass fast die gesamte heute verwendete Software die Containerisierung in verschiedenen Funktionen nutzt, was ihre unverzichtbare Rolle als Antrieb für das moderne Software-Ökosystem unterstreicht!


Für diejenigen unter Ihnen, die es nicht wissen, hier ist eine Definition von der AWS-Website ~

 *“Containerisation is a software deployment process that bundles an application's code with all the files and libraries it needs to run on any infrastructure. Traditionally, to run any application on your computer, you had to install the version that matched your machine's operating system.”*


Bilder dienen als Bausteine für Container, ähnlich wie Blaupausen, die ihre Entstehung leiten. Daher beschleunigt die Pflege schlanker und optimierter Container-Images den Bereitstellungsprozess und erleichtert die Verteilung dieser Images. Durch die Optimierung Ihrer Docker-Images können Sie nicht nur den gesamten Entwicklungszyklus beschleunigen, sondern auch die vorhandenen Sicherheitsmaßnahmen stärken und so eine robustere und effizientere Softwareumgebung gewährleisten.


In diesem Artikel werden wir verschiedene Methoden zum Erstellen effizienter Docker-Images untersuchen, um letztendlich die Effizienz Ihrer Anwendung zu steigern.

Verpacken Sie eine einzelne App pro Container

Es ist ein häufiger Fehler, Container wie virtuelle Maschinen (VMs) zu behandeln und mehr als eine Anwendung in einen einzigen Container zu packen. Diese Vorgehensweise erhöht zwar die Größe Ihres Containers, hat aber auch andere Nachteile.


Von einem Container wird erwartet, dass die Lebensdauer eng mit der von ihm ausgeführten Anwendung zusammenhängt. Der Container sollte starten, wenn die App gestartet wird, und enden, wenn die App beendet ist. Container-Orchestrierungslösungen wie Docker und Kubernetes stützen sich maßgeblich auf diese Eigenschaft von Containern. Wenn in einem Container viele Apps ausgeführt werden, können die Orchestrierungstools Ihre Anwendung nicht identifizieren und neu starten!

Caches intelligent nutzen

Bilder bestehen aus Ebenen und jede Anweisung in Ihrer Docker-Datei fügt eine neue Ebene hinzu. Containerisierungstechnologien wie Docker werden versuchen, Schichten aus früheren Builds, wo immer möglich, wiederzuverwenden, um die Build-Zeit zu verkürzen. Der Cache für einen Layer darf nur verwendet werden, wenn sich keiner der darunter liegenden Layer seit früheren Builds geändert hat.


Um die Geschwindigkeit der Image-Erstellung zu erhöhen, ist es hilfreich, Anweisungen, die sich häufig ändern können, unten in Ihrer Docker-Datei zu positionieren. Dieser Ansatz ermöglicht es Docker, sein Caching-System effektiver zu nutzen. Da sich beispielsweise der Quellcode oft häufig ändert, empfiehlt es sich, ihn gegen Ende des Prozesses in das Image zu kopieren.


Bildcache ~ https://cloud.google.com/architecture/best-practices-for-building-containers


Ihre Bilder werden dadurch zwar nicht heller, der Erstellungsprozess läuft jedoch schneller!

Entfernen Sie nicht benötigte Werkzeuge

Container-Images enthalten häufig unnötige Tools, was zu einer Aufblähung der Images und potenziellen Sicherheitslücken führt. Tools wie netcat können beispielsweise von Hackern ausgenutzt werden, um böswillige Aktivitäten innerhalb Ihres Containers durchzuführen, wenn sie unbefugten Zugriff erhalten.


Die strikte Einhaltung der Tools und Bibliotheken, die mit Ihrem Container-Image geliefert werden, kann erheblich zur Reduzierung von Sicherheitsbedrohungen beitragen und würde auch zu schlankeren Images führen. Kleinere Bilder werden schneller heruntergeladen, was bedeutet, dass der Container schneller startet.

Verwenden Sie das kleinste Basisbild

Das Bild, auf das wir in der FROM-Anweisung verweisen, wird als Basisbild bezeichnet. Das Basisbild bestimmt maßgeblich die Größe des endgültig erstellten Bildes. Wir sollten versuchen, das kleinstmögliche Basisbild zu verwenden, um die endgültige Größe unseres Bildes zu reduzieren.


Versuchen Sie nach Möglichkeit Alpenbilder zu verwenden, da diese kleiner sind und häufig genügend Tools zur Unterstützung der Entwicklungsaktivitäten enthalten.


Selbst wenn ein kleines Bild nicht alle benötigten Werkzeuge enthält, kann die Verwendung dieses Bilds dennoch die bessere Option sein. Durch die Installation von Paketen, die Sie benötigen, über dem leichteren Basis-Image können Sie möglicherweise immer noch Einsparungen gegenüber der Verwendung des schwereren Images erzielen.

Kopieren Sie nur das Notwendige!

Beim Kopieren des Quellcodes werden möglicherweise auch viele unerwünschte Dateien und Ordner kopiert. Dadurch vergrößert sich Ihr Bild und führt letztendlich zu einer Aufblähung. Versuchen Sie, die Menge der kopierten Dateien zu minimieren und auf ein Minimum zu beschränken.


Die Bedeutung der Optimierung von Container-Images und der Etablierung von Best Practices wird in unserer Branche oft übersehen. Die erheblichen Vorteile, die sich aus der Einhaltung dieser Praktiken ergeben, können jedoch nicht hoch genug eingeschätzt werden. Als Entwickler ist es wichtig, der Erstellung schlanker und schneller Container-Images konsequent Priorität einzuräumen.


Damit sind wir am Ende dieses Artikels angelangt. Ich hoffe, es hat Ihnen Spaß gemacht, es zu lesen!