Docker Schnellstart – Container Ressourcen limitieren

Damit deine Container deinen Server nicht vollkommen überlasten, wäre es sinnvoll, wenn Docker über Einstellmöglichkeiten bezüglich der Container Server-Ressourcen zur Verfügung stellen würde.

Und es gibt tatsächlich mehrere Möglichkeiten Ressourcen-Limitierungen zu nutzen, die du für einen Docker Container setzen kannst. Einige von ihnen sind:

  • Maximale Menge an RAM-Speicher definieren, die ein Container nutzen kann.
  • Festlegen der Menge an Speicher, die ein Docker Container auf die Festplatte auslagern kann.
  • Einstellen des Softlimits für die Menge an Speicher, die einem Container zugewiesen wird.

Im Folgenden erfährst du, wie du die Speicherbeschränkungen von Docker konfigurieren kannst.

Maximalen Speicherzugriff einstellen

Um die maximale Speichernutzung für einen Container zu begrenzen, füge die --memory option zu dem docker run befehl. Alternativ kannst du auch den Shortcut verwenden -m.

Innerhalb des Befehls gibst du an, wie viel Arbeitsspeicher du für diesen speziellen Container bereitstellen möchtest.

Der Befehl sollte der Syntax folgen:

docker run -it --memory="[memory_limit]" [docker_image]

Der Wert von memory_limit sollte eine positive ganze Zahl sein, gefolgt von dem Suffix b, k, m oder g (kurz für Bytes, Kilobytes, Megabytes oder Gigabytes). Um zum Beispiel den Container mit 1 GB RAM zu begrenzen, füge --memory="1g".

Um zum Beispiel eine Instanz eines Ubuntu Containers zu starten und das Speicherlimit auf 1 GB zu setzen, lautet der Befehl:

docker run -it --memory="1g" ubuntu

Swap to Disk Speicherlimit setzen

Die Verwendung der swap Option erlaubt es dir, Daten zu speichern, auch wenn der gesamte dem Container zugewiesene Arbeitsspeicher verbraucht ist. Dies geschieht, indem die Speicherbegrenzung ignoriert wird und direkt auf die Festplatte geschrieben wird. Obwohl dies eine nützliche Funktion ist, ist es keine empfohlene Praxis, da es die Leistung verlangsamt.

Um diesen zusätzlichen RAM-Speicherplatz zu konfigurieren, definiere die Gesamtmenge des Swap-Speichers. Bevor du dies tust, solltest du bereits den maximalen Speicher (--memory) des Non-Swap-Speichers festgelegt haben. Der Swap beinhaltet die Gesamtmenge des Non-Swap-Speichers plus die Menge des als Backup reservierten Swap-Speichers.

Zum Beispiel, wenn du --memory auf 1 GB setzt, wie im obigen Beispiel, muss die Menge des Swap-Speichers mehr als das sein. Um einen Container mit zusätzlich 1 GB Swap-Speicher zu betreiben, setze den Swap-Speicher auf 2 GB.

Die Syntax für das Ausführen eines Containers mit begrenztem Speicher und zusätzlichem Swap-Speicher ist:

docker run -it --memory="[memory_limit]" --memory-swap="[memory_limit]" [docker_image]

Um zum Beispiel einen Container aus dem Ubuntu-Image zu starten, dem Container 1 GB RAM zuzuweisen und 1 GB RAM für den Swap-Speicher zu reservieren, tippe ein:

docker run -it --memory="1g" --memory-swap="2g" ubuntu

Soft Limit für Container Speicher setzen

Das Begrenzen des Speicherverbrauchs eines Containers mit --memory ist im Wesentlichen das Setzen eines harten Limits, das nicht überschritten werden kann. Alternativ kannst du auch ein weiches Limit setzen (--memory-reservation) setzen, das warnt, wenn der Container das Ende des ihm zugewiesenen Speichers erreicht, aber keinen seiner Dienste stoppt.

Wenn --memory begrenzungen nicht gesetzt sind, wird das Setzen des weichen Limits mit --memory-reservation den Containerplatz nicht vollständig begrenzen. Wenn du beide Funktionen aktiviert hast, ist das weiche Limit immer niedriger als die maximale Speicherkapazität.

Als Beispiel, damit ein Ubuntu Container die Speicherreservierung von 750 MB und die maximale RAM Kapazität von 1 BG hat, benutze den Befehl:

docker run -it --memory="1g" --memory-reservation="750m" ubuntu

Docker Container CPU-Nutzung begrenzen

Genau wie bei der RAM-Nutzung gibt es auch bei Docker Containern keine Standardbegrenzung für die CPU des Hosts. Wenn du Containern unbegrenzte CPU-Nutzung gibst, kann das zu Problemen führen.

Es gibt mehrere Möglichkeiten zu definieren, wie viel CPU-Ressourcen du den Containern zuweisen möchtest.

Wenn du zum Beispiel einen Host mit 2 CPUs hast und einem Container Zugriff auf eine davon geben willst, verwende die Option --cpus="1.0". Das Kommando zum Ausführen eines Ubuntu Containers mit Zugriff auf 1 CPU würde lauten:

docker run -it --cpus="1.0" ubuntu

Du kannst auch die --cpu-shares option verwenden, um dem Container einen größeren oder kleineren Anteil an CPU-Zyklen zu geben. Standardmäßig ist dies auf 1024 gesetzt.

Um einen Container mit geringeren CPU-Anteilen zu betreiben, führe aus:

docker run -it --cpus-shares="700" ubuntu

Fazit

Jetzt kannst du Docker Container laufen lassen, ohne dir Sorgen machen zu müssen, dass sie sich gegenseitig auf die Füße treten und zu viele Ressourcen verbrauchen.