VM ali Docker?

Kako razumeti, da potrebujete Docker in ne VM? Določiti morate, kaj točno želite izolirati. Če želite izolirati sistem z zajamčenimi viri in navidezno strojno opremo, potem bi morala izbira pasti na VM. Če morate izolirati delujoče aplikacije kot ločene sistemske procese, boste potrebovali Docker.

Kakšna je torej razlika med vsebniki Docker in VM?

Virtualni stroj (VM) je virtualni računalnik z vsemi virtualnimi napravami in virtualnim trdim diskom, na katerega je nameščen nov neodvisen OS skupaj z gonilniki virtualnih naprav, upravljanjem pomnilnika in drugimi komponentami. To pomeni, da dobimo abstrakcijo fizične strojne opreme, ki omogoča zagon več virtualnih računalnikov na enem računalniku.
Nameščeni VM lahko zasede prostor na disku na različne načine:

  • fiksen prostor na trdem disku, ki omogoča hitrejši dostop do virtualnega trdega diska in preprečuje drobljenje datotek;
  • dinamično dodeljevanje pomnilnika. Pri namestitvi dodatnih aplikacij se jim pomnilnik dinamično dodeljuje, dokler ne doseže največje količine, ki mu je dodeljena.

Več kot je virtualnih strojev na strežniku, več prostora zavzamejo in zahtevajo stalno podporo okolja, potrebno za delovanje vaše aplikacije.

Lučki delavec je programska oprema za izdelavo aplikacij, ki temeljijo na vsebnikih. Vsebniki in virtualni stroji imajo podobne prednosti, vendar delujejo drugače. Zabojniki zavzamejo manj prostora, saj prekomerna uporaba več skupnih virov gostiteljskega sistema kot VM, ker za razliko od VM zagotavlja virtualizacijo na ravni OS, ne strojne opreme. Ta pristop zagotavlja manj pomnilniškega odtisa, hitrejšo uvedbo in lažje skaliranje.

Vsebnik zagotavlja učinkovitejši mehanizem za inkapsulacijo aplikacij z zagotavljanjem potrebnih vmesnikov do gostiteljskega sistema. Ta funkcija omogoča, da vsebniki delijo jedro sistema, kjer vsak od vsebnikov teče kot ločen proces glavnega OS, ki ima svoj niz pomnilniških območij (lastni navidezni naslovni prostor). Ker je virtualni naslovni prostor vsakega vsebnika lasten, podatkov, ki pripadajo različnim pomnilniškim območjem, ni mogoče spremeniti.
Izvorni OS za Docker je Linux (Docker se lahko uporablja tudi v sistemih Windows in MacOS), uporablja svoje glavne prednosti, ki mu omogočajo organizacijo razdeljenega jedra. Zagon vsebnikov Docker v sistemu Windows bo potekal znotraj virtualnega stroja Linux. vsebniki delijo OS gostiteljskega sistema in glavni OS zanje je Linux.

Kontejner - kako deluje?

posoda je abstrakcija na ravni aplikacije, ki združuje kodo in odvisnosti. Vsebniki so vedno ustvarjeni iz slik, dodajo zapisljivo zgornjo plast in inicializirajo različne parametre. Ker ima vsebnik svojo plast za pisanje in so vse spremembe shranjene v tej plasti, si lahko več vsebnikov deli dostop do iste glavne slike.

Vsak vsebnik je mogoče konfigurirati prek datoteke v projektu docker-compose, ki je vključen v glavno rešitev, docker-compose.yml. Tam lahko nastavite različne parametre, kot so ime vsebnika, vrata, identifikatorji, omejitve virov, odvisnosti med drugimi vsebniki. Če v nastavitvah ne določite imena vsebnika, bo Docker vsakič ustvaril nov vsebnik in mu naključno dodelil ime.

Ko se vsebnik zažene iz slike, Docker namesti datotečni sistem za branje/pisanje na katero koli spodnjo plast. Tukaj se bodo izvajali vsi procesi, za katere želimo, da izvaja naš vsebnik Docker.

Ko Docker prvič zažene vsebnik, je začetni sloj za branje/pisanje prazen. Ko pride do sprememb, se uporabijo za ta sloj; na primer, če želite spremeniti datoteko, bo ta datoteka prekopirana iz spodnje plasti samo za branje v plast za branje in pisanje.
Različica datoteke samo za branje bo še vedno obstajala, vendar je zdaj skrita pod kopijo. Zvezki se uporabljajo za shranjevanje podatkov, ne glede na življenjski cikel vsebnika. Zvezki se inicializirajo, ko je vsebnik ustvarjen.

Kako je slika povezana z vsebnikom?

Slika - glavni element za vsako posodo. Slika je ustvarjena iz datoteke Dockerfile, dodane projektu, in je nabor datotečnih sistemov (slojev), naloženih drug na drugega in združenih skupaj, na voljo samo za branje; največje število plasti je 127.

V središču vsake slike je osnovna slika, ki jo določi ukaz FROM – vstopna točka pri generiranju slike Dockerfile. Vsaka plast je plast samo za branje in je predstavljena z enim samim ukazom, ki spremeni datotečni sistem in je napisan v datoteki Docker.
Za združevanje teh plasti v eno samo sliko Docker uporablja napredni večplastni datotečni sistem Union (AuFS je zgrajen na vrhu UnionFS), ki omogoča pregledno prekrivanje različnih datotek in imenikov iz različnih datotečnih slojev ter ustvarja povezan datotečni sistem.

Sloji vsebujejo metapodatke, ki vam omogočajo shranjevanje povezanih informacij o vsaki plasti med izvajanjem in gradnjo. Vsaka plast vsebuje povezavo do naslednje plasti; če plast nima povezave, je to najvišja plast na sliki.

Dockerfile lahko vsebuje ukaze, kot so:

  • FROM - vstopna točka pri oblikovanju slike;
  • MAINTAINER - ime lastnika slike;
  • RUN - izvajanje ukaza med sestavljanjem slike;
  • ADD - kopiranje gostiteljske datoteke v novo sliko; če podate URL datoteko, jo bo Docker prenesel v navedeni imenik;
  • ENV - spremenljivke okolja;
  • CMD - začne ustvarjanje novega vsebnika na podlagi slike;
  • VSTOPNA TOČKA - Ukaz se izvede ob zagonu vsebnika.
  • WORKDIR je delovni imenik za izvajanje ukaza CMD.
  • UPORABNIK - nastavi UID za vsebnik, ustvarjen iz slike.
  • VOLUME – priklopi gostiteljski imenik v vsebnik.
  • EXPOSE je nabor vrat, poslušanih v vsebniku.

Kako deluje UnionFS?

UnionFS — datotečni sistem servisnega sklada (FS) za Linux in FreeBSD. Ta FS izvaja mehanizem kopiranja ob pisanju (Copy-On-Write, COW). Delovna enota UnionFS je plast, vsako plast je treba obravnavati kot ločen polnopravni datotečni sistem s hierarhijo imenikov od samega korena. UnionFS ustvari union mount za druge datotečne sisteme in vam omogoča pregledno združevanje datotek in imenikov iz različnih datotečnih sistemov (imenovanih veje) v en sam povezan datotečni sistem, pregleden za uporabnika.

Vsebina imenikov z enakimi potmi bo prikazana skupaj v enem združenem imeniku (v istem imenskem prostoru) nastalega datotečnega sistema.

UnionFS združuje plasti na podlagi naslednjih načel:

  • ena od plasti postane plast najvišje ravni, druga in naslednje plasti postanejo plasti nižje ravni;
  • objekti plasti so uporabniku dostopni »od zgoraj navzdol«, tj. če je zahtevani objekt v "zgornji" plasti, se vrne, ne glede na prisotnost predmeta z istim imenom v "spodnji" plasti; sicer se vrne objekt "spodnje" plasti; če zahtevanega predmeta ni niti tam niti tam, se vrne napaka "Ni takšne datoteke ali imenika";
  • delovna plast je "zgornja", kar pomeni, da se vsa dejanja uporabnika za spreminjanje podatkov odražajo samo na najvišji ravni, ne da bi to vplivalo na vsebino nižjih ravni.

Docker je najpogostejša tehnologija za uporabo vsebnikov pri delu aplikacij. Postal je standard na tem področju, ki gradi na cgroupih in imenskih prostorih, ki jih zagotavlja jedro Linuxa.

Docker nam omogoča hitro uvajanje aplikacij in najboljšo uporabo datotečnega sistema z deljenjem jedra OS med vsemi vsebniki, ki se izvajajo kot ločeni procesi OS.

Vir: www.habr.com

Dodaj komentar