VM of Docker?

Hoe weet jy of jy Docker nodig het en nie 'n VM nie? Jy moet bepaal wat jy presies wil isoleer. As jy 'n stelsel met gewaarborgde toegewyde hulpbronne en virtuele hardeware wil isoleer, moet die keuse 'n VM wees. As jy lopende toepassings as aparte stelselprosesse moet isoleer, sal jy Docker nodig hê.

So, wat is die verskil tussen Docker-houers en VM's?

Virtuele masjien (VM) is 'n virtuele rekenaar met alle virtuele toestelle en 'n virtuele hardeskyf waarop 'n nuwe onafhanklike bedryfstelsel geïnstalleer is saam met virtuele toestelbestuurders, geheuebestuur en ander komponente. Dit wil sê, ons kry 'n abstraksie van fisiese hardeware wat ons in staat stel om baie virtuele rekenaars op een rekenaar te laat loop.
'n Geïnstalleerde VM kan op verskillende maniere spasie op jou rekenaar se skyf opneem:

  • vaste hardeskyfspasie, wat vinniger toegang tot die virtuele hardeskyf moontlik maak en lêerfragmentasie vermy;
  • dinamiese geheue toewysing. Wanneer addisionele toepassings geïnstalleer word, sal geheue dinamies daarvoor toegewys word totdat dit die maksimum bedrag bereik wat daaraan toegeken is.

Hoe meer virtuele masjiene per bediener, hoe meer spasie neem hulle op, en vereis ook konstante ondersteuning vir die omgewing wat nodig is vir jou toepassing om te laat loop.

Docker is sagteware vir die skep van houer-gebaseerde toepassings. Houers en virtuele masjiene het soortgelyke voordele, maar werk anders. Houers neem minder spasie op omdat... hergebruik meer gedeelde hulpbronne van die gasheerstelsel as die VM, want anders as VM, bied dit virtualisering op die OS-vlak, nie op die hardeware-vlak nie. Hierdie benadering lei tot 'n laer geheue-voetspoor, vinniger ontplooiing en makliker skaal.

Die houer bied 'n meer doeltreffende meganisme om toepassings in te kap deur die nodige koppelvlakke aan die gasheerstelsel te verskaf. Hierdie kenmerk laat houers toe om die kern van die stelsel te deel, met elke houer wat as 'n aparte gasheer-bedryfstelselproses loop wat sy eie stel geheue-areas het (sy eie virtuele adresruimte). Aangesien elke houer se virtuele adresruimte sy eie is, kan data wat aan verskillende geheueareas behoort nie verander word nie.
Die inheemse bedryfstelsel vir Docker is Linux (Docker kan ook op Windows en MacOS gebruik word), dit gebruik sy belangrikste voordele, wat dit toelaat om die kernskeiding te organiseer. Om Docker-houers op Windows te laat loop, sal binne 'n virtuele masjien met Linux OS plaasvind, want houers deel die bedryfstelsel van die gasheerstelsel en die hoofbedryfstelsel vir hulle is Linux.

Houer - hoe werk dit?

Houer is 'n toepassingsvlak-abstraksie wat kode en afhanklikhede kombineer. Houers word altyd uit beelde geskep, wat 'n skryfbare boonste laag byvoeg en verskeie parameters inisialiseer. Omdat 'n houer sy eie skryflaag het en alle veranderinge in daardie laag gestoor word, kan veelvuldige houers toegang tot dieselfde meesterbeeld deel.

Elke houer kan gekonfigureer word deur 'n lêer in die docker-compose-projek wat by die hoofoplossing ingesluit is - docker-compose.yml. Daar kan jy verskeie parameters stel soos houernaam, poorte, identifiseerders, hulpbronlimiete, afhanklikhede tussen ander houers. As u nie 'n houernaam in die instellings spesifiseer nie, sal Docker elke keer 'n nuwe houer skep en dit willekeurig 'n naam gee.

Wanneer 'n houer vanaf 'n prent begin word, monteer Docker 'n lees-skryf-lêerstelsel bo-op enige lae hieronder. Dit is waar al die prosesse wat ons wil hê ons Docker-houer moet laat loop, sal loop.

Wanneer Docker die eerste keer 'n houer begin, is die aanvanklike lees-skryf-laag leeg. Wanneer veranderinge plaasvind, word dit op hierdie laag toegepas; byvoorbeeld, as jy 'n lêer wil verander, sal daardie lêer van die leesalleen-laag hieronder na die lees-skryf-laag gekopieer word.
Die leesalleen-weergawe van die lêer sal steeds bestaan, maar dit is nou onder die kopie versteek. Volumes word gebruik om data te stoor, ongeag die lewensiklus van die houer. Volumes word geïnisialiseer wanneer die houer geskep word.

Hoe hou die beeld verband met die houer?

beeld — die hoofelement vir elke houer. Die prent word geskep uit 'n Dockerfile wat by die projek gevoeg is en is 'n stel lêerstelsels (lae) wat bo-op mekaar gelaag en saam gegroepeer is, leesalleen; die maksimum aantal lae is 127.

In die hart van elke prent is 'n basisbeeld, wat gespesifiseer word deur die FROM-opdrag - die toegangspunt wanneer die Dockerfile-beeld gebou word. Elke laag is 'n leesalleen-laag en word verteenwoordig deur 'n enkele opdrag wat die lêerstelsel wysig, geskryf in 'n Dockerfile.
Om hierdie lae in 'n enkele prent te kombineer, gebruik Docker die Gevorderde multi-laag Union-lêerstelsel (AuFS is bo-op UnionFS gebou), sodat verskillende lêers en dopgehou van verskillende lêerlae deursigtig oorgelê kan word, wat 'n samehangende lêerstelsel skep.

Lae bevat metadata wat jou toelaat om verwante inligting oor elke laag tydens looptyd en boutyd te stoor. Elke laag bevat 'n skakel na die volgende laag; as 'n laag nie 'n skakel het nie, is dit die boonste laag in die prent.

Die Dockerfile kan opdragte bevat soos:

  • FROM — toegangspunt wanneer 'n beeld gevorm word;
  • MAINTAINER - naam van die beeld eienaar;
  • RUN — beveluitvoering tydens beeldsamestelling;
  • ADD - kopieer die gasheerlêer na 'n nuwe prent; as jy die URL van die lêer spesifiseer, sal Docker dit na die gespesifiseerde gids aflaai;
  • ENV - omgewingsveranderlikes;
  • CMD - begin die skepping van 'n nuwe houer gebaseer op die beeld;
  • ENTRYPOINT - die opdrag word uitgevoer wanneer die houer begin.
  • WORKDIR is die werkgids vir die uitvoering van die CMD-opdrag.
  • GEBRUIKER - stel die UID vir die houer wat geskep is op grond van die prent.
  • VOLUME - monteer die gasheergids in die houer.
  • EXPOSE is 'n stel poorte waarna in die houer geluister word.

Hoe werk UnionFS?

UnionFS - Nutstapellêerstelsel (FS) vir Linux en FreeBSD. Hierdie FS implementeer 'n kopieer-op-skryf-meganisme (Copy-On-Write, COW). Die werkeenheid van UnionFS is 'n laag; elke laag moet beskou word as 'n aparte volwaardige lêerstelsel met 'n hiërargie van dopgehou vanaf die wortel self. UnionFS skep 'n unie-montering vir ander lêerstelsels en laat lêers en gidse van verskillende lêerstelsels (genoem vurke) toe om gekombineer te word in 'n enkele samehangende lêerstelsel, deursigtig vir die gebruiker.

Die inhoud van gidse met dieselfde paaie sal saam in een verenigde gids (in 'n enkele naamruimte) van die resulterende lêerstelsel verskyn.

UnionFS kombineer lae gebaseer op die volgende beginsels:

  • een van die lae word die boonste vlak laag, die tweede en daaropvolgende lae word die laer vlak lae;
  • laag-objekte is beskikbaar vir die gebruiker "van bo na onder", d.w.s. as die gevraagde voorwerp in die "boonste" laag is, word dit teruggestuur, ongeag die teenwoordigheid van 'n voorwerp met dieselfde naam in die "onderste" laag; anders word die voorwerp van die "onderste" laag teruggestuur; as die gevraagde voorwerp nie daar of daar is nie, word die fout "Geen sodanige lêer of gids" teruggestuur;
  • die werklaag is die "top" een, dit wil sê, alle gebruikeraksies om data te verander word slegs op die boonste vlaklaag weerspieël, sonder om die inhoud van die lae van laer vlakke te beïnvloed.

Docker is die mees algemene tegnologie vir die gebruik van houers om toepassings uit te voer. Dit het die standaard in die veld geword, wat voortbou op die cgroups en naamruimtes wat deur die Linux-kern verskaf word.

Docker stel ons in staat om vinnig toepassings te ontplooi en die lêerstelsel ten beste te gebruik deur die OS-kern tussen alle houers te verdeel, wat as aparte OS-prosesse loop.

Bron: will.com

Voeg 'n opmerking