VM an Docker?

Meriv çawa fêm dike ku hûn hewceyê Docker û ne VM ne? Pêdivî ye ku hûn diyar bikin ka hûn bi rastî çi dixwazin îzole bikin. Ger hûn dixwazin pergalek bi çavkaniyên garantîkirî û nermalava virtual veqetînin, wê hingê divê bijare bikeve ser VM. Heke hûn hewce ne ku serîlêdanên xebitandinê wekî pêvajoyên pergalê yên cihêreng veqetînin, hûn ê hewceyê Docker bikin.

Ji ber vê yekê ferqa di navbera konteynerên Docker û VM de çi ye?

Makîneya Virtual (VM) komputerek virtual e ku bi hemî amûrên virtual û dîskek hişk a virtual ve ye, ku li ser wê OS-ya nû ya serbixwe digel ajokarên cîhaza virtual, rêveberiya bîranînê û pêkhateyên din tê saz kirin. Ango, em berhevokek nermalava laşî digirin ku dihêle hûn gelek komputerên virtual li ser yek komputerê bimeşînin.
VM-ya sazkirî dikare bi awayên cûda cîhê dîskê bigire:

  • cîhê dîska hişk a sabît, ku destûrê dide gihîştina bilez a dîska hişk a virtual û ji perçebûna pelê dûr dikeve;
  • veqetandina bîra dînamîk. Dema ku serîlêdanên din saz bikin, bîranîn dê bi dînamîk ji wan re were veqetandin heya ku ew bigihîje mîqdara herî zêde ku jê re hatî veqetandin.

Her ku bêtir makîneyên virtual li ser serverê, ew bêtir cîh digirin, û di heman demê de piştgirîya domdar a hawîrdorê ya ku ji bo xebitandina serîlêdana we hewce dike jî hewce dike.

Docker nermalava avakirina sepanên li ser konteyneran e. Konteyner û makîneyên virtual xwedî feydeyên wekhev in, lê cûda dixebitin. Konteyniran cîh kêmtir digirin, ji ber Zêdetir çavkaniyên hevpar ên pergala mêvandar ji VM bikar bînin, ji ber ku Berevajî VM-ê, virtualbûnê di asta OS-ê de peyda dike, ne hardware. Ev nêzîkatî şopa bîranînê kêmtir, bicîhkirina zûtir, û pîvana hêsantir peyda dike.

Konteynir ji bo vegirtina serîlêdanan mekanîzmayek bikêrtir peyda dike û pêwendiyên pêwîst ji pergala mêvandar re peyda dike. Ev taybetmendî dihêle ku konteyneran bingeha pergalê parve bikin, ku her yek ji konteyneran wekî pêvajoyek cihêreng a OS-ya sereke dimeşîne, ku xwedan rêzek deverên bîranînê ye (cihê navnîşana xweya virtual). Ji ber ku cîhê navnîşana virtual ya her konteynerê bi xwe ye, daneyên ku ji deverên cûda yên bîranînê ne nayên guhertin.
OS-ya xwecî ya ji bo Docker Linux e (Docker dikare li ser Windows û MacOS-ê jî were bikar anîn), ew avantajên xwe yên sereke bikar tîne, ku dihêle ku ew kernelek dabeşkirî organîze bike. Destpêkirina konteynerên Docker li ser Windows-ê dê di hundurê makîneyek virtual Linux de pêk were. konteynir OS-ya pergala mêvandar parve dikin û OS-ya sereke ji bo wan Linux e.

Konteyner - ew çawa dixebite?

Container di asta serîlêdanê de abstrakasyonek e ku kod û pêwendiyan bi hev re dike. Konteyner her gav ji wêneyan têne afirandin, qatek jorîn a nivîsandinê lê zêde dikin û parametreyên cihêreng dest pê dikin. Ji ber ku konteynir qatek xweya nivîsandinê heye û hemî guhertin di wê qatê de têne hilanîn, pir konteynir dikarin gihîştina heman wêneya sereke parve bikin.

Her konteynir dikare bi pelek di projeya docker-compose de ku di çareseriya bingehîn de, docker-compose.yml de tê vesaz kirin, were mîheng kirin. Li wir hûn dikarin pîvanên cihêreng ên wekî navê konteynir, port, nasname, sînorên çavkaniyê, girêdanên di navbera konteynerên din de bicîh bikin. Ger hûn di mîhengan de navek konteynerek diyar nekin, wê hingê Docker dê her carê konteynirek nû biafirîne, navek jê re bi awakî rastdar bide.

Dema ku konteynerek ji wêneyekê dest pê dike, Docker pergala pelan a xwendin/nivîsandinê li ser her qatên jêrîn girêdide. Li vir hemî pêvajoyên ku em dixwazin konteynera xweya Docker bimeşîne dê bimeşin.

Dema ku Docker yekem konteynerek dest pê dike, qata xwendin/nivîsandina destpêkê vala ye. Dema ku guhertin çêdibin, ew li ser wê qatê têne sepandin; wek nimûne, heke hûn bixwazin pelek biguhezînin, ew pel dê ji qata tenê xwendinê ya jêrîn ji qata xwendin-nivîsandinê were kopî kirin.
Guhertoya pelê ya tenê-xwendin dê hîn hebe, lê naha di binê kopê de veşartî ye. Volume ji bo hilanîna daneyan têne bikar anîn, bêyî ku çerxa jiyanê ya konteynerê. Dema ku konteynir tê afirandin cild têne destpêkirin.

Wêne çawa bi konteynerê re têkildar e?

Wêne - hêmana sereke ji bo her konteynir. Wêneyek ji Dockerfile-ya ku li projeyê hatî zêdekirin hatî çêkirin û komek pergalên pelan (qatan) e ku li ser hev û li hev kom bûne, tenê ji bo xwendinê peyda dibin; herî zêde hejmara qatan 127 e.

Di dilê her wêneyê de wêneyek bingehîn heye, ku ji hêla fermana FROM ve tête diyar kirin - xala têketinê dema ku wêneyek Dockerfile çêdike. Her qatek qatek tenê xwendinê ye û bi fermanek yekane ku pergala pelê diguhezîne, ku di Dockerfile de hatî nivîsandin, tê destnîşan kirin.
Ji bo ku van qatan di wêneyek yekane de berhev bike, Docker pergala pelê Yekîtiya Pêşkeftî ya pir-qatî bikar tîne (AuFS li ser UnionFS-ê hatî çêkirin), dihêle pel û peldankên cihêreng ji qatên pelê yên cihêreng bi zelalî li hev bikin, pergala pelê ya têkildar biafirînin.

Qat metadata dihewîne ku dihêle hûn di dema xebitandinê û dema çêkirinê de agahdariya têkildar li ser her qatek hilînin. Her qatek girêdanek ji qata din re vedihewîne, heke zencîreya qatê tune be, wê hingê ev qata herî jorîn a wêneyê ye.

Dibe ku Dockerfile fermanên wekî:

  • FROM - xala têketinê di avakirina wêneyê de;
  • MAINTAINER - navê xwediyê wêneyê;
  • RUN - pêkanîna fermanê di dema kombûna wêneyê de;
  • ADD - kopîkirina pelê mêvandar li wêneyek nû, heke hûn pelek URL-ê diyar bikin, Docker dê wê li pelrêça diyarkirî dakêşîne;
  • ENV - guherbarên jîngehê;
  • CMD - li ser bingeha wêneyê dest bi çêkirina konteynirek nû dike;
  • ENTRYPOINT - Dema ku konteynir dest pê dike ferman tê darve kirin.
  • WORKDIR pelrêça xebatê ye ji bo pêkanîna fermana CMD.
  • BERSÎVEK - UID-ê ji bo konteynerê ku ji wêneyê hatî çêkirin destnîşan dike.
  • VOLUME - Peldanka mêvandar li konteynerê siwar dike.
  • EXPOSE komek benderan e ku di konteynerê de tê guhdarî kirin.

UnionFS çawa dixebite?

UnionFS - Pergala pelê stackê ya karûbarê (FS) ji bo Linux û FreeBSD. Ev FS mekanîzmaya kopî-li-nivîsandinê (Copy-On-Write, COW) pêk tîne. Yekîneya xebatê ya UnionFS qateyek e, divê her qatek wekî pergalek pelê ya bêkêmasî ya cihêreng bi hiyerarşiyek pelrêça ji kokê bixwe ve were hesibandin. UnionFS ji bo pergalên pelan ên din mountek yekîtiyê diafirîne û dihêle hûn pel û peldankan ji pergalên pelan ên cihêreng (bi navên şax) bi zelalî li yek pergala pelan a girêdayî, bi zelalî ji bikarhênerê re yek bikin.

Naveroka pelrêçiyên bi heman rêyan dê bi hev re di yek pelrêça hevgirtî (di heman navî de) ya pergala pelê ya encam de were xuyang kirin.

UnionFS qatan li ser bingeha prensîbên jêrîn berhev dike:

  • yek ji qatan dibe qatek asta jor, qatên duyemîn û yên dû re dibin qatên asta jêrîn;
  • tiştên qat ji bikarhêner re "ji serî heta binî" bigihîjin, ango. heke tişta tê xwestin di qata "jor" de be, ew tê vegerandin, bêyî ku di qata "jêr" de tiştek bi heman navî hebe; wekî din, tiştê qata "bin" tê vegerandin; heke tişta tê xwestin ne li wir û ne jî li wir be, xeletiya "Pel an pelrêça wusa tune" tê vegerandin;
  • qata xebatê ya "jor" e, ango, hemî kiryarên bikarhêner ji bo guheztina daneyan tenê li ser qata asta jorîn têne xuyang kirin, bêyî ku bandorê li naveroka qatên astê jêrîn bike.

Docker teknolojiya herî gelemperî ye ku ji bo karanîna konteynir di xebata serîlêdanê de ye. Ew di vî warî de bûye standard, ku li ser cgroup û navên ku ji hêla kernel Linux ve hatî peyda kirin ava dike.

Docker destûrê dide me ku em zû serîlêdanan bicîh bikin û pergala pelan çêtirîn bikar bînin bi parvekirina kernel OS-ê di navbera hemî konteyneran de, ku wekî pêvajoyên OS-ê yên cihêreng dixebitin.

Source: www.habr.com

Add a comment