Docker-Ressourcenlimits setzen
Was dieser Artikel über Docker-Ressourcenlimits behandelt
- Warum Limits wichtig sind.
- Wie man CPU und RAM begrenzt.
- Unterschied zwischen
limitsundreservations. - 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:
1Gvs.1024M. - Kernel-Cgroups: Alte cgroups v1 können einige Optionen anders interpretieren.
Weiterführende Links und Infos
- BotServ.de Docker Container-Neustarts
- BotServ.de Docker Monitoring
- BotServ.de Docker Sicherheit
- BotServ.de Docker Swarm
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
- Docker Resource Constraints: https://docs.docker.com/config/containers/resource_constraints/
- Compose Resources: https://docs.docker.com/compose/compose-file/05-services/#resources
- cgroups: https://docs.kernel.org/admin-guide/cgroup-v2.html
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.


