VM või Docker?

Kuidas teada saada, kas vajate Dockerit, mitte VM-i? Peate kindlaks määrama, mida täpselt soovite isoleerida. Kui soovite isoleerida garanteeritud spetsiaalsete ressursside ja virtuaalse riistvaraga süsteemi, peaksite valima virtuaalse masina. Kui peate isoleerima töötavad rakendused eraldi süsteemiprotsessidena, vajate Dockerit.

Mis vahe on Dockeri konteineritel ja VM-idel?

Virtuaalne masin (VM) on virtuaalne arvuti kõigi virtuaalsete seadmete ja virtuaalse kõvakettaga, millele on installitud uus sõltumatu OS koos virtuaalsete seadme draiverite, mäluhalduse ja muude komponentidega. See tähendab, et saame füüsilise riistvara abstraktsiooni, mis võimaldab meil ühes arvutis käitada palju virtuaalseid arvuteid.
Installitud VM võib teie arvuti kettal ruumi võtta mitmel viisil.

  • fikseeritud kõvakettaruum, mis võimaldab kiiremat juurdepääsu virtuaalsele kõvakettale ja väldib failide killustumist;
  • dünaamiline mälu eraldamine. Täiendavate rakenduste installimisel eraldatakse nende jaoks dünaamiliselt mälu, kuni see jõuab talle eraldatud maksimaalse mahuni.

Mida rohkem virtuaalmasinaid serveri kohta, seda rohkem ruumi nad võtavad ja vajavad ka teie rakenduse tööks vajaliku keskkonna pidevat tuge.

laevalaadija on tarkvara konteineripõhiste rakenduste loomiseks. Konteinerite ja virtuaalmasinate eelised on sarnased, kuid toimivad erinevalt. Konteinerid võtavad vähem ruumi, sest... taaskasutage hostsüsteemi rohkem jagatud ressursse kui VM, kuna erinevalt VM-ist pakub see virtualiseerimist OS-i, mitte riistvara tasemel. Selle lähenemisviisi tulemuseks on väiksem mälumaht, kiirem juurutamine ja lihtsam skaleerimine.

Konteiner pakub tõhusamat mehhanismi rakenduste kapseldamiseks, pakkudes hostsüsteemile vajalikud liidesed. See funktsioon võimaldab konteineritel jagada süsteemi tuuma, kusjuures iga konteiner töötab eraldi host-OS-i protsessina, millel on oma mälualade komplekt (oma virtuaalne aadressiruum). Kuna iga konteineri virtuaalne aadressiruum on oma, siis erinevatesse mälupiirkondadesse kuuluvaid andmeid muuta ei saa.
Dockeri algne OS on Linux (Dockerit saab kasutada ka Windowsis ja MacOS-is), see kasutab oma peamisi eeliseid, mis võimaldavad tal korraldada tuuma eraldamist. Dockeri konteinerite käitamine Windowsis toimub virtuaalses masinas, milles töötab Linux OS, kuna konteinerid jagavad hostsüsteemi OS-i ja nende peamine OS on Linux.

Konteiner – kuidas see töötab?

Konteiner on rakenduse tasemel abstraktsioon, mis ühendab koodi ja sõltuvused. Konteinerid luuakse alati piltidest, lisades kirjutatava pealmise kihi ja lähtestades erinevaid parameetreid. Kuna konteineril on oma kirjutuskiht ja kõik muudatused salvestatakse sellesse kihti, saavad mitu konteinerit jagada juurdepääsu samale põhipildile.

Iga konteinerit saab konfigureerida faili kaudu põhilahenduses sisalduvas docker-compose projektis - docker-compose.yml. Seal saate määrata erinevaid parameetreid nagu konteineri nimi, pordid, identifikaatorid, ressursipiirangud, sõltuvused teiste konteinerite vahel. Kui te sätetes konteineri nime ei määra, loob Docker iga kord uue konteineri, andes sellele juhuslikult nime.

Kui konteiner käivitatakse pildilt, ühendab Docker allolevate kihtide peale lugemis-kirjutamise failisüsteemi. Siin töötavad kõik protsessid, mida tahame, et meie Dockeri konteiner töötaks.

Kui Docker käivitab konteineri esmakordselt, on esialgne lugemis-kirjutuskiht tühi. Muudatuste ilmnemisel rakendatakse need sellele kihile; Näiteks kui soovite faili muuta, kopeeritakse see fail allolevast kirjutuskaitstud kihist lugemis-kirjutamiskihile.
Faili kirjutuskaitstud versioon jääb alles, kuid nüüd on see koopia alla peidetud. Andmete salvestamiseks kasutatakse mahtusid, olenemata konteineri elutsüklist. Mahud lähtestatakse konteineri loomisel.

Kuidas on pilt konteineriga seotud?

Pilt — iga konteineri põhielement. Pilt luuakse projektile lisatud Dockerfile'ist ja see on üksteise peale asetatud ja kokku rühmitatud failisüsteemide (kihtide) komplekt, kirjutuskaitstud; maksimaalne kihtide arv on 127.

Iga pildi keskmes on põhipilt, mille määrab käsk FROM – sisenemispunkt Dockerfile'i pildi koostamisel. Iga kiht on kirjutuskaitstud kiht ja seda esindab üks Dockerfaili kirjutatud käsk, mis muudab failisüsteemi.
Nende kihtide üheks pildiks ühendamiseks kasutab Docker Advanced mitmekihilist Union-failisüsteemi (AuFS on ehitatud UnionFS-i peale), võimaldades erinevate failikihtide erinevaid faile ja katalooge läbipaistvalt katta, luues ühtse failisüsteemi.

Kihid sisaldavad metaandmeid, mis võimaldavad salvestada iga kihi kohta seotud teavet käitus- ja koostamise ajal. Iga kiht sisaldab linki järgmisele kihile; kui kihil linki pole, on see pildi ülemine kiht.

Dockerfile võib sisaldada selliseid käske nagu:

  • FROM — sisenemispunkt kujutise moodustamisel;
  • HOIDJA - pildi omaniku nimi;
  • RUN — käsu täitmine pildi koostamise ajal;
  • ADD - hostfaili kopeerimine uuele pildile; kui määrate faili URL-i, laadib Docker selle määratud kataloogi alla;
  • ENV - keskkonnamuutujad;
  • CMD - alustab pildi põhjal uue konteineri loomist;
  • ENTRYPOINT – käsk täidetakse konteineri käivitumisel.
  • WORKDIR on töökataloog CMD käsu täitmiseks.
  • KASUTAJA – määrab pildi põhjal loodud konteineri UID.
  • VOLUME – ühendab hosti kataloogi konteinerisse.
  • EXPOSE on portide komplekt, mida konteineris kuulatakse.

Kuidas UnionFS töötab?

UnionFS - utiliidi pinu failisüsteem (FS) Linuxi ja FreeBSD jaoks. See FS rakendab kirjutamisel kopeerimise mehhanismi (Copy-On-Write, COW). UnionFS-i tööüksus on kiht; iga kihti tuleks pidada eraldiseisvaks täieõiguslikuks failisüsteemiks, millel on juurkataloogist pärit kataloogide hierarhia. UnionFS loob union mounti teistele failisüsteemidele ja võimaldab erinevatest failisüsteemidest pärit faile ja katalooge (nn kahvlid) ühendada üheks sidusaks failisüsteemiks, mis on kasutaja jaoks läbipaistev.

Samade teedega kataloogide sisu kuvatakse koos saadud failisüsteemi ühes ühtses kataloogis (ühes nimeruumis).

UnionFS ühendab kihte järgmistel põhimõtetel:

  • ühest kihtidest saab ülemise taseme kiht, teisest ja järgnevatest kihtidest saavad madalama taseme kihid;
  • kihiobjektid on kasutajale kättesaadavad “ülevalt alla”, st. kui taotletav objekt on ülemises kihis, tagastatakse see olenemata sama nimega objekti olemasolust "alumises" kihis; vastasel juhul tagastatakse "alumise" kihi objekt; kui soovitud objekti pole seal ega seal, tagastatakse tõrge “Sellist faili või kataloogi pole”;
  • töökiht on "ülemine", see tähendab, et kõik kasutaja toimingud andmete muutmiseks kajastuvad ainult ülemisel tasemel, mõjutamata madalamate tasemete kihtide sisu.

Docker on kõige levinum tehnoloogia konteinerite kasutamiseks rakenduste käitamiseks. Sellest on saanud valdkonna standard, tuginedes Linuxi kerneli pakutavatele c-rühmadele ja nimeruumidele.

Docker võimaldab meil rakendusi kiiresti juurutada ja failisüsteemi kõige paremini ära kasutada, jagades OS-i tuuma kõigi konteinerite vahel, mis töötavad eraldi OS-i protsessidena.

Allikas: www.habr.com

Lisa kommentaar