Middle
Wie erfolgt die Ressourcenbeschränkung in Docker?
sobes.tech KI
Antwort von AI
Die Ressourcenbegrenzung in Docker erfolgt durch Namespaces und Control Groups (cgroups) des Linux-Kernels. Namespaces isolieren Systemressourcen, während cgroups die Nutzung von Ressourcen für Prozessgruppen einschränken, erfassen und isolieren.
Wichtige Parameter zur Ressourcenbegrenzung:
- CPU:
--cpu-shares: Gewichteter Wert zur Verteilung der CPU zwischen Containern, wenn sie begrenzt ist. Standardwert 1024.--cpu-quota: Maximale CPU-Zeit (in Mikrosekunden), die innerhalb eines Zeitraums (--cpu-period) genutzt werden darf. Standard 100000.--cpu-period: Zeitraum in Mikrosekunden für--cpu-quota.--cpuset-cpus: Gibt an, welche CPU-Kerne vom Container genutzt werden dürfen.
- Speicher:
--memory: Feste Begrenzung des Arbeitsspeichers. Überschreitet der Container diese Grenze, kann er beendet werden.--memory-swap: Feste Begrenzung der Summe aus RAM und Swap.--memory-reservation: Weiche Begrenzung des Arbeitsspeichers. Bei Ressourcenbeschränkungen werden Container mit geringerer Reservierung eher in den Swap verschoben.--kernel-memory: Begrenzung des Kernel-Speichers.--memswap-swappiness: Wie bereitwillig der Kernel Swap für diesen Container nutzt (0 bis 100). 0 - sehr unwillig, 100 - sehr willig.
- Block-I/O:
--blkio-weight: Gewichteter Wert für die Verteilung des I/O zwischen Containern.--blkio-weight-device: Gewichteter Wert für ein spezielles Blockgerät.--device-read-bps: Begrenzung der Lesegeschwindigkeit des Geräts (Bytes pro Sekunde).--device-write-bps: Begrenzung der Schreibgeschwindigkeit auf das Gerät (Bytes pro Sekunde).--device-read-iops: Begrenzung der Anzahl der Leseoperationen des Geräts (Operationen pro Sekunde).--device-write-iops: Begrenzung der Anzahl der Schreiboperationen auf das Gerät (Operationen pro Sekunde).
- Netzwerk:
- Die Begrenzung der Netzwerkressourcen direkt über die
docker run-Flags ist eingeschränkt. In der Regel werden externe Tools wietc(Traffic Control), netem oder Orchestrierungstools (Kubernetes NetworkPolicy) verwendet.
- Die Begrenzung der Netzwerkressourcen direkt über die
Beispiele:
# Container mit CPU-Share- und Memory-Limit starten
docker run -d --cpu-shares 512 --memory 512m alpine sleep infinity
# Container mit striktem CPU-Quota- und Memory-Limit starten
docker run -d --cpu-quota 50000 --memory 1g alpine sleep infinity
Docker wandelt diese Flags in entsprechende cgroups-Einstellungen für die Prozessgruppe um, die innerhalb des Containers läuft. Diese Einstellungen werden über das virtuelle Dateisystem /sys/fs/cgroup im Container (bei Mount) und auf dem Host-System verwaltet.