Docker Container Memory Verbrauch begrenzen

Aus Laub-Home Wiki

Docker Container nehmen sich im Worst Case soviel Ram, wie der Docker Host zur Verfügung hat. Das heißt auch, läuft wegen einem Container der Host RAM voll, fängt dieser an zu swappen und killt dann munter Prozesse, bis wieder RAM oder Swap Space frei ist. Deshalb gibt es die Möglichkeit jedem Container mittels Parameter zu sagen, wieviel RAM (Memory) er nutzen darf. Ähnlich wie bei einer Virtuellen Maschine.

Hierfür wir einfach der Parameter -m bzw. --memory verwendet. Die Memory Anzahl wird dann zum Beispiel 40 Megabyte mit -m 40m angegeben. Beispiel für das Starten eines Alpine Containers:

docker run --rm -m 35m alpine sh -c "echo 'Hallo Welt'"

Sollte dieser Befehl den folgenden Fehler werfen:

WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap.

dann bitte die GRUP Konfiguration wie folgt ändern: /etc/default/grub.d/cmd.cfg

GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

dann aktivieren und das System Neustarten:

grub-update
reboot

Docker Compose Memory Limit und CPU Limit

Auch bei Docker Compose wird im docker-compose.yml ein Parameter angegeben. Das Beispiel unten startet einen Redis Container und erlaubt (limits) diesem die Nutzung von maximal 50 Megabyte RAM und 0,5 (50%) eines CPU Cores. Reserviert (reservations) aber für diesen immer 25% (0.25) CPU Cores und mindestens 20 Megabyte RAM.

version: "3.7"
services:
  redis:
    image: redis:alpine
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 50M
        reservations:
          cpus: '0.25'
          memory: 20M