Sobes.tech
Middle

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

sobes.tech MI

Válasz az MI-től

A Docker erőforrás-korlátozása a Linux kernel namespace-eken és control groups (cgroups) segítségével valósul meg. A namespace-ek izolálják a rendszer erőforrásait, míg a cgroups korlátozzák, nyilvántartják és izolálják a folyamatcsoportok erőforrás-használatát.

A fő paraméterek az erőforrások korlátozására:

  • CPU:
    • --cpu-shares: Súlyérték a CPU elosztásához a konténerek között, amikor az korlátozott. Alapértelmezett érték 1024.
    • --cpu-quota: Maximális CPU idő (mikroszekundumokban), amit a --cpu-period alatt használhatnak. Alapértelmezett 100000.
    • --cpu-period: A CPU időszak (mikroszekundumokban) a --cpu-quota-hoz.
    • --cpuset-cpus: Megmutatja, mely CPU magokat használhatják a konténerek.
  • Memória:
    • --memory: Szilárd RAM memóriahatár. Ha a konténer ezt meghaladja, leállhat.
    • --memory-swap: A RAM és swap összegének szilárd határa.
    • --memory-reservation: Puha RAM memóriahatár. Erőforrás-korlátozás esetén a kisebb foglalással rendelkező konténerek előbb kerülnek swap-ra, mint a nagyobb memory-reservation-nel rendelkezőek.
    • --kernel-memory: A kernel memóriahatár.
    • --memswap-swappiness: Mennyire hajlandó a kernel swap-ot használni ehhez a konténerhez (0-tól 100-ig). 0 - nagyon nem hajlandó, 100 - nagyon hajlandó.
  • Blokkoló I/O:
    • --blkio-weight: Súlyérték az I/O elosztásához a konténerek között.
    • --blkio-weight-device: Súlyérték egy adott blokk eszközhöz.
    • --device-read-bps: Az eszköz olvasási sebességének határa (byte/sec).
    • --device-write-bps: Az eszköz írási sebességének határa (byte/sec).
    • --device-read-iops: Az eszköz olvasási műveletek száma (műveletek/sec).
    • --device-write-iops: Az eszköz írási műveletek száma (műveletek/sec).
  • Hálózat:
    • A hálózati erőforrások közvetlen korlátozása a docker run zászlókkal korlátozott. Általában külső eszközöket használnak, például tc (traffic control), netem vagy orkestrációs eszközöket (Kubernetes NetworkPolicy).

Használati példák:

# Konténer indítása CPU Share és memória korlátozással
docker run -d --cpu-shares 512 --memory 512m alpine sleep infinity

# Konténer indítása szigorú CPU Quota és memória korlátozással
docker run -d --cpu-quota 50000 --memory 1g alpine sleep infinity

A Docker ezeket a zászlókat megfelelő cgroups beállításokra alakítja át a konténeren belüli folyamatcsoport számára. Ezek a beállítások a /sys/fs/cgroup virtuális fájlrendszeren keresztül kezelhetők a konténeren belül (csatoláskor) és a gazda rendszeren egyaránt.