VM au Docker?

Unajuaje ikiwa unahitaji Docker na sio VM? Unahitaji kuamua ni nini hasa unataka kutenganisha. Ikiwa unataka kutenganisha mfumo na rasilimali zilizojitolea zilizohakikishwa na vifaa vya kawaida, basi chaguo linapaswa kuwa VM. Ikiwa unahitaji kutenga programu zinazoendesha kama michakato tofauti ya mfumo, utahitaji Docker.

Kwa hivyo ni tofauti gani kati ya vyombo vya Docker na VM?

Mashine pepe (VM) ni kompyuta pepe iliyo na vifaa vyote dhahania na diski kuu ngumu ambayo OS mpya huru imewekwa pamoja na viendeshi vya kifaa pepe, usimamizi wa kumbukumbu na vipengee vingine. Hiyo ni, tunapata uondoaji wa maunzi halisi ambayo huturuhusu kuendesha kompyuta nyingi pepe kwenye kompyuta moja.
VM iliyosakinishwa inaweza kuchukua nafasi kwenye diski ya kompyuta yako kwa njia tofauti:

  • nafasi iliyowekwa ya diski ngumu, ambayo inaruhusu ufikiaji wa haraka wa diski ngumu ya kawaida na epuka kugawanyika kwa faili;
  • mgao wa kumbukumbu wenye nguvu. Wakati wa kusakinisha programu za ziada, kumbukumbu itagawiwa kwa ajili yao hadi ifikie kiwango cha juu zaidi kilichotengwa kwake.

Kadiri mashine pepe inavyozidi kwa kila seva, ndivyo inavyochukua nafasi zaidi, na pia zinahitaji usaidizi wa mara kwa mara kwa mazingira yanayohitajika ili programu yako ifanye kazi.

Docker ni programu ya kuunda programu kulingana na kontena. Vyombo na mashine za kawaida zina faida sawa, lakini hufanya kazi tofauti. Makontena huchukua nafasi kidogo kwa sababu... tumia tena rasilimali nyingi zilizoshirikiwa za mfumo wa mwenyeji kuliko VM, kwa sababu tofauti na VM, hutoa virtualization katika ngazi ya OS, si katika ngazi ya vifaa. Mbinu hii husababisha kumbukumbu ya chini zaidi, utumiaji haraka, na kuongeza kwa urahisi.

Chombo hutoa utaratibu mzuri zaidi wa kujumuisha programu kwa kutoa miingiliano inayohitajika kwa mfumo wa seva pangishi. Kipengele hiki huruhusu vyombo kushiriki kiini cha mfumo, huku kila kontena likifanya kazi kama mchakato tofauti wa mfumo wa uendeshaji ambao una seti yake ya maeneo ya kumbukumbu (nafasi yake ya anwani pepe). Kwa kuwa nafasi ya anwani pepe ya kila kontena ni yake mwenyewe, data ya maeneo tofauti ya kumbukumbu haiwezi kubadilishwa.
OS ya asili kwa Docker ni Linux (Docker pia inaweza kutumika kwenye Windows na MacOS), hutumia faida zake kuu, ambayo inaruhusu kuandaa kujitenga kwa kernel. Kuendesha vyombo vya Docker kwenye Windows kutafanyika ndani ya mashine pepe inayoendesha Linux OS, kwa sababu vyombo vinashiriki OS ya mfumo wa mwenyeji na OS kuu kwao ni Linux.

Chombo - inafanyaje kazi?

chombo ni kifupisho cha kiwango cha programu ambacho huchanganya msimbo na vitegemezi. Vyombo daima huundwa kutoka kwa picha, na kuongeza safu ya juu inayoweza kuandikwa na kuanzisha vigezo mbalimbali. Kwa sababu chombo kina safu yake ya uandishi na mabadiliko yote yamehifadhiwa kwenye safu hiyo, vyombo vingi vinaweza kushiriki ufikiaji wa picha kuu sawa.

Kila chombo kinaweza kusanidiwa kupitia faili katika mradi wa utungaji wa docker uliojumuishwa kwenye suluhisho kuu - docker-compose.yml. Huko unaweza kuweka vigezo mbalimbali kama vile jina la chombo, bandari, vitambulisho, mipaka ya rasilimali, tegemezi kati ya vyombo vingine. Ikiwa hutataja jina la chombo katika mipangilio, Docker itaunda chombo kipya kila wakati, na kukipa jina nasibu.

Wakati kontena inapoanzishwa kutoka kwa picha, Docker huweka mfumo wa faili wa kusoma-kuandika juu ya tabaka zozote hapa chini. Hapa ndipo michakato yote tunayotaka kontena yetu ya Docker iendeshe itaendesha.

Wakati Docker inapoanzisha kontena kwanza, safu ya kwanza ya kusoma-kuandika haina kitu. Wakati mabadiliko yanatokea, hutumiwa kwenye safu hii; kwa mfano, ikiwa unataka kubadilisha faili, faili hiyo itanakiliwa kutoka safu ya kusoma tu iliyo hapa chini hadi safu ya kusoma-kuandika.
Toleo la kusoma tu la faili bado litakuwepo, lakini sasa limefichwa chini ya nakala. Kiasi hutumika kuhifadhi data, bila kujali mzunguko wa maisha wa chombo. Kiasi huanzishwa wakati chombo kinaundwa.

Je, picha inahusiana vipi na chombo?

Picha - kipengele kikuu kwa kila chombo. Picha imeundwa kutoka kwa Dockerfile iliyoongezwa kwenye mradi na ni seti ya mifumo ya faili (tabaka) iliyowekwa juu ya kila mmoja na kuunganishwa pamoja, kusoma tu; idadi ya juu ya tabaka ni 127.

Katika moyo wa kila picha ni picha ya msingi, ambayo inatajwa na amri ya FROM - hatua ya kuingia wakati wa kujenga picha ya Dockerfile. Kila safu ni safu ya kusoma tu na inawakilishwa na amri moja ambayo inarekebisha mfumo wa faili, iliyoandikwa katika Dockerfile.
Ili kuchanganya tabaka hizi kuwa picha moja, Docker hutumia Mfumo wa Juu wa faili wa Muungano wa tabaka nyingi (AuFS imejengwa juu ya UnionFS), ikiruhusu faili na saraka tofauti kutoka kwa tabaka tofauti za faili kufunikwa kwa uwazi, na kuunda mfumo wa faili wa kushikamana.

Safu zina metadata inayokuruhusu kuhifadhi maelezo yanayohusiana kuhusu kila safu wakati wa utekelezaji na wakati wa ujenzi. Kila safu ina kiunga cha safu inayofuata; ikiwa safu haina kiunga, basi ni safu ya juu zaidi kwenye picha.

Dockerfile inaweza kuwa na amri kama vile:

  • FROM - mahali pa kuingilia wakati wa kuunda picha;
  • MAINTAINER - jina la mmiliki wa picha;
  • RUN - utekelezaji wa amri wakati wa mkusanyiko wa picha;
  • ADD - kunakili faili ya mwenyeji kwa picha mpya; ukitaja URL ya faili, Docker itaipakua kwenye saraka maalum;
  • ENV - vigezo vya mazingira;
  • CMD - huanza kuundwa kwa chombo kipya kulingana na picha;
  • ENTRYPOINT - amri inatekelezwa wakati chombo kinapoanza.
  • WORKDIR ni saraka ya kufanya kazi ya kutekeleza amri ya CMD.
  • USER - huweka UID kwa kontena iliyoundwa kulingana na picha.
  • VOLUME - huweka saraka ya mwenyeji kwenye chombo.
  • EXPOSE ni seti ya milango inayosikilizwa kwenye kontena.

Je, UnionFS inafanya kazi vipi?

MuunganoFS - Mfumo wa faili wa stack za matumizi (FS) kwa Linux na FreeBSD. FS hii inatekeleza utaratibu wa kunakili-kwa-kuandika (Copy-On-Write, COW). Kitengo cha kufanya kazi cha UnionFS ni safu; kila safu inapaswa kuzingatiwa kama mfumo tofauti wa faili kamili na safu ya saraka kutoka kwa mzizi yenyewe. UnionFS huunda mkusanyiko wa umoja kwa mifumo mingine ya faili na inaruhusu faili na saraka kutoka kwa mifumo tofauti ya faili (inayoitwa uma) kuunganishwa kuwa mfumo mmoja wa faili thabiti, kwa uwazi kwa mtumiaji.

Yaliyomo kwenye saraka zilizo na njia sawa yataonekana pamoja katika saraka moja iliyounganishwa (katika nafasi moja ya majina) ya mfumo wa faili unaotokana.

UnionFS inachanganya tabaka kulingana na kanuni zifuatazo:

  • moja ya tabaka inakuwa safu ya juu, safu ya pili na inayofuata huwa safu za chini;
  • vitu vya safu vinapatikana kwa mtumiaji "kutoka juu hadi chini", i.e. ikiwa kitu kilichoombwa kiko kwenye safu ya "juu", inarudishwa, bila kujali uwepo wa kitu kilicho na jina moja kwenye safu ya "chini"; vinginevyo kitu cha safu ya "chini" kinarejeshwa; ikiwa kitu kilichoombwa hakipo wala huko, hitilafu "Hakuna faili au saraka kama hiyo" inarejeshwa;
  • safu ya kazi ni "juu", yaani, vitendo vyote vya mtumiaji kubadilisha data vinaonyeshwa tu kwenye safu ya juu, bila kuathiri yaliyomo ya tabaka za viwango vya chini.

Docker ndio teknolojia ya kawaida ya kutumia kontena kuendesha programu. Imekuwa kiwango kwenye uwanja, ikijengwa kwenye vikundi na nafasi za majina zinazotolewa na kinu cha Linux.

Docker huturuhusu kupeleka programu kwa haraka na kutumia vyema mfumo wa faili kwa kugawanya kerneli ya OS kati ya vyombo vyote, inayoendesha kama michakato tofauti ya OS.

Chanzo: mapenzi.com

Kuongeza maoni