Optimierung von Docker -Bildern

Optimierung von Docker -Bildern

Entwickler arbeiten gerne mit Docker für seine Flexibilität und Benutzerfreundlichkeit. Beim Erstellen von Anwendungen lohnt es sich, die zusätzlichen Zeit zu investieren, um Docker -Bilder und Dockerfiles zu optimieren. Die Optimierung hilft den Teams, kleinere Bilder zu teilen, die Leistung zu verbessern und die Probleme zu erleichtern. Im Folgenden finden Sie einige Empfehlungen zum Erstellen besserer Bilder und Dockerfiles.

Optimierung von Docker -Bildern

Große Docker -Bilder können es schwierig machen, sie zu teilen. Auch große Bilder verlangsamen die Ausführung. Die Optimierung der Bilder kann also beim Gesamtentwicklungs- und -produktionsprozess helfen.

Wählen Sie die richtigen Basisbilder aus

Die auf Docker Hub verfügbaren Bilder sind bereits optimiert. Anstatt Ihre eigenen zu erstellen, ist es eine gute Idee, die verfügbaren optimierten Bilder zu verwenden. Wenn Sie beispielsweise ein Redis -Bild benötigen, haben Sie die Möglichkeit, es auf einem Ubuntu -Bild zu erstellen oder die Redis direkt herunterzuladen. Die Verwendung des bereits erstellten Redis -Images ist eine bessere Option, da die Entwickler bereits redundante Pakete gekümmert haben.

Verwenden Sie mehrstufige Builds

Die neue mehrstufige Option in Docker (seit Version 17.05) können Ihnen helfen, clevere Möglichkeiten zur Optimierung Ihrer Bilder zu erstellen. Sie können eine Anwendung erstellen und dann in eine neue saubere Umgebung übertragen, um sie bereitzustellen. Es wird sicherstellen, dass nur die erforderlichen Laufzeitbibliotheken und Abhängigkeiten Teil des endgültigen Bildes sind.

Anzahl der Schichten reduzieren

Achten Sie beim Erstellen eines Bildes auf die von DockerFiles erstellten Ebenen. Jeder Laufbefehl erstellt eine neue Ebene. Das Kombinieren der Schichten kann die Bildgröße verringern. Ein einfaches Beispiel ist das Apt-Get. Im Allgemeinen führen Benutzer den Befehl wie diesen aus:

Führen Sie APT -Get -y -Update aus
Führen Sie APT -Get Install -y Python aus

Es wird zwei Schichten erstellen. Das Kombinieren der Befehle erzeugt jedoch eine einzige Ebene im endgültigen Bild:

Führen Sie APT -Get -y -Update && apt -Get Install -y Python aus

Intelligente Kombinationen von Befehlen können also zu kleineren Bildern führen.

Erstellen Sie benutzerdefinierte Basisbilder

Docker speichert Bilder. Wenn Sie mehrere Instanzen derselben Ebenen benötigen, ist es eine gute Idee, die Optimierung der Ebenen und das Erstellen eines benutzerdefinierten Basisbildes zu betrachten. Es beschleunigt die Ladezeiten und erleichtert die Verfolgung.

Erstellen Sie auf Produktionsbildern

Testbilder erfordern mehr Tools und Bibliotheken, um Funktionen zu testen. Es ist eine gute Idee, das Produktionsbild als Basis zu verwenden und Testbilder darüber zu erstellen. Die unnötigen Testdateien befinden sich außerhalb der Basis. Die Produktionsbilder bleiben also klein und sauber für den Einsatz.

Vermeiden Sie es, Anwendungsdaten zu speichern

Durch das Speichern von Anwendungsdaten im Container werden Ihre Bilder aufgeblendet. Verwenden Sie für Produktionsumgebungen immer die Volumenfunktion, um den Container von den Daten getrennt zu halten.

Best Practices zum Schreiben von Dockerfiles

Dockerfiles ermöglichen es Entwicklern, Prozesse zu kodifizieren. Es ist also ein großartiges Werkzeug, um den Aufbau des Docker -Bildes zu verbessern. Hier sind einige Praktiken, mit denen Sie Ihre Entwicklung verbessern können.

Entwerfen Sie kurzlebige Behälter

Versuchen Sie, Behälter zu entwerfen, die leicht zu erstellen und zu zerstören sind. Wenn Container zu peripheren Umgebungen und Konfigurationen zu abhängig sind, sind sie schwerer zu pflegen. Das Entwerfen von Behältern von Staatenlosen kann daher dazu beitragen, das System zu vereinfachen.

Verwenden .Dockerignore, um Bilder zu optimieren

Wenn Sie ein kompliziertes Build haben, das rekursiv mehrere Verzeichnisse durchläuft, werden alle Dateien und Verzeichnisse an den Docker -Daemon gesendet. Es kann zu größeren Bildern und langsameren Build -Zeiten führen. Du kannst den ... benutzen .Dockerignore, um unnötige Dateien und Ordner auszuschließen, die den Erstellungsprozess komplizieren.

Verwenden Sie mehrstufige Builds

Mehrstufige Builds sind eine neue Docker-Funktion seit Version 17.05. Es ermöglicht Entwicklern, mehrere Bilder in derselben Dockerfile zu erstellen und Artefakte von einem Container in die Dockerfile selbst von einem Container zu bewegen. Sie können also kleinere und optimierte Artefakte in Ihrem endgültigen Bild haben, ohne komplizierte Skripte zu verwenden, um die gleichen Ergebnisse zu erzielen.

Installieren Sie nur die erforderlichen Pakete

DockerFile sollte nur die bloßen Mindestpakete installieren, die für die Ausführung der Dienste erforderlich sind. Jedes Paket erfordert Platz im Bild. Einige Anwendungen wie Ping oder Texteditor können also im Kontext des Dienstes, der auf dem Container ausgeführt wird, nicht erforderlich sein. Wenn Sie die Anforderungen eines bestimmten Dienstes verstehen, können Sie bessere Dockerfiles schreiben, die optimierte Bilder erstellen können.

Denken Sie an Microservices

Das Entwerfen von Dockerfiles mit der Architektur von Microservices kann hilfreich sein. Es ist nicht immer möglich, einen Prozess pro Container bereitzustellen. Entwickler können sich jedoch überlegen, wie sie ihre Prozesse proaktiver verteilen und Entscheidungen treffen können. Behälter passen natürliche für modulares Design. Daher sollten Ihre Dockerfiles die Möglichkeiten nutzen, die Docker bietet.

Betrachten Sie die Auswirkung von Anweisungen auf Schichten

Führen Sie dockerfiles nur aus, erstellen Sie neue Ebenen seit Version 1 aus, kopieren und fügen Sie nur aus.10. Andere Anweisungen beeinflussen nicht direkt die Größe der endgültigen Bilder. Sie sollten also wachsam sein, wenn sie diese Befehle verwenden. Das Kombinieren mehrerer Befehle kann die Anzahl der Schichten verringern. Weniger Schichten bedeuten kleinere Größen.

Sortieren Sie Multi-Line-Argumente

Wenn Sie ein multi-line-Argument haben, sortieren Sie die Argumente alphanumerisch, um die Wartung des Codes zu verbessern. Zufällige Argumente können zu Duplikationen führen. Sie sind auch schwerer zu aktualisieren. Ein gutes Beispiel:

Führen Sie APT-Get-Update && Apt-Get Install -y \ aus
Apache2 \
Git \
Iputils-ping \
Python \

Vermeiden Sie die Verwendung: neuestes

Wenn Sie von [ImageName]: Neueste verwenden, können Sie auf Probleme stoßen, wenn sich das Bild ändert. Es kann ein schwieriges Problem werden, nachzuspüren. Wenn Sie bestimmte Tags verwenden, können Sie sicherstellen, dass Sie das genaue Bild aus der Docker -Registrierung kennen.

Fügen Sie nur erforderliche Dateien aus dem Verzeichnis hinzu

Dockerfile -Befehle werden nacheinander ausgeführt, um Bilder zu erstellen, und es erstellt nur Ebenen, die noch nicht vorhanden sind. Angenommen, Sie haben ein Paket.JSON für NPM und Anforderungen.txt für pip. Sie können das folgende Dockerfile schreiben, bei dem Paket Paket ist.JSON und Anforderungen.txt befinden sich im MyCode -Ordner:

KOPIEREN ./mycode//home/programm/
Führen Sie die NPM -Installation aus
PIP -Installationsanforderungen ausführen

Jedes Mal, wenn sich die Dateien in MyCode ändern, müssen beide Befehle umgebaut werden. Stattdessen, wenn der Code folgendermaßen geschrieben ist:

KOPIEREN ./mycode/paket.JSON/Home/Programm/Paket.JSON
WorkDir /Home /Programm
Führen Sie die NPM -Installation aus
KOPIEREN ./Mycode/Anforderungen.txt/home/programm/Anforderungen.txt
WorkDir /Home /Programm
PIP -Installationsanforderungen ausführen

Anschließend sind die Befehle für die Ausführung unabhängig voneinander und ändert sich in einer einzelnen Datei im Ordner mycode nicht sowohl die NPM- als auch die PIP -Run -Befehle aus. Wenn Sie sich solche Abhängigkeiten ansehen, können Sie bessere Dockerfiles schreiben.

Weiteres Studium

Die oben genannten Techniken und Best Practices sollten Ihnen helfen, kleinere Docker -Bilder zu erstellen und bessere Dockerfiles zu schreiben. Hier sind Links, mit denen Sie weitere Informationen zu verschiedenen Themen finden können:

  • Docker -Entwicklung Best Practices
  • Docker Multi-Stufe Builds
  • Docker -Dateireferenz

Verweise:

  • https: // docs.Docker.com/entwickeln/devest-practices/
  • https: // docs.Docker.com/motor/userguide/engl-image/dockerfile_best-practices/
  • https: // docs.Docker.com/motor/userguide/engl-image/basisimages/
  • https: // docs.Docker.com/motor/userguide/engl-image/mehrstufiges build/
  • https: // blog.Codeship.com/record-docker-mage-Größe/
  • https: // hackernoon.COM/TIPS-TO-Reduce-Docker-Image-Größen-876095DA3B34
  • https: // docs.Docker.COM/Engine/Referenz/Builder/#Dockerignore-Datei
  • https: // runnable.com/blog/9-common-Dockerfile-Mistakes

https: // linuxHint.com/install- und usedocker-on-subuntu/