VM apo Docker?

Si e dini nëse keni nevojë për Docker dhe jo një VM? Ju duhet të përcaktoni se çfarë saktësisht dëshironi të izoloni. Nëse dëshironi të izoloni një sistem me burime të garantuara të dedikuara dhe pajisje virtuale, atëherë zgjedhja duhet të jetë një VM. Nëse keni nevojë të izoloni aplikacionet që ekzekutohen si procese të veçanta të sistemit, do t'ju duhet Docker.

Pra, cili është ndryshimi midis kontejnerëve Docker dhe VM-ve?

Makina virtuale (VM) është një kompjuter virtual me të gjitha pajisjet virtuale dhe një hard disk virtual në të cilin është instaluar një OS i ri i pavarur së bashku me drejtuesit e pajisjes virtuale, menaxhimin e kujtesës dhe komponentë të tjerë. Kjo do të thotë, ne marrim një abstraksion të harduerit fizik që na lejon të ekzekutojmë shumë kompjuterë virtualë në një kompjuter.
Një VM e instaluar mund të zërë hapësirë ​​në diskun e kompjuterit tuaj në mënyra të ndryshme:

  • hapësirë ​​fikse në hard disk, e cila lejon akses më të shpejtë në hard diskun virtual dhe shmang fragmentimin e skedarëve;
  • alokimi dinamik i memories. Kur instaloni aplikacione shtesë, memoria do të ndahet në mënyrë dinamike për to derisa të arrijë shumën maksimale të caktuar për të.

Чем больше makina virtuale në server, aq më shumë hapësirë ​​zënë dhe aq më shumë mbështetje të vazhdueshme kërkojnë për mjedisin që i duhet aplikacionit tuaj për të funksionuar.

prerës — është softuer për krijimin e aplikacioneve të bazuara në kontejnerë. Kontejnerët dhe makina virtuale Ato kanë avantazhe të ngjashme, por funksionojnë ndryshe. Kontejnerët zënë më pak hapësirë ​​sepse ripërdorin më shumë nga burimet e përbashkëta të sistemit pritës sesa VM-të, pasi ndryshe nga VM-të, ato ofrojnë virtualizim në nivelin e sistemit operativ në vend të harduerit. Kjo qasje siguron një gjurmë më të vogël memorieje, vendosje më të shpejtë dhe shkallëzim më të lehtë.

Kontejneri ofron një mekanizëm më efikas për kapsulimin e aplikacioneve duke ofruar ndërfaqet e nevojshme për sistemin pritës. Kjo veçori lejon kontejnerët të ndajnë thelbin e sistemit, me çdo kontejner që funksionon si një proces i veçantë OS pritës që ka grupin e vet të zonave të memories (hapësirën e vet të adresave virtuale). Meqenëse hapësira e adresës virtuale të çdo kontejneri është e saj, të dhënat që i përkasin zonave të ndryshme të memories nuk mund të ndryshohen.
Sistemi operativ vendas për Docker është Linux (Docker mund të përdoret edhe në Windows, dhe në MacOS), përdor avantazhet e tij kryesore, të cilat i lejojnë të organizojë ndarjen e bërthamës. Ekzekutimi i kontejnerëve Docker në Windows do të ndodhë brenda një makine virtuale me sistemin operativ Linux, sepse kontejnerët ndajnë sistemin operativ pritës dhe sistemi operativ themelor për ta është Linux.

Enë - si funksionon?

Enë është një abstraksion i nivelit të aplikacionit që kombinon kodin dhe varësitë. Kontejnerët krijohen gjithmonë nga imazhet, duke shtuar një shtresë të sipërme të shkrueshme dhe duke inicializuar parametra të ndryshëm. Për shkak se një kontejner ka shtresën e vet të shkrimit dhe të gjitha ndryshimet ruhen në atë shtresë, kontejnerët e shumtë mund të ndajnë qasjen në të njëjtin imazh kryesor.

Çdo kontejner mund të konfigurohet përmes një skedari në projektin docker-compose të përfshirë në zgjidhjen kryesore - docker-compose.yml. Aty mund të vendosni parametra të ndryshëm si emri i kontejnerit, portat, identifikuesit, kufijtë e burimeve, varësitë midis kontejnerëve të tjerë. Nëse nuk specifikoni një emër kontejneri në cilësimet, Docker do të krijojë një kontejner të ri çdo herë, duke i dhënë një emër rastësisht.

Kur një kontejner niset nga një imazh, Docker monton një sistem skedari lexim-shkrimi në krye të çdo shtrese më poshtë. Këtu do të ekzekutohen të gjitha proceset që duam të ekzekutojë kontejneri ynë Docker.

Kur Docker nis për herë të parë një kontejner, shtresa fillestare e leximit-shkrimit është bosh. Kur ndodhin ndryshime, ato aplikohen në këtë shtresë; për shembull, nëse dëshironi të ndryshoni një skedar, ai skedar do të kopjohet nga shtresa vetëm për lexim më poshtë në shtresën lexim-shkrim.
Versioni vetëm për lexim i skedarit do të ekzistojë ende, por tani është i fshehur nën kopje. Vëllimet përdoren për të ruajtur të dhënat, pavarësisht nga cikli i jetës së kontejnerit. Vëllimet inicializohen kur krijohet kontejneri.

Si lidhet imazhi me kontejnerin?

imazh - elementi kryesor për çdo enë. Imazhi është krijuar nga një Dockerfile i shtuar në projekt dhe është një grup sistemesh skedarësh (shtresash) të shtresuara njëra mbi tjetrën dhe të grupuara së bashku, vetëm për lexim; numri maksimal i shtresave është 127.

Në zemër të çdo imazhi është një imazh bazë, i cili specifikohet nga komanda FROM - pika hyrëse gjatë ndërtimit të imazhit Dockerfile. Çdo shtresë është një shtresë vetëm për lexim dhe përfaqësohet nga një komandë e vetme që modifikon sistemin e skedarëve, të shkruar në një Dockerfile.
Për të kombinuar këto shtresa në një imazh të vetëm, Docker përdor sistemin e skedarëve të avancuar me shumë shtresa të Unionit (AuFS është ndërtuar në krye të UnionFS), duke lejuar që skedarët dhe drejtoritë e ndryshme nga shtresa të ndryshme skedarësh të mbivendosen në mënyrë transparente, duke krijuar një sistem skedar koheziv.

Shtresat përmbajnë meta të dhëna që ju lejojnë të ruani informacione të lidhura për secilën shtresë gjatë kohës së ekzekutimit dhe kohës së ndërtimit. Çdo shtresë përmban një lidhje me shtresën tjetër; nëse një shtresë nuk ka një lidhje, atëherë ajo është shtresa më e lartë në imazh.

Dockerfile mund të përmbajë komanda të tilla si:

  • FROM - pika e hyrjes kur formoni një imazh;
  • MAINTAINER - emri i pronarit të imazhit;
  • RUN - ekzekutimi i komandës gjatë montimit të imazhit;
  • ADD - kopjimi i skedarit pritës në një imazh të ri; nëse specifikoni URL-në e skedarit, Docker do ta shkarkojë atë në drejtorinë e specifikuar;
  • ENV - variablat e mjedisit;
  • CMD - fillon krijimin e një kontejneri të ri bazuar në imazhin;
  • ENTRYPOINT - komanda ekzekutohet kur fillon kontejneri.
  • WORKDIR është drejtoria e punës për ekzekutimin e komandës CMD.
  • USER - vendos UID për kontejnerin e krijuar në bazë të imazhit.
  • VOLUME - monton direktoriumin pritës në kontejner.
  • EXPOSE është një grup portash që dëgjohen në kontejner.

Si funksionon UnionFS?

UnionFS — një sistem skedarësh shërbimi (FS) për Linux dhe FreeBSD. Ky sistem skedarësh zbaton një mekanizëm kopjo-pas-shkrimi (COW). Njësia punuese e UnionFS është shtresa, secila shtresë duhet të konsiderohet si një sistem skedarësh i veçantë dhe i plotë me një hierarki direktorish që fillon nga rrënja. UnionFS krijon një montim bashkimi për sisteme të tjera skedarësh dhe lejon që skedarët dhe direktoritë nga sisteme të ndryshme skedarësh (të quajtura fork) të bashkohen në një sistem skedarësh të vetëm dhe koheziv në mënyrë transparente për përdoruesin.

Përmbajtja e drejtorive me të njëjtat shtigje do të shfaqet së bashku në një direktori të unifikuar (në një hapësirë ​​të vetme emri) të sistemit të skedarëve që rezulton.

UnionFS kombinon shtresat bazuar në parimet e mëposhtme:

  • njëra nga shtresat bëhet shtresa e nivelit të lartë, shtresa e dytë dhe ajo pasuese bëhen shtresa të nivelit të ulët;
  • objektet e shtresave janë në dispozicion të përdoruesit "nga lart poshtë", d.m.th. nëse objekti i kërkuar është në shtresën "lart", ai kthehet, pavarësisht nga prania e një objekti me të njëjtin emër në shtresën "poshtë"; përndryshe kthehet objekti i shtresës “fund”; nëse objekti i kërkuar nuk është as aty dhe as aty, kthehet gabimi “Nuk ka skedar apo drejtori të tillë”;
  • shtresa e punës është ajo "e lartë", domethënë, të gjitha veprimet e përdoruesit për të ndryshuar të dhënat pasqyrohen vetëm në shtresën e nivelit të lartë, pa ndikuar në përmbajtjen e shtresave të niveleve më të ulëta.

Docker është teknologjia kontejnerësh më e përdorur gjerësisht për ekzekutimin e aplikacioneve. Është bërë standardi në këtë fushë, duke u bazuar në grupet c dhe hapësirat e emrave të ofruara nga kerneli. Linux.

Docker na lejon të vendosim shpejt aplikacionet dhe të përdorim sa më mirë sistemin e skedarëve duke ndarë bërthamën e OS midis të gjithë kontejnerëve, duke ekzekutuar si procese të veçanta të OS.

Burimi: www.habr.com

Bleni një host të besueshëm për faqet me mbrojtje DDoS, serverë VPS VDS 🔥 Bleni hosting të besueshëm të faqeve të internetit me mbrojtje DDoS, servera VPS VDS | ProHoster