VM apo Docker?

Si e kuptoni se ju nevojitet Docker dhe jo VM? Duhet të përcaktoni se çfarë dëshironi të izolonit. Nëse duhet të izolonit një sistem me burime të garantuara dhe harduer virtual, atëherë zgjedhja duhet të bjerë mbi VM. Në rast se duhen izoluar aplikacionet në funksionim si procese të veçanta të sistemit, ju nevojitet Docker.

Atëherë çfarë dallimi ka midis konteinerëve Docker dhe VM?

Makinë virtuale (VM) është një kompjuter virtual me të gjitha pajisjet virtuale dhe harduerin virtual, ku instalohet një OS e re e pavarur së bashku me dritaret virtuale të pajisjeve, menaxhimin e memories dhe komponentë të tjerë. Pra, ne marrim një abstraksion të harduerit fizik, duke lejuar ekzekutimin e shumë kompjuterëve virtualë në një kompjuter të vetëm.
VM e instaluar mund të marrë hapësirë të ndryshme në diskun e kompjuterit:

  • hapĂ«sirĂ« fikse nĂ« diskun e ngurtĂ«, e cila lejon qasje mĂ« tĂ« shpejtĂ« nĂ« harduerin virtual dhe ndihmon nĂ« shmangien e fragmentimit tĂ« skedarit;
  • ndarje dinamike e memories. Kur instalohen aplikacione tĂ« tjera, memoria do tĂ« ndahet dinamikisht pĂ«r to, derisa tĂ« arrijĂ« vĂ«llimin maksimal tĂ« caktuar pĂ«r tĂ«.

Sa më shumë makinave virtuale në server, aq më shumë hapësirë ata zënë, si dhe kërkojnë mbështetje të vazhdueshme të ambientit të nevojshëm për funksionimin e aplikacionit tuaj.

Docker është një softuer për krijimin e aplikacioneve bazuar në konteinerë. Konteinerët dhe makinat virtuale kanë avantazhe të ngjashme, por funksionojnë në mënyrë të ndryshme. Konteinerët zënë më pak hapësirë, pasi ri-përdorin më shumë burime të përbashkëta të sistemit pritës se sa VM, sepse, ndryshe nga VM, siguron virtualizim në nivelin e OS-së dhe jo në harduer. Ky qasje garanton një vëllim më të vogël të memories, një shpërndarje më të shpejtë dhe një shkallëzim më të thjeshtë.

Konteineri ofron një mekanizëm më efektiv të infrastrukturës së aplikacioneve, duke siguruar ndërfaqet e nevojshme të sistemit pritës. Kjo mundësi lejon konteinerët të ndajnë bërthamën e sistemit, ku çdo konteiner funksionon si një proces të veçantë të OS-së kryesore, i cili ka grupin e tij të veçantë të hapësirës së memories (hapësira virtuale e adresave të vet). Duke qenë se hapësira virtuale e adresave të çdo konteineri është e veçantë, të dhënat që i përkasin grupeve të ndryshme të memories nuk mund të ndryshohen.
Sistemi operativ natyror për Docker është Linux (Docker mund të përdoret gjithashtu edhe në Windows dhe MacOS), ai përdor përfitimet e saj kryesore, të cilat i lejojnë të organizojë ndarjen e bërthamës. Ekzekutimi i konteinerëve Docker në Windows do të ndodhi brenda një makine virtuale me OS Linux, pasi konteinerët ndajnë OS-në e sistemit pritës dhe sistemi operativ kryesor për ta është Linux.

Konteineri — si funksionon?

Kontejner — Ă«shtĂ« njĂ« abstraksion nĂ« nivelin e aplikacionit, qĂ« kombinon kodin dhe varĂ«sitĂ«. KonteinerĂ«t gjithmonĂ« krijohen nga imazhe, duke shtuar njĂ« shtresĂ« tĂ« shkruashme dhe duke inicializuar parametra tĂ« ndryshĂ«m. MeqenĂ«se konteineri ka shtresĂ«n e vet tĂ« shkruashme dhe tĂ« gjitha ndryshimet ruhen nĂ« kĂ«tĂ« shtresĂ«, disa konteinerĂ« mund tĂ« ndajnĂ« qasje nĂ« tĂ« njĂ«jtin imazh bazĂ«.

Çdo konteiner mund tĂ« konfigurohet pĂ«rmes njĂ« skedari nĂ« projektin docker-compose, tĂ« pĂ«rfshirĂ« nĂ« zgjidhjen kryesore — docker-compose.yml. Atje mund tĂ« specifikohen parametra tĂ« ndryshĂ«m si emri i konteinerit, portet, identifikuesit, kufizimet e burimeve, varĂ«sitĂ« me konteinerĂ« tĂ« tjerĂ«. NĂ«se emri i konteinerit nuk specifikohet nĂ« cilĂ«simet, Docker do tĂ« krijojĂ« njĂ« konteiner tĂ« ri çdo herĂ«, duke i dhĂ«nĂ« atij njĂ« emĂ«r aksidental.

Kur konteineri fillon nga imazhi, Docker e monton sistemin e skedave për të lexuar dhe shkruar mbi çdo shtresë poshtë. Këtu do të ekzekutohen të gjithë proceset që dëshirojmë që konteineri ynë Docker të përmbushë.

Kur Docker e fillon për herë të parë konteinerin, shtresa fillestare për të lexuar dhe shkruar është e zbrazët. Kur ndodhin ndryshime, ato aplikohen në këtë shtresë; për shembull, nëse dëshironi të modifikoni një skedar, ky skedar do të kopjohet nga shtresa vetëm për të lexuar poshtë në një shtresë për të lexuar dhe shkruar.
Versioni i skedarit që është vetëm për të lexuar, akoma do të ekzistojë, por tani është e mbuluar nën kopjen. Për ruajtjen e të dhënave, pavarësisht jetës së konteinerit, përdoren volumet. Volumet inicializohen gjatë krijimit të konteinerit.

Si lidhet imazhi me konteinerin?

Imazhi — elementi kryesor pĂ«r çdo konteiner. Imazhi krijohet nga Dockerfile, i pĂ«rfshirĂ« nĂ« projekt dhe pĂ«rfaqĂ«son njĂ« grup sistemesh skedarĂ«sh (shtresash) tĂ« vendosur njĂ« mbi tjetĂ«r dhe tĂ« grupuar sĂ« bashku, tĂ« disponueshĂ«m vetĂ«m pĂ«r tĂ« lexuar; numri maksimal i shtresave Ă«shtĂ« 127.

NĂ« thelb tĂ« çdo imazhi ndodhet njĂ« imazh bazĂ«, i cili pĂ«rcaktohet nga komanda FROM — pika hyrĂ«se gjatĂ« formĂ«simit tĂ« imazhit Dockerfile. Çdo shtresĂ« Ă«shtĂ« njĂ« shtresĂ« vetĂ«m pĂ«r tĂ« lexuar dhe pĂ«rfaqĂ«sohet nga njĂ« komandĂ«, qĂ« modifikon sistemin e skedarĂ«ve tĂ« shkruar nĂ« Dockerfile.
Për të kombinuar këto shtresa në një imazh, Docker përdor Advanced multi layered Union file system (AuFS e ndërtuar mbi UnionFS), duke lejuar që skedarë dhe drejtime të ndryshme nga shtresa të ndryshme të skedarëve të mbivendosen në mënyrë të tejdukshme, duke krijuar një sistem të lidhur skedarësh.

Shtresat pĂ«rmbajnĂ« metadat, tĂ« cilat lejojnĂ« ruajtjen e informacionit tĂ« shoqĂ«rueshĂ«m pĂ«r secilĂ«n shtresĂ« gjatĂ« ekzekutimit dhe ndĂ«rtimit. Çdo shtresĂ« pĂ«rmban njĂ« referencĂ« nĂ« shtresĂ«n tjetĂ«r, nĂ«se njĂ« shtresĂ« nuk ka referencĂ«, atĂ«herĂ« kjo Ă«shtĂ« shtresa mĂ« e sipĂ«rme nĂ« imazh.

Dockerfile mund të përmbajë komandat si:

  • FROM — pika hyrĂ«se gjatĂ« formĂ«simit tĂ« imazhit;
  • MAINTAINER — emri i pronarit tĂ« imazhit;
  • RUN — ekzekutimi i komandĂ«s gjatĂ« ndĂ«rtimit tĂ« imazhit;
  • ADD — kopjimi i njĂ« skedhĂ« tĂ« hostit nĂ« imazhin e ri, nĂ«se specifikohet URL e skedhĂ«s, Docker do ta ngarkojĂ« atĂ« nĂ« direktoriumin e caktuar;
  • ENV — variablat e ambientit;
  • CMD — nis krijimin e njĂ« kontejneri tĂ« ri bazuar nĂ« imazh;
  • ENTRYPOINT — komanda ekzekutohet kur niset kontejneri.
  • WORKDIR — direktoriumi i punĂ«s pĂ«r ekzekutimin e komandĂ«s CMD.
  • USER — pĂ«rcakton UID pĂ«r kontejnerin e krijuar nga imazhi.
  • VOLUME — monton direktoriumin e hostit nĂ« kontejner.
  • EXPOSE — grupi i porteve tĂ« dĂ«gjuara nĂ« kontejner.

Si funksionon UnionFS?

UnionFS — njĂ« sistem skedarĂ«sh nĂ« stakĂ« (FS) pĂ«r Linux dhe FreeBSD. Ky FS realizon mekanizmin e kopjimit gjatĂ« shkruarjes (Copy-On-Write, COW). NjĂ«sia punuese e UnionFS Ă«shtĂ« njĂ« shtresĂ«, çdo shtresĂ« duhet tĂ« konsiderohet si njĂ« sistem skedarĂ«sh i plotĂ« me njĂ« hierarki direktoriumesh nga vetĂ« rrĂ«nja. UnionFS krijon njĂ« montim tĂ« pĂ«rbashkĂ«t pĂ«r sisteme tĂ« tjera skedarĂ«sh dhe lejon qĂ« pĂ«rdoruesi tĂ« bashkoi skedhat dhe direktoriumet e sistemeve tĂ« ndryshme skedarĂ«sh (tĂ« quajtura dega) nĂ« njĂ« sistem tĂ« vetĂ«m tĂ« lidhur.

Përmbajtja e direktoriumeve me rrugë identike do të shfaqet së bashku në një direktorium të përbashkët (në një hapësirë emri të përbashkët) të sistemit të skedarëve që është përftuar.

UnionFS bashkon shtresat duke u bazuar në këto parime:

  • njĂ« nga shtresat bĂ«het shtresa nĂ« krye, ndĂ«rsa e dyta dhe mĂ« pas shtresat bĂ«hen shtresa tĂ« poshtme;
  • pĂ«rdoruesit objekti i shtresave i disponohet "nga lart poshtĂ«", dmth. nĂ«se objekti i kĂ«rkuar ndodhet nĂ« "shtresĂ«n e sipĂ«rme", ai kthehet, pavarĂ«sisht nga prania e objektit me emrin e tillĂ« nĂ« "shtresĂ«n e poshtme"; pĂ«rndryshe kthehet objekti i "shtresĂ«s sĂ« poshtme"; nĂ«se objekti i kĂ«rkuar nuk ndodhet as aty, as kĂ«tu, kthehet njĂ« gabim "Nuk ka njĂ« skedar ose direktorium tĂ« tillĂ«";
  • shtresa e punĂ«s Ă«shtĂ« "shtresa e sipĂ«rme", dmth. tĂ« gjitha veprimet e pĂ«rdoruesit pĂ«r ndryshimin e tĂ« dhĂ«nave pasqyrohen vetĂ«m nĂ« shtresĂ«n e sipĂ«rme, duke mos ndikuar nĂ« pĂ«rmbajtjen e shtresave tĂ« poshtme.

Docker është teknologjia më e përhapur për përdorimin e konteinerëve në funksionimin e aplikacioneve. Ai është bërë standard në këtë fushë, duke u ndërtuar mbi cgroups dhe hapësirat emri që siguron bërthama Linux.

Docker na lejon të lançojmë aplikacione shpejt dhe të përdorim maksimalisht sistemin e skedarëve duke ndarë bërthamën e OS-it midis të gjithë kontejnerëve, duke punuar si procese të ndara të OS-it.

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster