Das Setzen von Resource Limits in Docker Compose ist ein essenzieller Bestandteil der Container-Orchestrierung, um die Stabilität von Systemen zu gewährleisten und Ressourcen fair unter den Containern zu verteilen. Dabei können CPU, RAM und andere Ressourcen für einzelne Container begrenzt werden, um Überlastungen zu vermeiden. In diesem Tutorial wird gezeigt, wie man Resource Limits für Container konfiguriert und welche Best Practices dabei zu beachten sind.
Grundlagen von Resource Limits
Docker erlaubt die Beschränkung von CPU und RAM für jeden Container. Dies verhindert, dass ein einzelner Container das gesamte Host-System beansprucht und andere Dienste beeinträchtigt. Die Limits können in Docker Compose direkt im Service definiert werden.
- CPU-Limit: Bestimmt, wie viel CPU-Zeit der Container maximal nutzen darf
- Memory-Limit: Legt den maximalen Arbeitsspeicher fest
- Memory Reservation: Reserviert Speicher für den Container, der garantiert verfügbar ist
- Swap-Limit: Optional, beschränkt den Swap-Speicher für Container
Syntax in Docker Compose
In Docker Compose werden Ressourcen unter deploy.resources.limits und deploy.resources.reservations definiert.
services:
myservice:
image: myorg/service:latest
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
reservations:
cpus: '0.25'
memory: 256M
limitsdefiniert die maximal nutzbaren Ressourcenreservationsgarantiert Mindestressourcen- Die CPU-Angabe erfolgt in Bruchteilen einer CPU (z. B. 0.5 = 50 % einer CPU)
- Die Memory-Angabe kann in M (Megabyte) oder G (Gigabyte) erfolgen
Beispiel: Webservice mit CPU- und Memory-Limits
services:
web:
image: nginx:latest
container_name: web
ports:
- "80:80"
deploy:
resources:
limits:
cpus: '1.0'
memory: 1024M
reservations:
cpus: '0.5'
memory: 512M
- Der Nginx-Container kann maximal eine CPU nutzen und 1 GB RAM verbrauchen
- Mindestens stehen 0.5 CPUs und 512 MB RAM garantiert zur Verfügung
- So wird die Stabilität des Hosts gewährleistet, auch bei hoher Last
Beispiel: Datenbank mit Limits und Swap-Beschränkung
services:
db:
image: postgres:16
container_name: db
environment:
POSTGRES_USER: appuser
POSTGRES_PASSWORD: securepassword
POSTGRES_DB: appdb
deploy:
resources:
limits:
cpus: '2.0'
memory: 2G
reservations:
cpus: '1.0'
memory: 1G
mem_swap_limit: 2G
volumes:
- db_data:/var/lib/postgresql/data
- Swap-Limit verhindert, dass der Container übermäßig auf Auslagerung zugreift
- Garantierte Reservierung stellt sicher, dass die Datenbank stets genügend RAM erhält
- Limits schützen den Host vor Memory Exhaustion und CPU-Überlastung
Best Practices
- Für produktive Services immer Limits und Reservations definieren
- CPU-Limits sinnvoll auf die Anzahl verfügbarer CPUs abstimmen
- Memory-Reservation nutzen, um stabilen Betrieb auch bei Spitzenlast zu gewährleisten
- Bei Services mit hohem Speicherbedarf (Datenbanken, Caches) großzügige Limits setzen
- Monitoring der Ressourcennutzung implementieren (z. B. Docker stats, Prometheus)
- Versionierte Images und Compose-Dateien verwenden, um Rollbacks und Updates zu erleichtern
- In Multi-Container-Stacks Limits pro Service abstimmen, um Fairness und Stabilität zu gewährleisten
Stack starten und Limits überprüfen
Stack starten:
docker-compose up -d
Ressourcennutzung überwachen:
docker stats
docker inspect myservice | grep -i -A 5 'Resources'
- Mit
docker statskönnen CPU- und Memory-Verbrauch in Echtzeit beobachtet werden docker inspectzeigt die konfigurierten Limits und Reservations
Updatefähigkeit
Limits bleiben auch nach Updates bestehen. Neue Images können per Pull aktualisiert werden, während die Ressourcenbeschränkungen aus der Compose-Datei weiterhin greifen.
docker-compose pull
docker-compose up -d
Zusammenfassung
Das Setzen von CPU- und RAM-Limits in Docker Compose ist essenziell, um Container stabil zu betreiben und Host-Systeme vor Überlastung zu schützen. In Kombination mit persistenten Volumes, Netzwerken, Healthchecks und Versionierung der Images entsteht eine robuste und wartbare Umgebung für Microservices, Datenbanken oder Webapplikationen. Monitoring und regelmäßige Anpassung der Limits sichern die langfristige Stabilität und Performance der Container-Infrastruktur.
Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3
Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.
Meine Leistungen umfassen:
-
Professionelle Konfiguration von Routern und Switches
-
Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen
-
Erstellung von Topologien und Simulationen in Cisco Packet Tracer
-
Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG
-
Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible
-
Erstellung von Skripten für wiederkehrende Netzwerkaufgaben
-
Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege
-
Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting
Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.











