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:
- A Docker alapvető ismerete
- Docker Windows vagy Mac számára vagy ha Linuxot futtat, DockerCE Linuxra
- 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újabbLá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-nginxTARTÁ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 -mindenTARTÁ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 leEzzel 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:
- Memóriakorlát: A tároló számára rendelkezésre álló memória mennyiségének szigorú felső határa.
- 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 -allTARTÁ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.