CodeGym /Kurse /Docker SELF /Ressourcen-Management von Containern

Ressourcen-Management von Containern

Docker SELF
Level 12 , Lektion 0
Verfügbar

6.1 Gründe, Ressourcen von Containern zu begrenzen

Docker macht einen super Job beim Ressourcenmanagement von Containern, was es ermöglicht, die Systemleistung effizient zu verteilen und unnötige Konflikte zwischen Containern zu vermeiden. Das ist besonders wichtig, damit eine Anwendung in einem Container nicht alle Ressourcen "frisst" und den Betrieb anderer Services verlangsamt. Das Begrenzen von Ressourcen wie CPU und Arbeitsspeicher hilft dabei, Überlastungen zu vermeiden, die Systemstabilität zu wahren und sicherzustellen, dass alle Anwendungen vorhersehbar laufen. In dieser Vorlesung schauen wir uns an, wie man Limits für die Nutzung von CPU und Arbeitsspeicher setzt, damit das System auch bei hoher Auslastung produktiv bleibt.

Warum es wichtig ist, Ressourcen von Containern zu begrenzen:

  1. Stabilität: Vermeidung von Situationen, in denen ein Container alle Ressourcen belegt, wodurch andere Container oder das System selbst langsamer werden.
  2. Effizienz: Bessere Verteilung der Ressourcen zwischen den Containern, um die Systemleistung maximal produktiv zu nutzen.
  3. Schutz: Das Begrenzen von Ressourcen hilft, Probleme mit Containern zu verhindern, die das System versehentlich oder absichtlich überlasten könnten.

6.2 Limits für die Nutzung von CPU

Docker bietet mehrere Möglichkeiten, die Nutzung von CPU durch Container zu begrenzen.

Wichtig! Unter CPU versteht man hier einen Prozessorkern, nicht den gesamten Prozessor. Ein Prozessor mit vier Kernen hat also 4 CPU.

1. Begrenzung des CPU-Anteils (--cpu-shares)

Der Parameter --cpu-shares legt einen relativen Prioritätswert für die Nutzung der CPU durch den Container fest. Der Standardwert ist 1024. Das ist ein relativer Wert, was bedeutet, dass ein Container mit --cpu-shares=512 die Hälfte der Priorität eines Containers mit --cpu-shares=1024 hat.

Beispiel:

In diesem Beispiel wird der Container high_priority_container eine höhere Priorität bei der Verteilung von CPU haben als low_priority_container.

Terminal

docker run -d --name low_priority_container --cpu-shares=512 nginx

docker run -d --name high_priority_container --cpu-shares=2048 nginx

2. Begrenzung der Anzahl von CPU (--cpus)

Der Parameter --cpus legt die genaue Anzahl der CPU fest, die dem Container zur Verfügung steht. Zum Beispiel bedeutet der Wert 1.5, dass der Container 1.5 CPU nutzen kann.

Beispiel:

Dieses Beispiel begrenzt den Container limited_cpu_container auf die Nutzung von maximal 1.5 CPU.

Terminal


        docker run -d --name limited_cpu_container --cpus="1.5" nginx
    

3. Begrenzung der CPU-Zeit (--cpu-quota und --cpu-period)

Die Parameter --cpu-quota und --cpu-period erlauben eine detailliertere Steuerung der CPU-Nutzung. --cpu-period legt das Zeitintervall in Mikrosekunden fest (standardmäßig 100000), und --cpu-quota gibt die maximal erlaubte CPU-Zeit für dieses Intervall an.

Beispiel:

In diesem Beispiel wird der Container custom_cpu_quota_container maximal 50% der CPU nutzen (25000/50000).

Terminal


        docker run -d --name custom_cpu_quota_container --cpu-period=50000 --cpu-quota=25000 nginx

6.3 Begrenzung des Speicherverbrauchs

Eine Speicherbegrenzung ermöglicht es, zu kontrollieren, wie viel RAM ein Container nutzen darf. Das hilft zu vermeiden, dass ein Container anfängt, "den ganzen Speicher zu fressen" und dabei andere Prozesse und Container beeinträchtigt.

1. Begrenzung des maximalen Speicherwerts (--memory)

Der Parameter --memory legt eine Obergrenze für den Speicher fest, den der Container verwenden darf. Wenn der Container dieses Limit überschreitet, wird er vom System gestoppt.

Beispiel:

Dieses Beispiel begrenzt den Container limited_memory_container auf maximal 512 MB RAM.

Terminal

docker run -d --name limited_memory_container --memory="512m" nginx

2. Begrenzung des Swap-Speichers (--memory-swap)

Der Parameter --memory-swap legt das Gesamtlimit für RAM und Swap-Speicher fest. Zum Beispiel, wenn --memory auf 512 MB und --memory-swap auf 1 GB gesetzt wird, kann der Container bis zu 512 MB RAM und zusätzlich 512 MB Swap verwenden.

Beispiel:

Dieses Beispiel begrenzt den Container swap_limited_container auf 512 MB RAM und 512 MB Swap-Speicher.

Terminal

docker run -d --name swap_limited_container --memory="512m" --memory-swap="1g" nginx

3. Begrenzung des Speicherverbrauchs ohne Swap (--memory-swap=-1)

Wenn du den Swap-Speicher vollständig deaktivieren möchtest, setze den Parameter --memory-swap auf -1.

Beispiel:

Dieses Beispiel begrenzt den Container no_swap_container auf 512 MB RAM ohne die Möglichkeit, Swap zu nutzen.

Terminal

docker run -d --name no_swap_container --memory="512m" --memory-swap="-1" nginx

6.4 Praktische Szenarien

1. Start von hochpriorisierten und niedrigpriorisierten Aufgaben

Wenn auf einem Server sowohl wichtige als auch nachrangige Aufgaben ausgeführt werden, hilft der Parameter --cpu-shares, die Ressourcen so zu verteilen, dass kritische Aufgaben mehr CPU erhalten.

Terminal

docker run -d --name high_priority_task --cpu-shares=2048 my_high_priority_image
docker run -d --name low_priority_task --cpu-shares=512 my_low_priority_image

2. Ressourcenbeschränkungen für Tests

Um Anwendungen unter Bedingungen mit begrenzten Ressourcen zu testen, kann man harte Grenzen für CPU und Speicher festlegen. Das hilft dabei, zu verstehen, wie die Anwendung unter solchen Einschränkungen funktioniert.

Terminal

docker run -d --name test_container --cpus="1" --memory="256m" my_test_image

3. Schutz vor Ressourcenerschöpfung

Um Situationen zu vermeiden, in denen ein Container alle verfügbaren Systemressourcen verbraucht, kann man Speicher- und CPU-Limits für alle Container festlegen.

Terminal

docker run -d --name isolated_container --cpus="2" --memory="1g" my_app_image
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION