Middle
Jak odbywa się ograniczanie zasobów w Dockerze?
sobes.tech AI
Odpowiedź od AI
Ograniczenie zasobów w Dockerze realizowane jest za pomocą namespaces i grup kontrolnych (cgroups) jądra Linux. Namespaces izolują zasoby systemowe, a cgroups ograniczają, rozliczają i izolują użycie zasobów dla grup procesów.
Kluczowe parametry do ograniczania zasobów:
- CPU:
--cpu-shares: Wartość ważona do dystrybucji CPU między kontenerami, gdy jest ograniczona. Domyślna wartość 1024.--cpu-quota: Maksymalna ilość czasu CPU (w mikrosekundach) do wykorzystania w okresie (--cpu-period). Domyślnie 100000.--cpu-period: Okres czasu CPU (w mikrosekundach) dla--cpu-quota.--cpuset-cpus: Wskazuje, które rdzenie CPU mogą używać kontenery.
- Pamięć:
--memory: Sztywny limit pamięci RAM. Jeśli kontener go przekroczy, może zostać zakończony.--memory-swap: Sztywny limit sumy pamięci RAM i swap.--memory-reservation: Miękki limit pamięci RAM. Przy ograniczeniu zasobów kontenery z mniejszą rezerwacją będą wcześniej przenoszone do swapu niż te z większąmemory-reservation.--kernel-memory: Limit pamięci jądra.--memswap-swappiness: Jak chętnie jądro będzie korzystać z swapu dla tego kontenera (od 0 do 100). 0 - bardzo niechętnie, 100 - bardzo chętnie.
- Operacje blokowe I/O:
--blkio-weight: Wartość ważona do dystrybucji I/O między kontenerami.--blkio-weight-device: Wartość ważona dla konkretnego urządzenia blokowego.--device-read-bps: Limit prędkości odczytu z urządzenia (w bajtach na sekundę).--device-write-bps: Limit prędkości zapisu na urządzenie (w bajtach na sekundę).--device-read-iops: Limit liczby operacji odczytu z urządzenia (operacje na sekundę).--device-write-iops: Limit liczby operacji zapisu na urządzenie (operacje na sekundę).
- Sieć:
- Ograniczenie zasobów sieciowych bezpośrednio przez flagi
docker runjest ograniczone. Zazwyczaj używa się zewnętrznych narzędzi, takich jaktc(traffic control), netem lub narzędzi orkiestracyjnych (Kubernetes NetworkPolicy).
- Ograniczenie zasobów sieciowych bezpośrednio przez flagi
Przykłady użycia:
# Uruchomienie kontenera z ograniczeniem CPU Shares i pamięci
docker run -d --cpu-shares 512 --memory 512m alpine sleep infinity
# Uruchomienie kontenera z sztywnym limitem CPU Quota i pamięci
docker run -d --cpu-quota 50000 --memory 1g alpine sleep infinity
Docker konwertuje te flagi na odpowiednie ustawienia cgroups dla grupy procesów uruchomionej wewnątrz kontenera. Ustawienia te są zarządzane przez system plików /sys/fs/cgroup wewnątrz kontenera (przy montowaniu) i na hoście.