GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So optimieren Sie die Docker-Leistung

Einführung

Docker-Container sind so konzipiert, dass sie überall ausgeführt werden können – in einem internen Rechenzentrum, in der Cloud oder in einer Hybrid- und Multi-Cloud-Umgebung. Out-of-the-box neigen Docker-Container dazu, andere Virtualisierungsmethoden zu übertreffen, aber sie können weiter optimiert werden, um eine noch bessere Leistung zu bieten.

Dieser Artikel erörtert die Gründe für die suboptimale Docker-Leistung in einigen Szenarien und bietet Lösungen, die Sie auf Ihr System anwenden können, um Docker-Bereitstellungen zu optimieren.

Was verursacht eine langsame Docker-Leistung?

Docker ist ein komplexes System, das von mehreren Faktoren abhängt, einschließlich der Hostkonfigurationen und der Netzwerkqualität. Im Folgenden sind einige der häufigsten Gründe aufgeführt, warum Docker langsam ist.

Unzureichend zugewiesene Ressourcen

Wenn Docker-Container nicht auf genügend Ressourcen zugreifen können, kommt es schnell zu Leistungsproblemen. Abhängig von der durchschnittlichen Image-Größe eines Projekts und der Anzahl der von Ihnen ausgeführten Container müssen die Hosts und das Netzwerk in der Lage sein, die Arbeitslast zu unterstützen.

Docker-Image-Größe

Docker verwendet Bilder, um Container zu erstellen. Bilder bestehen aus dem Quellcode, Bibliotheken und Abhängigkeiten, die für die ordnungsgemäße Funktion der App erforderlich sind. Ein aus einem Image erstellter Docker-Container ist eine stabile Umgebung für Entwicklung und Tests.

Schwerfällige Docker-Images verbrauchen jedoch viele Ressourcen und belasten das gesamte System. Da die Bildgröße ein relativer Begriff ist und von den Anforderungen einer bestimmten Anwendung abhängt, bezieht sich diese Aussage hauptsächlich darauf, wie stark das Bild optimiert oder mit unnötigen Dateien aufgebläht wird .

Kontextgröße der Docker-Datei

Der docker build Der Befehl verwendet zwei Quellen, um ein Image zu erstellen – ein Dockerfile und einen Kontext. Ein Kontext ist die Gruppe von Dateien an einem bestimmten Speicherort, auf die der Erstellungsprozess verweisen kann. Wenn die Kontextgröße zu groß ist, kann die Buildzeitleistung beeinträchtigt werden.

Standard-Docker-Konfiguration wird noch verwendet

Auch wenn die standardmäßige Docker-Konfiguration vernünftige Parameter bereitstellt, damit Docker sofort einsatzbereit ist, ist jedes System spezifisch. Falsch konfigurierte Daemon-Startoptionen, Netzwerk und andere Parameter können die Leistung von Docker beeinträchtigen.

Netzwerklatenz

Sofern Sie Ihre Registrierung nicht erstellen, verwendet Docker Dockerhub, um Bilder direkt abzurufen. Das Verschieben einer großen Datenmenge über das Internet führt dazu, dass die Netzwerklatenz zu einem Faktor für die allgemeine Docker-Leistung wird.

So optimieren Sie die Docker-Leistung

Es gibt mehrere Möglichkeiten, Ihr Docker schneller zu machen, von Hardwareverbesserungen bis hin zu Optimierungen in Docker selbst.

Ressourcen richtig zuweisen

Die Leistung des Hostcomputers beeinflusst die Leistung des Containers. Eine langsame CPU oder unzureichender Arbeitsspeicher können zu einem Engpass werden und die Leistung von Docker verlangsamen.

Wenn Sie eine langsame Docker-Leistung feststellen, überprüfen Sie Ihre CPU, die Speicherauslastung und den verfügbaren Speicherplatz. Erwägen Sie ein Upgrade Ihres Systems, wenn eine Komponente nicht wie erwartet funktioniert.

Wenn es um einen bestimmten Container geht, dessen Leistung schlechter als erwartet ist, kann es hilfreich sein, containerspezifische Metriken zu überprüfen.

Die docker stats Der Befehl zeigt die wichtigen Metrikdaten zu den laufenden Containern an. Verwenden Sie es, um potenzielle Probleme zu diagnostizieren.

docker stats

Die Befehlsausgabe zeigt:

  • CPU-Auslastung.
  • Speichernutzung und Limit pro Container.
  • Prozentsatz des Speicherverbrauchs.
  • NET I/O - Docker-Netzwerkverkehr.
  • BLOCK I/O - Daten, die auf Hostblockgeräte geschrieben werden.
  • PIDS - Die Anzahl der Threads, die ein Container erstellt hat.

Docker-Images optimieren

Überprüfen Sie zunächst die Größe des erstellten Images mit dem folgenden Befehl:

docker images

Die Ausgabe listet das Repository des Bildes, das Tag, die ID, die Zeit seit der Erstellung und die Größe auf:

Überprüfen Sie das Dockerfile des Images und stellen Sie sicher, dass der Dateikontext nicht zu groß ist. Der Kontext listet die Dateien auf, die Docker zum Erstellen eines Containers benötigt.

Die Kontextgröße wird in der Ausgabe des docker build angezeigt Befehl:

docker build -t [image-name] .

Im folgenden Beispiel beträgt die Kontextgröße 4,641 MB:

Wenn der Build-Kontext des Images zu groß ist, erstellen Sie eine .dockerignore Datei im Stammverzeichnis des Kontexts und fügen Sie die unnötigen Dateien hinzu. Docker ignoriert die dort aufgelisteten Dateien beim Erstellen des Images.

Hier ist ein Beispiel für eine .dockerignore Datei:


temp*
*/temp*

Die erste Zeile weist Docker an, alle Dateien und Verzeichnisse, deren Namen mit temp beginnen, aus dem Kontext auszuschließen im Stammverzeichnis. Der zweite macht dasselbe für jedes Unterverzeichnis des Stammverzeichnisses.

Überprüfen Sie die Abhängigkeiten

Beim Installieren von Abhängigkeiten können Debian-basierte Docker-Images zusätzliche Binärdateien und Dateien generieren. Einige dieser Abhängigkeiten werden für das normale Funktionieren des Containers nicht benötigt und können entfernt werden.

Um unnötige Abhängigkeiten manuell zu entfernen, verwenden Sie die unten aufgeführten Befehle.

Pakete in /var/cache entfernen :

apt clean

Veraltete Pakete entfernen:

apt autoclean

Von entfernten Paketen verwendete Abhängigkeiten entfernen:

apt autoremove

Erwägen Sie den Wechsel zur Microservice-Architektur

Monolithische Anwendungen sind in der Regel langsamer als Anwendungen, die mit einer Microservice-Architektur erstellt wurden. Wenn Ihre Docker-Container Probleme mit der Leistung haben, kann dies an der Größe der App im Container liegen. Die Migration der App zu Microservices ermöglicht die Aufteilung der Arbeitslast auf mehr als einen Container.

Verwenden Sie dedizierte Ressourcen

In Cloud-Umgebungen teilen sich VMs häufig Hardwareressourcen mit anderen VMs auf demselben Server. Das Hosten von Containern auf der dedizierten Hardware von Bare Metal Cloud eliminiert jedoch den Virtualisierungsaufwand und verbessert die Leistung der Container. Containerisierte Apps teilen keine Systemressourcen wie RAM und CPU, wodurch die Latenz nicht verringert wird und Apps die Hardware vollständig nutzen können.

Leichtgewichtiges Betriebssystem verwenden

Betriebssysteme mit vollem Funktionsumfang wie Windows, macOS oder kommerzielle Linux-Distributionen verbrauchen einen großen Teil der Systemressourcen und lassen weniger als für eine optimale Docker-Leistung erforderlich übrig. Lightweight-Distributionen wie RancherOS, CoreOS Container Linux, Alpine Linux und VMware Photon OS wurden für die Arbeit mit Docker-Containern optimiert. Das Erstellen von Images auf einem einfachen System kann bis zu 100 MB der endgültigen Image-Größe einsparen, was die Geschwindigkeit erheblich verbessert.

Dockerfile-Layer zwischenspeichern

Verwenden Sie Layer-Caching, um die Bildaufbaugeschwindigkeit zu verbessern. Wenn Docker mit dem Erstellen eines Images beginnt, durchsucht es den Cache nach Ebenen mit ähnlichen Signaturen und verwendet sie dabei. Diese Funktion beschleunigt den Bauprozess.

Wenn Sie das bereits vorhandene Bild als Cache-Quelle angeben möchten, verwenden Sie --cache-from Möglichkeit:

docker build --cache-from [image-to-cache-from] -t [next-build] -f [path-to-dockerfile]

Docker
  1. So installieren Sie Docker unter CentOS 7

  2. So installieren Sie Docker auf dem Raspberry Pi

  3. So installieren Sie Docker unter Ubuntu 18.04 / Ubuntu 18.10 / Ubuntu 19.04

  4. So installieren Sie Docker in CentOS

  5. So installieren Sie Jenkins mit Docker

So installieren Sie Docker unter Ubuntu 20.04, 18.04, 21.04

So installieren Sie Docker unter CentOS 7

So installieren Sie Docker unter Ubuntu 14.04

So entfernen Sie Docker-Container

So stoppen Sie Docker-Container

So installieren Sie Docker auf dem Mac