Docker Compose - Memóriakorlátok

Docker Compose Memory Limits



A Docker compose hatékony segédprogram. Időt takarít meg és csökkenti a hibákat a Dockerized alkalmazás telepítésekor. Általában nem jó ötlet a teljes köteget, beleértve a kezelőfelületet, az adatbázis -kiszolgálót stb., Egyetlen tárolóból futtatni.

Különböző konténereket fonunk fel az alkalmazások különböző terheléseinek kezelésére, és ezt a Docker Compose -t használjuk. Minden logikailag eltérő munkaterhelés másként szerepel szolgáltatás . Például a kezelőfelület http -kiszolgálója Apache vagy Nginx -képet futtató kezelőfelület -szolgáltatásként jelenik meg.







A docker-compose.yml fájlban minden szolgáltatás, azok hálózati igényei, tárolási követelmények stb. Megadhatók. Itt a memóriakihasználás meghatározására fogunk összpontosítani.



A következő eszközökre lesz szüksége az arzenáljában, hogy kövesse:



  1. A Docker alapvető ismerete
  2. Docker Windows vagy Mac számára vagy ha Linuxot futtat, DockerCE Linuxra
  3. Docker Összeállítás bináris y (a Windows és a Mac felhasználók már telepítik ezt)

Ragaszkodunk a 2.4-es verzióhoz a docker-compose.yml fájljainkhoz, mivel támogatja a Docker Engine 17.12 és újabb verzióit. Mehettünk volna a 3. verzióval, amely újabb, de nem támogatja a régi memóriakorlátozási szintaxist. Ha megpróbálja használni az újabb szintaxist, akkor ragaszkodik ahhoz, hogy a Docker Swarm módban legyen használatban. Tehát, hogy a Docker rendszeres felhasználók számára egyszerű legyen a dolog, maradok a 2.4 -es verziónál





A legtöbb kód ugyanúgy működne a 3 -as verziónál, és ahol eltérés lesz, megemlítem a Docker Swarm felhasználók újabb szintaxisát.

Alkalmazásminta

Próbáljunk meg egy egyszerű Nginx szolgáltatást futtatni a 80-as porton, először a CLI, majd egy egyszerű docker-compose.yml használatával. A következő részben feltárjuk memóriakorlátait és kihasználtságát, valamint módosítjuk a docker-compose.yml fájlunkat, hogy lássuk, hogyan szabják ki az egyéni korlátozásokat.



Indítsunk el egy egyszerű nginx szervert a Docker-CLI használatával:

$ docker run -d --name my -nginx -p80:80nginx: legújabb

Láthatja, hogy az nginx szerver működik, ha meglátogatja http: // localhost vagy cserélje ki az lcoalhost -ot

A Docker -gazdagép IP -címével. Ez a tároló potenciálisan kihasználhatja a Docker -gazdagép teljes memóriáját (esetünkben körülbelül 2 GB). A memóriakihasználtság ellenőrzéséhez többek között a következő parancsot használhatjuk:

$ docker statisztika my-nginx

TARTÁLYAzonosító Név CPU % MEM USGE/LIMIT MEM % NET I/O BLOCK I/O PIDS
6eb0091c0cf2 my-nginx0,00%2.133MB / 1.934GiB0,11% 3.14kB / 2.13kB 0B / 0B2

A MEM USGE/LIMIT értéke 2,133 MB a teljes 1,934GiB -nál. Távolítsuk el ezt a tárolót, és kezdjük el írni a dokkoló által írt szkripteket.

$ docker állítsa le a my-nginx-et
$ docker rm my-nginx

Ekvivalens ym fájl

A fenti konténer a következő lépések végrehajtásával hozható létre:

$ mkdir my-compose
$ cd my-compose
$ vim docker-compose.yml

Létrehozunk egy új üres könyvtárat, és létrehozunk benne egy docker-compose.yml fájlt. Amikor a docker-compose-t ebből a könyvtárból futtatjuk, az megkeresi ezt a fájlt (figyelmen kívül hagyva minden mást), és ennek megfelelően hozza létre a telepítést. Adja hozzá a következő tartalmat ebbe a .yml fájlba.

változat:„3”
szolgáltatások:
my-nginx:
kép: nginx: legújabb
portok:
-'80: 80 '

$ docker -compose up -d

A -d jelző úgy kerül hozzáadásra, hogy az újonnan létrehozott tárolók a háttérben futnak. Ellenkező esetben a terminál csatlakozik a konténerekhez, és jelentéseket kezd nyomtatni belőle. Most láthatjuk az újonnan létrehozott tároló (k) statisztikáit:

$ docker statisztika -minden

TARTÁLYAzonosító Név CPU% MEM USGE/LIMIT MEM% NET I/O BLOCK I/O PIDS
5f8a1e2c08ac my-compose_my-nginx_10,00% 2.25MiB/1.934GiB0,11% 1.65kB/0B 7.35MB/0B2

Észre fogja venni, hogy hasonló tárolót hoztak létre, mint korábban, hasonló memóriakorlátokkal és akár kihasználtsággal. Ugyanabból a könyvtárból, amely tartalmazza az yml fájlt. Futtassa a következő parancsot az újonnan létrehozott tároló törléséhez a létrehozott ügyfélhíd -hálózattal együtt.

$dokkoló-komponál le

Ezzel a dokkoló tiszta állapotba kerül, a létrehozott kötetek kivételével (mi nem hoztunk létre, így ez nem jelent gondot.)

Memóriakorlátok és memóriafoglalások

A memóriakorlátok és a memóriafoglalások két különböző szempont, amelyek biztosítják az alkalmazások és a tetején futó Docker hoszt zökkenőmentes működését.

Általánosságban elmondható, hogy a Memóriakorlát felső korlátot ír elő a Docker -tároló által potenciálisan használható memória mennyiségére. Alapértelmezés szerint a Docker tároló, mint bármely más rendszerfolyamat, a Docker gazdagép teljes rendelkezésre álló memóriáját használhatja. Ez memóriahiány-kivételt okozhat, és a rendszer nagyon összeomolhat. Még akkor is, ha erről szó sincs, mégis kiéheztethet más folyamatokat (beleértve a többi tárolót is) az értékes erőforrásokból, és ismét károsíthatja a teljesítményt. A memóriakorlátok biztosítják, hogy az erőforrásra éhes tárolók ne lépjék túl a bizonyos korlátot. Ez korlátozza a rosszul megírt alkalmazás robbantási sugarát néhány tárolóra, nem pedig az egész gazdagépre.

A memóriafoglalások viszont kevésbé merevek. Amikor a rendszerben kevés a memória, és megpróbál visszaállítani annak egy részét. Megpróbálja a tároló memóriafelhasználását a foglalási korlát alá vagy alá hozni. Ha azonban rengeteg memória van, akkor az alkalmazás kibővítheti a merev memóriakorlátot.

Összefoglalni:

  1. Memóriakorlát: A tároló számára rendelkezésre álló memória mennyiségének szigorú felső határa.
  2. Memóriafoglalás: Ezt a minimális memóriamennyiségnek kell beállítani, amire egy alkalmazásnak megfelelően szüksége van. Tehát nem ütközik össze vagy nem viselkedik rosszul, ha a rendszer megpróbálja visszaszerezni a memória egy részét.

Ha a memóriafoglalás nagyobb, mint a memóriakorlát, akkor a memóriakorlát az elsőbbség.

Memóriakorlátok és lefoglalás megadása

2. verzió

Térjünk vissza a korábban írt docker-compose.yml-hez, és adjunk hozzá memóriakorlátot. Az előfeltételek részben tárgyalt okok miatt módosítsa a verziót 2.4 -re.

változat:„2.4”
szolgáltatások:
my-nginx:
kép: nginx: legújabb
portok:
-'80: 80 '
mem_limit: 300m

Az utolsó sor a my-nginx szolgáltatás korlátját 300 MB-ra állítja. Ki -t használhat KiB -re, g -t GiB -re és b -re csak bájtokra. Az előtte lévő számnak azonban egész számnak kell lennie. Nem használhat olyan értékeket, mint a 2,4 m, helyette 2400 k -t kell használnia. Ha most futsz:

$ docker stat -all

TARTÁLYAzonosító Név CPU % MEM USGE/LIMIT MEM % NET I/O BLOCK I/O PIDS
44114d785d0a my-compose_my-nginx_10,00% 2.141MB/300MiB0,71% 1.16kB/0B 0B/0B2

Észre fogja venni, hogy a memória korlátja 300 MiB. A memóriafoglalás beállítása ugyanolyan egyszerű, csak adjon hozzá egy mem_reservation: xxx sort a végén.

változat:„2.4”
szolgáltatások:
my-nginx:
kép: nginx: legújabb
portok:
-'80: 80 '
mem_limit: 300m
mem_foglalás: 100m

3. verzió (opcionális)

A harmadik verzió használatához rajzolási módban kell futtatnia a Docker alkalmazást. Windows és Mac esetén a Docker beállítások menüjében engedélyezheti. A Linux felhasználóknak futtatniuk kell a docker swarm init programot. Erről további információk találhatók itt . Ez azonban nem szükséges lépés, és ha nem engedélyezte, az is jó. Ez a rész az embereknek szól már raj módban fut, és kihasználhatja az újabb verziót.

változat:„3”
szolgáltatások:
my-nginx:
kép: nginx: legújabb
portok:
-'80: 80 '
telepítés:
erőforrások:
korlátok:
memória: 300 m
foglalások:
memória: 100 m

Mindezt az erőforrások alatt határozzuk meg. A korlátok és a foglalás saját kulcsaivá válnak, és a memória csak egy a sok itt kezelt erőforrás közül. A CPU egy másik fontos paraméter.

További információ

A docker-compose-ról többet megtudhat a hivatalos dokumentációból ide linkelve . Miután megértette a kompozíciós fájl írásának lényegét, a dokumentáció segítséget nyújthat a különböző paraméterekben.

Nem kell mindent tudnia, csak keresse meg, mit igényel az alkalmazása, és a referencia útmutatást ad ennek megvalósításához.