VM ar Docker?

Kaip suprasti, kad jums reikia Docker, o ne VM? Turite nustatyti, ką tiksliai norite izoliuoti. Jei norite izoliuoti sistemą su garantuotais ištekliais ir virtualia aparatūra, pasirinkimas turėtų tekti VM. Jei reikia atskirti veikiančias programas kaip atskirus sistemos procesus, jums reikės „Docker“.

Taigi, kuo skiriasi „Docker“ konteineriai ir VM?

Virtuali mašina (VM) yra virtualus kompiuteris su visais virtualiais įrenginiais ir virtualiu kietuoju disku, kuriame įdiegta nauja nepriklausoma OS kartu su virtualių įrenginių tvarkyklėmis, atminties valdymu ir kitais komponentais. Tai yra, gauname fizinės aparatinės įrangos abstrakciją, leidžiančią viename kompiuteryje paleisti daug virtualių kompiuterių.
Įdiegta VM gali užimti vietos diske įvairiais būdais:

  • fiksuota vieta standžiajame diske, leidžianti greičiau pasiekti virtualų standųjį diską ir išvengti failų suskaidymo;
  • dinaminis atminties paskirstymas. Diegiant papildomas programas, atmintis joms bus dinamiškai paskirstoma tol, kol pasieks maksimalų jai skirtą kiekį.

Kuo daugiau virtualių mašinų serveryje, tuo daugiau vietos jos užima, be to, reikalingas nuolatinis aplinkos palaikymas, reikalingas jūsų programai veikti.

dokininkas yra programinė įranga, skirta kurti programas, pagrįstas konteineriais. Sudėtiniai konteineriai ir virtualios mašinos turi panašių privalumų, tačiau veikia skirtingai. Konteineriai užima mažiau vietos, nes per daug naudoja daugiau bendrinamų pagrindinės sistemos išteklių nei VM, nes skirtingai nei VM, teikia virtualizaciją OS lygiu, o ne aparatinę įrangą. Šis metodas suteikia mažiau atminties, greitesnį diegimą ir lengvesnį mastelio keitimą.

Konteineris suteikia veiksmingesnį mechanizmą programų inkapsuliavimui, suteikdamas reikiamas sąsajas su pagrindine sistema. Ši funkcija leidžia konteineriams dalytis sistemos branduoliu, kur kiekvienas konteineris veikia kaip atskiras pagrindinės OS procesas, turintis savo atminties sričių rinkinį (savo virtualią adresų erdvę). Kadangi kiekvieno konteinerio virtualioji adresų erdvė yra atskira, skirtingoms atminties sritims priklausančių duomenų keisti negalima.
Gimtoji „Docker“ OS yra „Linux“ („Docker“ taip pat gali būti naudojama „Windows“ ir „MacOS“), ji naudojasi pagrindiniais privalumais, leidžiančiais organizuoti padalintą branduolį. „Docker“ konteinerių paleidimas sistemoje „Windows“ vyks „Linux“ virtualioje mašinoje, nes konteineriai dalijasi pagrindinės sistemos OS, o pagrindinė jų OS yra Linux.

Konteineris – kaip tai veikia?

Konteineris yra programos lygio abstrakcija, jungianti kodą ir priklausomybes. Konteineriai visada kuriami iš vaizdų, pridedant rašomą viršutinį sluoksnį ir inicijuojant įvairius parametrus. Kadangi sudėtinis rodinys turi savo rašymo sluoksnį ir visi pakeitimai saugomi tame sluoksnyje, keli konteineriai gali bendrinti prieigą prie to paties pagrindinio vaizdo.

Kiekvieną konteinerį galima konfigūruoti naudojant failą docker-compose projekte, įtrauktame į pagrindinį sprendimą, docker-compose.yml. Čia galite nustatyti įvairius parametrus, tokius kaip konteinerio pavadinimas, prievadai, identifikatoriai, išteklių limitai, priklausomybės tarp kitų konteinerių. Jei nustatymuose nenurodysite sudėtinio rodinio pavadinimo, Docker kiekvieną kartą sukurs naują konteinerį, atsitiktinai priskirdamas jam pavadinimą.

Kai konteineris paleidžiamas iš vaizdo, „Docker“ sujungia skaitymo / rašymo failų sistemą ant bet kurio žemiau esančio sluoksnio. Čia bus vykdomi visi procesai, kuriuos norime vykdyti mūsų „Docker“ konteineryje.

Kai Docker pirmą kartą paleidžia konteinerį, pradinis skaitymo / rašymo sluoksnis yra tuščias. Kai atsiranda pakeitimų, jie taikomi tam sluoksniui; Pavyzdžiui, jei norite modifikuoti failą, tas failas bus nukopijuotas iš toliau esančio tik skaitymo sluoksnio į skaitymo ir rašymo sluoksnį.
Tik skaitoma failo versija vis tiek išliks, bet dabar paslėpta po kopija. Tūriai naudojami duomenims saugoti, neatsižvelgiant į konteinerio gyvavimo ciklą. Sukūrus konteinerį, tomai inicijuojami.

Kaip vaizdas susietas su konteineriu?

Vaizdas - pagrindinis kiekvieno konteinerio elementas. Vaizdas sukurtas iš Dockerfile, pridėto prie projekto, ir yra failų sistemų (sluoksnių), išdėstytų viena ant kitos ir sugrupuotų kartu, rinkinys, kurį galima tik skaityti; maksimalus sluoksnių skaičius yra 127.

Kiekvieno vaizdo centre yra pagrindinis vaizdas, kurį nurodo komanda FROM – įėjimo taškas generuojant Dockerfile vaizdą. Kiekvienas sluoksnis yra tik skaitomas ir yra vaizduojamas viena komanda, kuri modifikuoja failų sistemą, parašyta Dockerfile.
Norėdami sujungti šiuos sluoksnius į vieną vaizdą, „Docker“ naudoja išplėstinę daugiasluoksnę „Union“ failų sistemą (AuFS sukurta „UnionFS“ viršuje), leidžianti skirtingiems failams ir katalogams iš skirtingų failų sluoksnių skaidriai persidengti, sukuriant susietą failų sistemą.

Sluoksniuose yra metaduomenų, leidžiančių saugoti susijusią informaciją apie kiekvieną sluoksnį vykdymo ir kūrimo metu. Kiekviename sluoksnyje yra nuoroda į kitą sluoksnį. Jei sluoksnis neturi nuorodos, tai yra aukščiausias vaizdo sluoksnis.

Dockerfile gali būti komandų, tokių kaip:

  • FROM – įėjimo taškas formuojant vaizdą;
  • PRIEŽIŪRA – atvaizdo savininko vardas ir pavardė;
  • RUN - komandos vykdymas vaizdo surinkimo metu;
  • ADD - pagrindinio kompiuterio failo kopijavimas į naują vaizdą, jei nurodysite URL failą, Docker atsisiųs jį į nurodytą katalogą;
  • ENV – aplinkos kintamieji;
  • CMD - pradeda naujo konteinerio kūrimą pagal vaizdą;
  • ĮĖJIMO TAŠKAS – komanda vykdoma paleidus konteinerį.
  • WORKDIR yra darbo katalogas, skirtas CMD komandai vykdyti.
  • VARTOTOJAS – nustato UID konteineriui, sukurtam iš vaizdo.
  • VOLUME – sujungia pagrindinio kompiuterio katalogą prie konteinerio.
  • EXPOSE yra prievadų, kurių klausomasi konteineryje, rinkinys.

Kaip veikia UnionFS?

UnionFS — paslaugų kamino failų sistema (FS), skirta Linux ir FreeBSD. Šis FS įgyvendina kopijavimo ir rašymo (Copy-On-Write, COW) mechanizmą. UnionFS darbo vienetas yra sluoksnis, kiekvienas sluoksnis turėtų būti laikomas atskira visaverte failų sistema su katalogų hierarchija nuo pačios šaknies. UnionFS sukuria sąjungos prijungimą kitoms failų sistemoms ir leidžia skaidriai sujungti failus ir katalogus iš skirtingų failų sistemų (vadinamų filialais) į vieną susietą failų sistemą, skaidriai vartotojui.

Katalogų su tais pačiais keliais turinys bus rodomas kartu viename kombinuotame gautos failų sistemos kataloge (toje pačioje vardų erdvėje).

UnionFS sujungia sluoksnius pagal šiuos principus:

  • vienas iš sluoksnių tampa aukščiausio lygio sluoksniu, antrasis ir vėlesni sluoksniai tampa žemesnio lygio sluoksniais;
  • sluoksnių objektai vartotojui pasiekiami „iš viršaus į apačią“, t.y. jei prašomas objektas yra „viršutiniame“ sluoksnyje, jis grąžinamas, neatsižvelgiant į tai, ar objektas tuo pačiu pavadinimu yra „apatiniame“ sluoksnyje; kitu atveju grąžinamas "apatinio" sluoksnio objektas; jei prašomo objekto nei ten, nei ten nėra, grąžinama klaida „Nėra tokio failo ar katalogo“;
  • darbinis sluoksnis yra „viršutinis“, tai yra, visi vartotojo veiksmai, skirti keisti duomenis, atsispindi tik aukščiausio lygio sluoksnyje, nedarant įtakos žemesnio lygio sluoksnių turiniui.

„Docker“ yra labiausiai paplitusi konteinerių naudojimo taikymo darbuose technologija. Ji tapo šios srities standartu, remiantis Linux branduolio teikiamomis cgrupėmis ir vardų erdvėmis.

„Docker“ leidžia greitai diegti programas ir geriausiai išnaudoti failų sistemą bendrinant OS branduolį tarp visų konteinerių, veikiančių kaip atskiri OS procesai.

Šaltinis: www.habr.com

Добавить комментарий