VM või Docker?

Kuidas mõista, et vajate Dockerit, mitte VM-i? Tuleb määrata, mida täpselt soovite isoleerida. Kui peate isoleerima süsteemi, millel on garanteeritud eraldatud ressursid ja virtuaalne riistvara, siis tuleks valida VM. Kui on vajalik isoleerida töötavad rakendused kui eraldi protsessid süsteemis, vajate Dockerit.

Mis siis on Docker-konteinerite ja VM-i erinevus?

Virtuaalmasin (VM) — on virtuaalne arvuti koos kõikide virtuaalsete seadmete ja virtuaalse kõvakettaga, millele installitakse uus sõltumatu operatsioonisüsteem koos virtuaalsete seadme draiverite, mälu haldamise ja muude komponentidega. Ehk saame füüsilise riistvara abstraktsiooni, mis võimaldab ühe arvuti peal käitada mitmeid virtuaalseid arvuteid.
Paigaldatud VM võib arvuti kettal erinevalt ruumi võtta:

  • fikseeritud ruum kõvakettal, mis võimaldab kiiremat juurdepääsu virtuaalsele kõvakettale ja aitab vältida faili fragmentatsiooni;
  • mälu dünaamiline eraldamine. Täiendavate rakenduste installimisel eraldatakse mälu nende jaoks dünaamiliselt, kuni saavutatakse määratud maksimaalne maht.

Mida rohkem virtuaalmasinad serverisse installitakse, seda rohkem ruumi nad võtavad ja need nõuavad pidevat keskkonna toetust, mis on vajalik teie rakenduse toimimiseks.

Docker — see on konteineripõhine rakenduste loomise tarkvara. Konteineritel ja virtuaalmasinatele on sarnased eelised, kuid need töötavad erinevalt. Konteinerid võtavad vähem ruumi, kuna need kasutavad rohkem host-süsteemi ühiseid ressursse kui virtuaalsed masinad (VM), kuna erinevalt VM-ist tagab see virtualiseerimise operatsioonisüsteemi tasemel, mitte riistvara tasemel. See lähenemine tagab väiksema mälu kasutuse, kiirema juurutamise ja lihtsama skaleeritavuse.

Konteiner pakub tõhusamat rakenduste kapseldamise mehhanismi, tagades vajalikud host-süsteemi liidesed. See võimalus võimaldab konteineritel jagada süsteemi tuuma, kus iga konteiner töötab kui eraldi protsess põhios, mis omab omaenda mälupiirkondade kogumit (oma virtuaalne aadressiruumi). Kuna iga konteineri virtuaalne aadressiruum on iseseisev, ei saa erinevate mälupiirkondade andmeid muuta.
Docker'i natiivne opsüsteem on Linux (Dockerit saab kasutada ka Windowsis ja MacOS-is), see kasutab Linuxi põhilisi eeliseid, mis võimaldavad tal korraldada tuuma jagamist. Docker-konteinerite käivitamine Windowsis toimub Linuxi opsüsteemiga virtuaalmasinas, kuna konteinerid jagavad host-süsteemi opsüsteemi ja nende peamine opsüsteem on Linux.

Konteiner – kuidas see töötab?

Konteiner — see on rakendustasandi abstraktsioon, mis ühendab koodi ja sõltuvused. Konteinerid luuakse alati piltidest, lisades kirjutatav ülemine kiht ja initsialiseerides erinevad parameetrid. Kuna konteineril on oma kirjutamise kiht ja kõik muudatused salvestatakse sellele kihile, saavad mitmed konteinerid kasutada ühte ja sama algset pilti.

Iga konteinerit saab konfigureerida projekti docker-compose failiga, mis on kaasatud põhilahendusse — docker-compose.yml. Seal saab määrata erinevaid parameetreid, nagu konteineri nimi, sadamad, ID-d, ressursipiirangud, sõltuvused teiste konteinerite vahel. Kui seadistustes konteineri nime ei määrata, loob Docker iga kord uue konteineri, omistades sellele nime juhuslikult.

Kui konteiner käivitatakse pildist, monteerib Docker failisüsteemi lugemiseks ja kirjutamiseks mistahes allolevate kihtide kohal. Just seal täidetakse kõik protsessid, mida soovime, et meie Docker konteiner teeks.

Kui Docker käivitab konteineri, on kirjutamis- ja lugemiskiht tühi. Muudatused rakendatakse sellele kihile; näiteks, kui soovite faili muuta, kopeeritakse see fail allolevalt ainult lugemiseks mõeldud kihilt kirjutamis- ja lugemiskihti.
Ainult lugemiseks mõeldud failiversioon jääb endiselt olemasolevaks, kuid nüüd on see peidetud koopia alla. Andmete talletamiseks, sõltumata konteineri elutsüklist, kasutatakse mahtusid. Mahud initsialiseeritakse konteineri loomisel.

Kuidas on pilt seotud konteineriga?

Pilt — iga konteineri peamine komponent. Pilt luuakse projekti lisatud Dockerfile'ist ja see koosneb üksteise peale ladestatud, ainult lugemiseks mõeldud failisüsteemide (kihtide) komplektist; maksimaalne kihtide arv on 127.

Iga pildi aluseks on baaspilt, mis määratakse FROM käsuga — sissepääs punkt Dockerfile'i kujundamisel. Iga kiht on ainult lugemiseks mõeldud kiht ja seda esindab üks käsk, mis muudab failisüsteemi, mis on kirjutatud Dockerfile'i.
Nende kihtide ühendamiseks üheks Docker kasutab Advanced multi layered Union file system (AuFS põhineb UnionFS-il), mis võimaldab erinevatel failidel ja kaustadel erinevatest failikihtidest läbipaistvalt kattuda, luues seotud failisüsteemi.

Kihid sisaldavad metaandmeid, mis võimaldavad salvestada iga kihi kohta seotud teavet käitamise ja koostamise ajal. Iga kiht sisaldab viidet järgmisele kihile; kui kihil ei ole viidet, siis on see piltide pealmine kiht.

Dockerfile võib sisaldada selliseid käske nagu:

  • FROM — sisenemispunkt pildi vormimisel;
  • MAINTAINER — pildi omanik;
  • RUN — käsu täitmine pildi koostamise käigus;
  • ADD — faili kopeerimine hostist uude pildisse; kui määrata faili URL, laadib Docker selle määratud kausta;
  • ENV — keskkonnamuutujad;
  • CMD — käivitab uue konteineri loomise põhjal pildist;
  • ENTRYPOINT — käsk, mis täidetakse konteineri käivitamisel.
  • WORKDIR — töökaust CMD käsu täitmiseks.
  • USER — määrab UID genereeritavale konteinerile, mis põhineb pildil.
  • VOLUME — mountib hostikausta konteinerisse.
  • EXPOSE — loetelu pordidest, mida konteiner kuulab.

Kuidas UnionFS töötab?

UnionFS — teenuseline stäkkfailisüsteem (FS) Linuxile ja FreeBSD-le. See failisüsteem rakendab kirjutamise koopia (Copy-On-Write, COW) mehhanismi. UnionFS-i tööüksus on kiht, iga kihti tuleb käsitleda eraldiseisva täieõigusliku failisüsteemina, millel on kaustade hierarhia alates juurest. UnionFS loob koosmõjusüsteemi teiste failisüsteemide jaoks ja võimaldab kasutajale läbipaistvalt ühendada erinevate failisüsteemide (harudena tuntud) faile ja katalooge ühte seotud failisüsteemi.

Sama teed omavate kataloogide sisu kuvatakse koos ühes ühises kataloogis (ühes nimespiraalis) saadud failisüsteemis.

UnionFS ühendab kihid, järgides järgmisi põhimõtteid:

  • üks kiht muutub peamiseks kihiks, teised ja järgmised on alumiste kihtidena;
  • kasutajale on kihtide objektid saadaval "ülevalt alla", s.t. kui küsitud objekt asub "ülemises" kihis, naaseb see, sõltumata objekti olemasolust "alumises" kihis; vastasel juhul naaseb "alumise" kihi objekt; kui küsitud objekti ei ole ühes ega teises, naaseb viga "Sellist faili või katalooge ei leita";
  • töökihiks on "ülemine", see tähendab, et kasutaja kõik andmete muutmise toimingud kajastuvad ainult ülemise tasandi kihis, mõjutamata alumiste tasandite sisu.

Docker on kõige levinum konteineritehnoloogia rakenduste tööks. See on saanud standardiks selles valdkonnas, tuginedes cgroup'idele ja nimede ruumidele, mida tagab Linuxi kernel.

Docker võimaldab meil kiiresti rakendusi käivitada ja maksimaalselt tõhusalt kasutada faili süsteemi, jagades operatsioonisüsteemi kernelit kõigi konteinerite vahel, töötades nagu eraldi operatsioonisüsteemi protsessid.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster