Skip to content
BotServBotServ
DockerRessourcencgroupsLimitsSpeicher

Docker-Ressourcenlimits setzen

CPU-, RAM- und IO-Limits für Docker-Container. cgroups, Compose und Memory-Reservierungen.

S

schutzgeist

2 min read
Docker-Ressourcenlimits setzen

Docker-Ressourcenlimits setzen

Was dieser Artikel über Docker-Ressourcenlimits behandelt

  • Warum Limits wichtig sind.
  • Wie man CPU und RAM begrenzt.
  • Unterschied zwischen limits und reservations.
  • Spezialfälle wie OOM-Killer und Swap.
  • Praktische Beispiele in Compose.

Einleitung: Docker-Ressourcenlimits setzen

Docker-Container teilen sich die Ressourcen des Hosts. Ohne Begrenzungen kann ein einzelner Container alle CPU, das ganze RAM oder die Festplatten-I/O beanspruchen. Das führt zu langsamen anderen Diensten, OOM-Abbrüchen oder sogar zum Absturz des Hosts. Ressourcenlimits sorgen dafür, dass jeder Container nur das bekommt, was er braucht, und der Rest des Systems stabil bleibt.

Dieser Artikel zeigt, wie man CPU-, RAM- und IO-Limits in Docker und Compose setzt.

Wichtige Begriffe

  • cgroups: Linux-Gruppen für Ressourcenverwaltung.
  • OOM: Out Of Memory, Speicherüberlauf.
  • Swap: Auslagerungsspeicher.
  • limits: Maximale Ressourcen.
  • reservations: Reservierte Ressourcen.
  • shares: CPU-Priorisierung.
  • cpus: Maximale CPU-Zeit.
  • mem_limit: Maximale RAM-Menge.

Warum Limits setzen?

  • Stabilität des Hosts.
  • Fairer Ressourcenanteil.
  • Planbarkeit.
  • Schutz vor fehlerhaften Anwendungen.
  • Bessere Kostenkontrolle in der Cloud.

CPU-Limit

In compose.yaml:

services:
  app:
    image: mein-app
    deploy:
      resources:
        limits:
          cpus: '1.5'

Das begrenzt auf 1,5 CPU-Kerne.

RAM-Limit

services:
  app:
    image: mein-app
    deploy:
      resources:
        limits:
          memory: 512M
        reservations:
          memory: 128M

reservations sagt Docker, dass 128 MB reserviert werden, limits begrenzt auf 512 MB.

CPU und RAM kombiniert

services:
  app:
    image: mein-app
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 1G
        reservations:
          cpus: '0.5'
          memory: 256M

docker run

docker run -d --name app --memory=512m --cpus=1.5 mein-app

Swap-Begrenzung

docker run -d --name app --memory=512m --memory-swap=1g mein-app

--memory-swap ist die Summe aus RAM und Swap. --memory-swap=512m deaktiviert Swap.

OOM-Killer

Wenn ein Container sein RAM-Limit überschreitet, wird er vom Kernel beendet. Docker startet ihn je nach Restart-Policy neu. Bei dauerhaften OOM-Fehlern muss das Limit erhöht oder der Fehler in der Anwendung behoben werden.

CPU-Shares

Für weiche Priorisierung:

services:
  app:
    deploy:
      resources:
        limits:
          cpus: '1'
        reservations:
          cpus: '0.2'

Harte Limits mit cpus haben Vorrang.

PIDs limitieren

docker run --pids-limit=1000 mein-app

Schützt vor Fork-Bomben.

IO-Limits

docker run --device-read-bps /dev/sda:10mb --device-write-bps /dev/sda:10mb mein-app

Für Compose gibt es diese Optionen als blkio_config.

Swarm-Deploy

In Swarm sind limits und reservations wichtig für Scheduling:

deploy:
  resources:
    limits:
      cpus: '1'
      memory: 512M
    reservations:
      cpus: '0.5'
      memory: 256M

Swarm platziert Container nur auf Nodes mit genug reservierten Ressourcen.

Tipps

  • Limits ausreichend testen.
  • Nicht zu knapp bemessen.
  • Reservierungen eher konservativ setzen.
  • OOM-Ereignisse überwachen.
  • Swap deaktivieren für latenzkritische Container.
  • CPU-Shares für weiche Priorisierung, harte Limits für absolute Begrenzung.

Typische Stolpersteine

  • Zu knappe Limits: Container stürzt mit OOM ab.
  • Keine Reservierung: Swarm platziert Container schlecht.
  • Swap nicht beachtet: Langsame Performance wegen Auslagerung.
  • Falsche Einheit: 1G vs. 1024M.
  • Kernel-Cgroups: Alte cgroups v1 können einige Optionen anders interpretieren.

FAQ: Docker-Ressourcenlimits

Was ist der Unterschied zwischen limits und reservations? limits begrenzt maximal, reservations reserviert Ressourcen für Swarm und Planung.

Was passiert bei OOM? Der Container wird beendet und je nach Restart-Policy neu gestartet.

Sollte ich Swap abschalten? Bei Anwendungen, die keine Verzögerung tolerieren, ja.

Kann ich GPU-RAM limitieren? Nicht mit Docker-Standardmitteln. MGX und NVIDIA MIG erlauben GPU-Partitionierung.

Gibt es Limits auch für docker run? Ja, mit --cpus, --memory und weiteren Optionen.

Quellen und weiterführende Literatur

Zusammenfassung: Docker-Ressourcenlimits setzen

Ressourcenlimits schützen Docker-Hosts vor übermässigem Verbrauch und sorgen für faire Verteilung. CPU, RAM und gegebenenfalls IO können begrenzt werden. In Compose über deploy.resources und in docker run mit --cpus und --memory. Wer Limits realistisch setzt, Reservierungen bei Swarm nutzt und Swap berücksichtigt, erhält ein stabiles und planbares Container-Umfeld.

Zurück zum KI Blog
Share:

Ähnliche Beiträge