Docker Compose - mälupiirangud

Docker Compose Memory Limits



Dockeri koostamine on võimas utiliit. See säästab aega ja vähendab vigu Dockerizedi rakenduse juurutamisel. Tavaliselt ei ole hea mõte käivitada kogu virna, sealhulgas kasutajaliides, andmebaasiserver jne, ühe konteineri seest.

Me keerutame kokku erinevaid konteinereid, et tulla toime rakenduse erinevate töökoormustega, ja kasutame selle hõlpsaks tegemiseks Docker Compose'i. Iga loogiliselt erinev töökoormus on loetletud erineva tööna teenus . Näiteks kuvatakse teie kasutajaliidese http -server kasutajaliidesena, mis käitab Apache või Nginxi pilti konteinerina.







Kõik teenused, nende võrguvõimalused, salvestusnõuded jne saab määrata failis docker-compose.yml. Siin keskendume mälu kasutamise täpsustamisele.



Selle järgimiseks vajate oma arsenalis järgmisi tööriistu:



  1. Põhiteadmised Dockerist
  2. Docker Windowsi või Maci jaoks või kui kasutate Linuxit, DockerCE Linuxile
  3. Docker Koosta binaar y (Windowsi ja Maci kasutajatel on see juba installitud)

Jätkame oma failide docker-compose.yml versiooniga 2.4, kuna see toetab Docker Engine'i versiooni 17.12 ja uuemaid. Oleksime võinud minna versiooniga 3, mis on uuem, kuid see ei toeta vana mälu piirangu süntaksit. Kui proovite kasutada uuemat süntaksit, nõuab see hoopis Dockeri kasutamist Swarm -režiimis. Seega, et Dockeri tavakasutajatel oleks asi lihtne, jään versioonile 2.4





Suurem osa koodist töötaks sama ka versiooni 3 puhul ja seal, kus on erinevusi, mainin Docker Swarmi kasutajate uuemat süntaksi.

Näidisrakendus

Proovime käivitada lihtsa Nginxi teenuse pordis 80, kasutades kõigepealt CLI-d ja seejärel lihtsat docker-compose.yml. Järgmises osas uurime selle mälupiiranguid ja kasutamist ning muudame oma docker-compose.yml, et näha, kuidas kohandatud piirangud kehtestatakse.



Alustame lihtsat nginxi serverit Docker-CLI abil:

$ docker run -d -name my -nginx -p80:80nginx: viimane

Näete, kuidas nginxi server töötab, külastades http: // localhost või asendage lcoalhost

Teie Dockeri hosti IP -aadressiga. See konteiner võib potentsiaalselt kasutada kogu teie Dockeri hosti saadaolevat mälu (meie puhul on see umbes 2 GB). Mälu kasutamise kontrollimiseks saame muu hulgas kasutada järgmist käsku:

$ docker statistika my-nginx

KONTEINERI ID NIMI CPU % MEM KASUTUS/PIIRMEMEM % NET I/O BLOCK I/O PIDS
6eb0091c0cf2 my-nginx0,00% 2,133MB / 1,934GiB0,11% 3,14 kB / 2,13 kB 0B / 0B2

MEM KASUTUS/PIIR on 2,133 MB kogu 1,934GiB juures. Eemaldame selle konteineri ja hakkame kirjutama doki koostamise skripte.

$ docker peatage minu-nginx
$ docker rm my-nginx

Samaväärne ym -fail

Täpset ülaltoodud konteinerit saab luua, kui järgime neid samme:

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

Loome uue tühja kataloogi ja loome sellesse faili docker-compose.yml. Kui käivitame sellest kataloogist docker-compose, otsib see selle konkreetse faili (ignoreerides kõike muud) ja loob selle vastavalt meie kasutuselevõtu. Lisage sellesse .yml -faili järgmine sisu.

versioon:'3'
teenused:
minu-nginx:
pilt: nginx: viimane
sadamad:
-'80: 80 '

$ docker -compose up -d

Lipp -d lisatakse nii, et äsja loodud konteinerid töötavad taustal. Vastasel korral kinnitab terminal end konteinerite külge ja hakkab sealt aruandeid printima. Nüüd näeme vastloodud konteineri (te) statistikat:

$ dockeri statistika -kõik

KONTEINERI ID NIMI CPU% MEM KASUTUS/PIIRMEMEM% NET I/O BLOCK I/O PIDS
5f8a1e2c08ac my-compose_my-nginx_10,00% 2,25MB/1,934GiB0,11% 1,65 kB/0B 7,35 MB/0B2

Märkate, et sarnane konteiner, nagu varem, loodi sarnaste mälupiirangute ja isegi kasutamisega. Samast kataloogist, mis sisaldab yml -faili. Käivitage järgmine käsk, et kustutada äsja loodud konteiner koos loodud kliendi sillavõrguga.

$docker-komponeerima

See viib doki tagasi puhtasse olekusse, välja arvatud kõik loodud köited (me ei loonud ühtegi, nii et see pole probleem.)

Mälupiirangud ja mälu reserveerimine

Mälupiirangud ja mälu reserveerimine on kaks erinevat aspekti, mis tagavad teie rakenduste ja Dockeri hosti, mille peal töötate, sujuva toimimise.

Laias laastus seab mälupiirang ülempiiri mälumahule, mida Dockeri konteiner võib potentsiaalselt kasutada. Vaikimisi saab Dockeri konteiner, nagu iga teine ​​süsteemiprotsess, kasutada kogu Dockeri hosti vaba mälu. See võib põhjustada mälu lõppu ja teie süsteem võib väga krahhi põhjustada. Isegi kui see kunagi ei jõua, võib see väärtuslikest ressurssidest näljutada muid protsesse (sealhulgas muid konteinereid), kahjustades taas jõudlust. Mälupiirangud tagavad, et ressursinäljas konteinerid ei ületa teatud piiri. See piirab halvasti kirjutatud rakenduse löögiraadiuse mõne konteineri, mitte kogu hostiga.

Mälu reserveerimine on seevastu vähem jäik. Kui süsteemil hakkab mälumaht otsa saama ja proovib osa sellest tagasi saada. See üritab viia konteineri mälutarbimise broneerimispiirini või alla selle. Kui mälu on aga palju, võib rakendus laiendada mälu piiranguid.

Kokku võtma:

  1. Mälupiirang: konteinerile kättesaadavaks tehtud mälumahu range ülempiir.
  2. Mälu reserveerimine: see tuleks määrata minimaalseks mälumahuks, mida rakendus peab korralikult töötama. Nii et see ei jookse kokku ega käitu halvasti, kui süsteem üritab osa mälust tagasi saada.

Kui mälu reserveerimine on suurem kui mälupiirang, on mälupiirang ülimuslik.

Mälu piirangute ja reserveerimise määramine

Versioon 2

Läheme tagasi varem kirjutatud docker-compose.yml juurde ja lisame sellele mälupiirangu. Eelduste jaotises käsitletud põhjustel muutke versioon versiooniks 2.4.

versioon:„2.4”
teenused:
minu-nginx:
pilt: nginx: viimane
sadamad:
-'80: 80 '
mem_limit: 300m

Viimane rida seab teenuse my-nginx limiidiks 300 MB. KiB jaoks saate kasutada k ja GiB ja b baitide jaoks. Selle ees olev number peab aga olema täisarv. Te ei saa kasutada selliseid väärtusi nagu 2,4 m, selle asemel peaksite kasutama 2400 000. Kui nüüd jooksed:

$ dockeri statistika -kõik

KONTEINERI ID NIMI CPU % MEM KASUTUS/PIIRMEMEM % NET I/O BLOCK I/O PIDS
44114d785d0a my-compose_my-nginx_10,00% 2,141MB/300MB0,71% 1,16 kB/0B 0B/0B2

Märkate, et mälupiiranguks on seatud 300 MiB. Mälu reserveerimise seadistamine on sama lihtne, lisage lõppu rida mem_reservation: xxx.

versioon:„2.4”
teenused:
minu-nginx:
pilt: nginx: viimane
sadamad:
-'80: 80 '
mem_limit: 300m
mem_reservation: 100m

Versioon 3 (valikuline)

Kolmanda versiooni kasutamiseks peate Dockerit kasutama sülemirežiimis. Windowsi ja Maci puhul saate selle lubada Dockeri seadete menüü abil. Linuxi kasutajatel oleks vaja käivitada docker swarm init. Lisateavet selle kohta leiate siin . See pole siiski vajalik samm ja kui te pole seda lubanud, on see ka hea. See jaotis on mõeldud inimestele juba töötab sülemirežiimis ja saab kasutada uuemat versiooni.

versioon:'3'
teenused:
minu-nginx:
pilt: nginx: viimane
sadamad:
-'80: 80 '
juurutada:
ressursid:
piirid:
mälu: 300 m
reserveeringud:
mälu: 100 m

Me määratleme selle kõik ressursside valiku all. Piirangud ja reserveerimine muutuvad oma peamiseks võtmeks ja mälu on vaid üks paljudest siin hallatavatest ressurssidest. CPU on veel üks oluline parameeter.

Lisainformatsioon

Docker-compose kohta saate lisateavet ametlikust dokumentatsioonist siia lingitud . Kui olete aru saanud, kuidas koostamisfaili kirjutada, saab dokumentatsioon teid aidata erinevate parameetrite osas.

Te ei pea kõike teadma, otsige lihtsalt seda, mida teie rakendus nõuab, ja viide juhendab teid selle rakendamisel.