VM of Docker?

Hoe kinne jo begripe dat jo Docker nedich binne en net in VM? Jo moatte bepale wat jo krekt wolle isolearje. As jo ​​​​in systeem wolle isolearje mei garandearre boarnen en firtuele hardware, dan moat de kar falle op 'e VM. As jo ​​​​rinnende applikaasjes moatte isolearje as aparte systeemprosessen, sille jo Docker nedich wêze.

Dat wat is it ferskil tusken Docker-konteners en VM's?

Firtuele masine (VM) is in firtuele kompjûter mei alle firtuele apparaten en in firtuele hurde skiif, dêr't in nij ûnôfhinklik OS wurdt ynstallearre tegearre mei firtuele apparaat drivers, ûnthâld behear en oare komponinten. Dat is, wy krije in abstraksje fan fysike hardware wêrmei jo in protte firtuele kompjûters op ien kompjûter kinne útfiere.
In ynstallearre VM kin skiifromte op ferskate manieren opnimme:

  • fêste hurde skiif romte, dat makket it mooglik flugger tagong ta de firtuele hurde skiif en foarkomt triem fragmintaasje;
  • dynamyske ûnthâld tawizing. By it ynstallearjen fan ekstra applikaasjes, sil ûnthâld dynamysk wurde tawiisd foar harren oant it berikt it maksimum bedrach tawiisd oan it.

Hoe mear firtuele masines op 'e tsjinner, hoe mear romte se nimme, en ek de konstante stipe fan' e omjouwing nedich foar jo applikaasje om te wurkjen.

Havenarbeider is in software foar it bouwen fan applikaasjes basearre op konteners. Containers en firtuele masines hawwe ferlykbere foardielen, mar wurkje oars. Containers nimme minder romte yn, omdat overuse mear dielde boarnen fan de host systeem as de VM, omdat oars as VM, jout virtualisaasje op OS nivo, net hardware. Dizze oanpak jout minder ûnthâld footprint, flugger ynset, en makliker skaalfergrutting.

De kontener leveret in effisjinter meganisme foar it ynkapseljen fan applikaasjes troch de nedige ynterfaces te leverjen oan it hostsysteem. Dizze funksje lit konteners de kearn fan it systeem diele, wêrby't elk fan 'e konteners rint as in apart proses fan it haad OS, dat in eigen set fan ûnthâldgebieten hat (syn eigen firtuele adresromte). Sûnt de firtuele adresromte fan elke kontener syn eigen is, kinne gegevens dy't ta ferskate ûnthâldgebieten hearre net feroare wurde.
It native OS foar Docker is Linux (Docker kin ek brûkt wurde op Windows en MacOS), it brûkt syn wichtichste foardielen, wêrtroch it in split kernel kin organisearje. De lansearring fan Docker-konteners op Windows sil plakfine yn in Linux firtuele masine. konteners diele it OS fan it hostsysteem en it haad OS foar har is Linux.

Container - hoe wurket it?

Kontener is in abstraksje op it tapassingsnivo dy't koade en ôfhinklikens kombinearret. Containers wurde altyd makke fan ôfbyldings, it tafoegjen fan in skriuwbere toplaach en it initialisearjen fan ferskate parameters. Om't in kontener in eigen skriuwlaach hat en alle wizigingen yn dy laach opslein wurde, kinne meardere konteners tagong diele ta deselde masterôfbylding.

Elke kontener kin konfigureare wurde fia in bestân yn it docker-compose-projekt opnommen yn 'e haadoplossing, docker-compose.yml. Dêr kinne jo ferskate parameters ynstelle lykas kontenernamme, havens, identifiers, boarnegrinzen, ôfhinklikens tusken oare konteners. As jo ​​gjin kontenernamme spesifisearje yn 'e ynstellings, dan sil Docker elke kear in nije kontener oanmeitsje, dy't willekeurich in namme tawize.

As in kontener is begon fan in ôfbylding, monteart Docker it lês- / skriuwbestânsysteem boppe op alle lagen hjirûnder. Dit is wêr't alle prosessen dy't wy wolle dat ús Docker-kontener útfiere sille rinne.

As Docker foar it earst in kontener begjint, is de earste lês-/skriuwlaach leech. As feroarings foarkomme, wurde se op dy laach tapast; bygelyks,, as jo wolle feroarje in triem, dat triem wurdt kopiearre út de lês-allinne laach hjirûnder nei it lêzen-skriuwen laach.
De read-allinnich ferzje fan it bestân sil noch bestean, mar is no ferburgen ûnder de kopy. Folumes wurde brûkt om gegevens op te slaan, nettsjinsteande de libbenssyklus fan 'e kontener. Folumes wurde inisjalisearre as in kontener wurdt oanmakke.

Hoe is it byld ferbûn mei de kontener?

Ofbylding - it haadelemint foar elke kontener. De ôfbylding is makke fan in Dockerfile tafoege oan it projekt en is in set fan bestânssystemen (lagen) lizze boppe-op elkoar en groepearre, allinich beskikber foar lêzen; it maksimum oantal lagen is 127.

Yn it hert fan elke ôfbylding is in basisôfbylding, dat wurdt oantsjutte troch it FROM-kommando - it yngongspunt by it generearjen fan in Dockerfile-ôfbylding. Elke laach is in read-allinnich laach en wurdt fertsjintwurdige troch in inkeld kommando dat it bestânsysteem feroaret, skreaun yn in Dockerfile.
Om dizze lagen te kombinearjen yn ien ôfbylding, brûkt Docker it Avansearre multi-layered Union-bestânsysteem (AuFS is boud boppe op UnionFS), wêrtroch ferskate bestannen en mappen út ferskate triemlagen transparant oerlaapje kinne, en in assosjearre bestânsysteem meitsje.

Lagen befetsje metadata wêrmei jo relatearre ynformaasje oer elke laach kinne opslaan by runtime en bouwtiid. Elke laach befettet in keppeling nei de folgjende laach, as de laach gjin keppeling hat, dan is dit de boppeste laach yn 'e ôfbylding.

Dockerfile kin kommando's befetsje lykas:

  • FROM - yngongspunt yn 'e foarming fan' e ôfbylding;
  • MAINTAINER - de namme fan de eigner fan it byld;
  • RUN - útfiering fan kommando tidens ôfbylding gearstalling;
  • ADD - it kopiearjen fan it hostbestân nei in nije ôfbylding, as jo in URL-bestân oantsjutte, sil Docker it downloade nei de opjûne map;
  • ENV - omjouwingsfariabelen;
  • CMD - begjint it meitsjen fan in nije kontener basearre op it byld;
  • ENTRYPOINT - It kommando wurdt útfierd as de kontener is begon.
  • WORKDIR is de wurkmap foar it útfieren fan it CMD-kommando.
  • USER - Stelt de UID yn foar de kontener makke út de ôfbylding.
  • VOLUME - Mounts de host triemtafel oan de kontener.
  • EXPOSE is in set fan havens harke op yn 'e kontener.

Hoe wurket UnionFS?

UnionFS - Service stack file system (FS) foar Linux en FreeBSD. Dizze FS ymplementearret it kopy-op-skriuwen (Copy-On-Write, COW) meganisme. De wurkienheid fan UnionFS is in laach, elke laach moat wurde beskôge as in apart folweardich bestânsysteem mei in maphierarchy fan 'e root sels. UnionFS makket in uny-mount foar oare bestânsystemen en lit jo bestannen en mappen fan ferskate bestânsystemen (neamd tûken) transparant gearfoegje yn ien keppele bestânsysteem, transparant foar de brûker.

De ynhâld fan mappen mei deselde paden wurdt tegearre werjûn yn ien kombinearre map (yn deselde nammeromte) fan it resultearjende triemsysteem.

UnionFS kombinearret lagen basearre op de folgjende prinsipes:

  • ien fan de lagen wurdt in top-nivo laach, de twadde en folgjende lagen wurde leger-nivo lagen;
  • laach objekten binne tagonklik foar de brûker "fan boppe nei ûnderen", d.w.s. as it frege objekt yn 'e "boppeste" laach is, wurdt it weromjûn, nettsjinsteande de oanwêzigens fan in objekt mei deselde namme yn 'e "legere" laach; oars wurdt it "ûnderste" laachobjekt weromjûn; as it opfrege objekt der noch net is, wurdt de flater "Gjin sa'n triem of triemtafel" weromjûn;
  • de wurkjende laach is de "top", dat is, alle brûker aksjes te feroarjen gegevens wurde wjerspegele allinnich op de top-nivo laach, sûnder ynfloed op de ynhâld fan legere-nivo lagen.

Docker is de meast foarkommende technology foar it brûken fan konteners yn applikaasjewurk. It is de standert wurden yn dit gebiet, boud op 'e cgroups en nammeromten dy't troch de Linux kernel levere wurde.

Docker lit ús applikaasjes fluch ynsette en it bêste gebrûk meitsje fan it bestânsysteem troch de OS-kernel te dielen tusken alle konteners, dy't rinne as aparte OS-prosessen.

Boarne: www.habr.com

Add a comment