Einführung
Standardmäßig haben Docker-Container Zugriff auf die vollen RAM- und CPU-Ressourcen des Hosts. Wenn Sie sie mit diesen Standardeinstellungen laufen lassen, kann es zu Leistungsengpässen kommen.
Wenn Sie die Speicher- und CPU-Auslastung von Docker nicht einschränken, kann Docker alle Systemressourcen verwenden.
In diesem Tutorial erfahren Sie, wie Sie die Speicher- und CPU-Auslastung von Docker-Containern begrenzen.
Konfigurieren Sie das System, um die Begrenzung der Ressourcen zu aktivieren
Bevor Sie einen Container mit begrenzten Ressourcen ausführen können, prüfen Sie, ob Ihr System diese Docker-Option unterstützt. Diese Anleitung zeigt Ihnen, wie Sie dies in Ubuntu tun und wie Sie diese Funktion bei Bedarf aktivieren.
1. Führen Sie zuerst den folgenden Befehl aus:
sudo docker info
Wenn Sie die Ausgabe WARNING: No swap limit support
erhalten , die Ressourcenbegrenzung ist standardmäßig nicht aktiviert.
2. Um diese Option hinzuzufügen, bearbeiten Sie die Grub-Konfigurationsdatei. Öffnen Sie die Datei in einem Texteditor Ihrer Wahl (wir verwenden nano):
sudo nano /etc/default/grub
3. Fügen Sie dann die folgende Zeile hinzu:
GRUB_CMDLINE_LINUX="cdgroup_enable=memory swapaccount=1"
4. Speichern Sie die Änderungen und beenden Sie die Datei.
5. Aktualisieren Sie dann die Grub-Konfiguration mit dem Befehl:
sudo update-grub
6. Starten Sie abschließend Ihren Computer neu, damit die Änderungen wirksam werden.
7. Um zu überprüfen, ob Sie die angegebene Docker-Funktion erfolgreich aktiviert haben, führen Sie docker info
erneut aus Befehl.
Speicherzugriff für Docker-Container beschränken
Es gibt mehrere RAM-Einschränkungen, die Sie für einen Docker-Container festlegen können. Einige davon sind:
- Konfigurieren der maximalen Speichermenge, die ein Container verwenden kann.
- Definieren der Speichermenge, die ein Docker-Container auf die Festplatte auslagern kann.
- Festlegen des weichen Limits für die einem Container zugewiesene Speichermenge.
Unten erfahren Sie, wie Sie Docker-Speicherbeschränkungen konfigurieren.
Maximalen Speicherzugriff festlegen
Um die maximale Speichernutzung für einen Container zu begrenzen, fügen Sie --memory
hinzu Option zum docker run
Befehl. Alternativ können Sie die Tastenkombination -m
verwenden .
Geben Sie innerhalb des Befehls an, wie viel Speicher Sie diesem bestimmten Container zuweisen möchten.
Der Befehl sollte der Syntax folgen:
sudo docker run -it --memory="[memory_limit]" [docker_image]
Der Wert von memory_limit
sollte eine positive ganze Zahl gefolgt vom Suffix b sein , k , m , oder g (kurz für Bytes, Kilobytes, Megabytes oder Gigabytes). Um den Container beispielsweise auf 1 GB RAM zu begrenzen, fügen Sie --memory="1g"
hinzu .
Um beispielsweise eine Instanz eines Ubuntu-Containers auszuführen und das Speicherlimit auf 1 GB festzulegen, lautet der Befehl:
sudo docker run -it --memory="1g" ubuntu
Festlegen des Swap-to-Disk-Speicherlimits
Mit dem swap
Option können Sie Daten auch dann speichern, wenn der gesamte dem Container zugewiesene RAM aufgebraucht ist. Dies geschieht, indem die Speicherbeschränkung ignoriert und direkt auf die Festplatte geschrieben wird. Obwohl dies eine nützliche Funktion ist, wird sie nicht empfohlen, da sie die Leistung verlangsamt.
Um diesen zusätzlichen RAM-Speicherplatz zu konfigurieren, definieren Sie die Gesamtgröße des Auslagerungsspeichers. Bevor Sie dies tun, sollten Sie bereits über den maximalen Arbeitsspeicher verfügen (--memory
) des Non-Swap-Memory-Sets. Der Swap umfasst die Gesamtmenge des Nicht-Swap-Speichers plus die Menge an Auslagerungsspeicher als Backup reserviert.
Wenn Sie beispielsweise --memory
festlegen auf 1 GB , wie im obigen Beispiel, muss die Größe des Auslagerungsspeichers größer sein. Um einen Container mit einem zusätzlichen auszuführen 1 GB des Auslagerungsspeichers, stellen Sie den Auslagerungsspeicher auf 2 GB ein .
Die Syntax zum Ausführen eines Containers mit begrenztem Speicher und zusätzlichem Auslagerungsspeicher lautet:
sudo docker run -it --memory="[memory_limit]" --memory-swap="[memory_limit]" [docker_image]
Um beispielsweise einen Container aus dem Ubuntu-Image auszuführen, dem Container 1 GB RAM zuzuweisen und 1 GB RAM für den Auslagerungsspeicher zu reservieren, geben Sie Folgendes ein:
sudo docker run -it --memory="1g" --memory-swap="2g" ubuntu
Soft-Limit für Containerspeicher festlegen
Begrenzen der Speichernutzung eines Containers mit --memory
setzt im Wesentlichen eine harte Grenze, die nicht überschritten werden kann. Alternativ können Sie ein weiches Limit festlegen (--memory-reservation
), die warnt, wenn der Container das Ende seines zugewiesenen Speichers erreicht, aber keinen seiner Dienste stoppt.
Wenn --memory
Beschränkungen siehe nicht gesetzt sind, setzen Sie die weiche Grenze mit --memory-reservation
schränkt den Containerraum nicht vollständig ein. Wenn Sie beide Funktionen aktiviert haben, ist das Soft Limit immer niedriger als die maximale Speicherplatzkapazität.
Als Beispiel für einen Ubuntu-Container mit einer Speicherreservierung von 750 MB und die maximale RAM-Kapazität von 1 GB , verwenden Sie den Befehl:
sudo docker run -it --memory="1g" --memory-reservation="750m" ubuntu
CPU-Auslastung des Docker-Containers begrenzen
Genau wie die RAM-Nutzung haben Docker-Container keine Standardbeschränkungen für die CPU des Hosts. Wenn Containern eine unbegrenzte CPU-Auslastung zugewiesen wird, kann dies zu Problemen führen.
Es gibt mehrere Möglichkeiten zu definieren, wie viel CPU-Ressourcen vom Host-Rechner Sie Containern zuweisen möchten.
Wenn Sie beispielsweise einen Host mit 2 CPUs haben und einem Container Zugriff auf eine davon gewähren möchten, verwenden Sie die Option --cpus="1.0"
. Der Befehl zum Ausführen eines Ubuntu-Containers mit Zugriff auf 1 CPU wäre:
sudo docker run -it --cpus="1.0" ubuntu
Sie können auch --cpu-shares
verwenden Möglichkeit, dem Container einen größeren oder geringeren Anteil an CPU-Zyklen zu geben. Standardmäßig ist dies auf 1024 eingestellt .
Um einen Container mit geringeren CPU-Anteilen auszuführen, führen Sie Folgendes aus:
sudo docker run -it --cpus-shares="700" ubuntu
Weitere Optionen zum Einschränken der Container-CPU-Nutzung finden Sie in der offiziellen Docker-Dokumentation.