VM või Docker?

Kuidas mõista, kas vajate Dockerit või VM-i? Tuleb määratleda, mida täpselt soovite isoleerida. Kui on vajalik isoleerida süsteem koos garanteeritud reserveeritud ressurssidega ja virtuaalse riistvaraga, on valikuks VM. Kui seevastu on vaja isoleerida töötavad rakendused kui eraldiseisvad süsteemi protsessid, vajate Dockerit.

Mis siis tegelikult eristab Docker-konteinereid VM-idest?

Virtuaalne masin (VM) on virtuaalne arvuti kõigi virtuaalsete seadmete ja virtuaalse kõvakettaga, kuhu installitakse uus sõltumatu opsüsteem koos virtuaalsete seadme draiveritega, mäluhalduse ja muude koostisosadega. See tähendab, et saame füüsilise riistvara abstraktsiooni, mis võimaldab ühel arvutil käitada mitmeid virtuaalseid arvuteid.
Installitud VM võib hõivata erinevalt ruumi arvuti kõvakettal:

  • fikseeritud ruumi kõvakettal, mis võimaldab kiiremat ligipääsu virtuaalsele kõvakettale ja aitab vältida faili fragmenteerimist;
  • dünaamiline mälu eraldamine. Täiendavate rakenduste installimisel eraldatakse mälumahtu dünaamiliselt neile, kuni saavutatakse maksimaalne maht, mis on ette nähtud.

Mida rohkem virtuaalmasinate serverisse paigutatakse, seda rohkem ruumi nad võtavad ning nõuavad pidevat keskkonna toetust, mis on vajalik teie rakenduse toimimiseks.

Docker on konteinerite põhjal rakenduste loomise tarkvara. Konteinerid ja virtuaalmasinaid omavad sarnaseid eeliseid, kuid töötavad erinevalt. Konteinerid võtavad vähem ruumi, kuna taaskasutavad suuremat hulka ühiseid host-süsteemi ressursse kui VM-id, kuna erinevalt VM-idest tagab see virtualiseerimise opsüsteemi tasemel, mitte riistvara tasemel. See lähenemine tagab väiksema mälumahtu, kiirema juurutamise ja lihtsama skaleerimise.

Konteiner pakub tõhusamat rakenduste kapseldamise mehhanismi, pakkudes vajalikke liideseid host-süsteemile. See võimalus võimaldab konteineritel jagada süsteemi tuuma, kus iga konteiner töötab nagu eraldi protsess põhiosas, millel on oma mälu piirkondade kogum (oma virtuaalne aadressiruum). Kuna iga konteineri virtuaalne aadressiruum on ainulaadne, ei saa andmed, mis kuuluvad erinevatesse mälu piirkondadesse, üksteist muuta.
Docker'i natiivne operatsioonisüsteem on Linux (Dockerit saab kasutada ka Windowsis ja MacOS-is), mis kasutab selle põhieeliseid, mis võimaldavad tal korraldada tuumade jagamist. Docker'i konteinerite käivitamine Windowsis toimub Linuxi operatsioonisüsteemiga virtuaalmasinas, kuna konteinerid jagavad host-süsteemi OS-i ja nende peamine OS on Linux.

Konteiner — kuidas see toimib?

Konteiner on rakenduse tasemel abstraktsioon, mis ühendab koodi ja sõltuvused. Konteinerid luuakse alati piltidest, lisades kirjutatav ülemine kiht ja initsialiseerides erinevaid parameetreid. Kuna konteineril on oma kirjutuskiht ja kõik muudatused salvestatakse sellesse kihti, saavad mitmed konteinerid ühiselt kasutada ühte ja sama põhikujutist.

Iga konteinerit saab konfigureerida projektis docker-compose asuva faili kaudu, mis on seotud põhilahendusega — docker-compose.yml. Seal saab määrata erinevaid parameetreid, nagu konteineri nimi, sadamad, identifikaatorid, ressursside piirangud, sõltuvused teistest konteineritest. Kui konteineri nime seadistustes ei määrata, loob Docker igal korral uue konteineri, andes sellele nime juhuslikult.

Kui konteiner käivitatakse pildist, monteerib Docker failisüsteemi lugemiseks ja kirjutamiseks allpool asuvate kihtide peale. Just siin käivitatakse kõik protsessid, mida soovime, et meie Docker konteiner täidaks.

Kui Docker käivitab konteineri esmakordselt, on algne lugemis-kirjutuskiht tühi. Kui muudatusi tehakse, rakendatakse need sellele kihile; näiteks, kui soovite faili muuta, kopeeritakse see all olevast ainult lugemiseks mõeldud kihist lugemis-kirjutuskihti.
A failiversioon, mis on saadaval ainult lugemiseks, jääb endiselt alles, kuid nüüd on see peidetud koopia alla. Andmete salvestamiseks, sõltumata konteineri elutsüklist, kasutatakse mahtusid. Mahud initsialiseeritakse konteineri loomisel.

Kuidas on pilt seotud konteineriga?

Tüüp — iga konteineri peamine element. Pilt luuakse projektile lisatud Dockerfile'ist ja see esindab failisüsteemide (kihtide) kogumit, mis on omavahel kuhjatud ja koos gruppeeritud, ning need on ainult loetavad; maksimaalne kihtide arv on 127.

Iga pildi aluseks on baasimage, mille määrab käsk FROM — sisendpunkt pildi koostamisel Dockerfile'is. Iga kiht on ainult lugemiseks mõeldud ja esindab ühte käsku, mis muudab failisüsteemi, nagu on kirjas Dockerfile'is.
Korras piltide ühendamiseks kasutab Docker Advanced multi layered Union failisüsteemi (AuFS, mis on ehitatud UnionFS-i põhjal), mis võimaldab erinevatel failidel ja kaustadel erinevatest failikihtidest läbipaistvalt kattuda, luues ühendatud failisüsteemi.

Kihtidel on metainformatsioon, mis võimaldab salvestada iga kihi kohta seotud teavet töö ajal ja kokkupanekul. Iga kiht sisaldab viidet järgmisele kihile, kui kihil ei ole viidet, siis on see pildi ülemine kiht.

Dockerfile võib sisaldada selliseid käske nagu:

  • FROM — sisendpunkt pildi koostamisel;
  • MAINTAINER — pildi omaniku nimi;
  • RUN — käsu täitmine pildi koostamise käigus;
  • ADD — hostifaili kopeerimine uude pilti, kui määrata failide URL, laadib Docker selle määratud katalooge;
  • ENV — keskkonnamuutujad;
  • CMD — käivitab uue konteineri loomise pildi alusel;
  • ENTRYPOINT — käsk täidetakse konteineri käivitamisel.
  • WORKDIR — töökaust käsu CMD täitmiseks.
  • USER — määrab UID loodavale konteinerile, mis põhineb pildil.
  • VOLUME — mountib hosti kausta konteinerisse.
  • EXPOSE — komplekt pordidest, mida konteiner kuulab.

Kuidas UnionFS töötab?

UnionFS — teeninduslik stekkfailisüsteem (FS) Linuxi ja FreeBSD jaoks. Antud FS rakendab kirjutamise koopia mehhanismi (Copy-On-Write, COW). UnionFS-i tööüksus on kiht, iga kiht tuleb vaadata kui eraldi täielikku failisüsteemi, millel on kataloogide hierarhia alates juurest. UnionFS loob ühendatud mount'i teistele failisüsteemidele ja võimaldab kasutajale läbipaistvalt liita erinevate failisüsteemide faile ja katalooge (mida nimetatakse harudeks) ühte seotud failisüsteemi.

Sama teede sisu kataloogid kuvatakse koos ühises ühendatud kataloogis (ühes nimede ruumis) saadud failisüsteemis.

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

  • üks kiht muutub ülemiseks kihiks, teine ja järgnevad on alumised kihid;
  • kasutajale on kihtide objektid kergesti kättesaadavad 'ülemalt alla', see tähendab, et kui nõutud objekt on 'ülemises' kihis, siis see tagastatakse, olenemata objekti olemasolust 'alumises' kihis; vastasel juhul tagastatakse 'alumise' kihi objekt; kui nõutud objekti ei ole seal ega seal, tagastatakse viga 'Sellist faili või katalooge ei ole';
  • töökihiks on 'ülemine', st kõik kasutaja tegevused andmete muutmisel kajastuvad ainult ülemise kihi peal, mõjutamata alumiste tasemete sisu.

Docker on kõige levinum konteineritehnoloogia rakenduste töötamisel. See on saanud standardiks selles valdkonnas, põhinedes cgroups'il ja nimede ruumidel, mida tagab Linuxi kernel.

Docker võimaldab meil kiiresti rakendusi kasutusele võtta ja maksimaalselt optimeerida failisüsteemi, jagades OS-i kerneli kõikide konteinerite vahel, töötades nagu eraldi OS-protsessid.

Allikas: habr.com

Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid 🔥 Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid - ProHoster