Resource Limits setzen: CPU und RAM für Container begrenzen

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
  • limits definiert die maximal nutzbaren Ressourcen
  • reservations garantiert 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 stats können CPU- und Memory-Verbrauch in Echtzeit beobachtet werden
  • docker inspect zeigt 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.

Related Articles