Docker Container Memory Verbrauch begrenzen
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