Sobes.tech
Middle

Hogyan történik az erőforrás-korlátozás a Dockerben?

sobes.tech MI

Válasz az MI-től

A Docker cgroups (konténercsoportok) és namespace-ek segítségével korlátozza és izolálja a konténerek erőforrásait.

  • cgroups lehetővé teszik az erőforrások (CPU, memória, I/O, hálózat) használatának korlátozását és nyomon követését.
  • Namespace-ek biztosítják a folyamatok, hálózat, csatolt pontok, felhasználók izolációját.

A fő erőforrás-korlátozási paraméterek:

  • CPU:
    • --cpu-shares: Meghatározza a konténer relatív "fontosságát". A konténer a rendelkezésre álló CPU arányában kap részt, összehasonlítva más konténerekkel, amelyek --cpu-shares-t használnak. Alapértelmezett érték 1024.
    • --cpu-quota: Korlátozza a CPU használatát abszolút értékkel mikro-szekundumban a --cpu-period periódus alatt. Például, --cpu-period=100000 --cpu-quota=50000 50%-át jelenti egy magnak.
    • --cpuset-cpus: Korlátozza a konténert adott processzormagokra (pl. 0,1 vagy 0-3).
    • --cpuset-mems: Korlátozza a konténer hozzáférését bizonyos NUMA memória csomópontokhoz.
  • Memória:
    • --memory: Korlátozza a rendelkezésre álló RAM mennyiségét a konténer számára. Támogatott szuffikszek: b, k, m, g.
    • --memory-swap: Beállítja az összes memória (RAM + Swap) határát. Ha kevesebb, mint --memory, a konténer nem használhat swap-ot. Ha --memory-swap nagyobb, mint --memory, akkor a különbség a maximálisan elérhető swap.
    • --memory-swappiness: Beállítja a swappiness tényezőt a konténer számára (alapértelmezett -1, ami a hoszt beállításainak felel meg).
    • --memory-reservation: Lágy memória-korlátozás. A konténer nem fog kevesebbet használni, mint ez az érték, ha elérhető, de többet is fogyaszthat, ameddig az --memory érték engedi. A rendszer megpróbálja fenntartani ezt az értéket nyomás alatt.
    • --kernel-memory: Korlátozza a kernel memória használatát a konténer számára.
  • I/O (Blokk I/O):
    • --blkio-weight: Meghatározza az arányos súlyt a blokk alapú bemenet/kimenet számára (alapértelmezett 500). Hatással van az I/O sávszélesség elosztására.
    • --blkio-weight-device: Beállítja a súlyt egy adott blokk eszközre.
    • --device-read-bps / --device-write-bps: Korlátozza az olvasási/írási sebességet (byte/sec) egy adott eszközre.
    • --device-read-iops / --device-write-iops: Korlátozza az olvasási/írási műveletek számát másodpercenként egy adott eszközön.
  • Hálózat: Szó szerinti korlátozás a hálózati interfészek konfigurálásával a hálózati namespace-ben vagy operációs rendszer szintű eszközökkel (pl. tc).

Használati példa:

# Konténer indítása CPU (50% egy mag) és memória (512MB) korlátozással
docker run -d --name my_limited_app \
    --cpu-quota=50000 --cpu-period=100000 \
    --memory=512m \
    my_image:latest
# Konténer indítása CPU korlátozással 0 és 1 magokra, 1GB memória és blokk súly 700
docker run -d --name another_limited_app \
    --cpuset-cpus="0,1" \
    --memory=1g \
    --blkio-weight=700 \
    another_image:latest