VM vagy Docker?

Honnan tudhatja, hogy Dockerre van szüksége, és nem virtuális gépre? Meg kell határoznia, hogy pontosan mit szeretne elkülöníteni. Ha el szeretne különíteni egy rendszert garantáltan dedikált erőforrásokkal és virtuális hardverrel, akkor a virtuális gépet kell választania. Ha a futó alkalmazásokat külön rendszerfolyamatként kell elkülönítenie, akkor a Dockerre lesz szüksége.

Tehát mi a különbség a Docker-tárolók és a virtuális gépek között?

Virtuális gép (VM) egy virtuális számítógép az összes virtuális eszközzel és egy virtuális merevlemezzel, amelyre új független operációs rendszer van telepítve, virtuális eszközillesztőkkel, memóriakezeléssel és egyéb összetevőkkel. Vagyis a fizikai hardver egy absztrakcióját kapjuk, amely lehetővé teszi, hogy sok virtuális számítógépet fusson egy számítógépen.
A telepített virtuális gép különböző módokon foglalhat helyet a számítógép lemezén:

  • rögzített merevlemez-terület, amely gyorsabb hozzáférést tesz lehetővé a virtuális merevlemezhez, és elkerüli a fájlok töredezettségét;
  • dinamikus memóriafoglalás. További alkalmazások telepítésekor a rendszer dinamikusan lefoglalja a memóriát, amíg el nem éri a számára lefoglalt maximális mennyiséget.

Minél több virtuális gép van kiszolgálónként, annál több helyet foglalnak el, és állandó támogatást igényelnek az alkalmazás futtatásához szükséges környezethez.

Dokkmunkás konténer alapú alkalmazások létrehozására szolgáló szoftver. A tárolók és a virtuális gépek hasonló előnyökkel rendelkeznek, de eltérően működnek. A konténerek kevesebb helyet foglalnak, mert... A gazdarendszer több megosztott erőforrását használja fel újra, mint a virtuális gépet, mert a VM-mel ellentétben az operációs rendszer szintjén biztosítja a virtualizációt, nem a hardver szintjén. Ez a megközelítés kisebb memóriaigényt, gyorsabb üzembe helyezést és könnyebb skálázást eredményez.

A tároló hatékonyabb mechanizmust biztosít az alkalmazások beágyazásához azáltal, hogy biztosítja a szükséges interfészeket a gazdagéphez. Ez a funkció lehetővé teszi a tárolók számára, hogy megosszák a rendszer magját, és minden tároló különálló gazdagép-OS folyamatként fut, amely saját memóriaterület-készlettel (saját virtuális címterével) rendelkezik. Mivel minden tároló virtuális címtere saját, a különböző memóriaterületekhez tartozó adatok nem módosíthatók.
A Docker natív operációs rendszere a Linux (a Docker Windowson és MacOS-en is használható), kihasználja fő előnyeit, amelyek lehetővé teszik a kernel szétválasztásának megszervezését. A Docker-tárolók Windows rendszeren való futtatása egy Linux operációs rendszert futtató virtuális gépen belül történik, mert A konténerek megosztják a gazdagép operációs rendszerét, és a fő operációs rendszer számukra a Linux.

Konténer – hogyan működik?

Konténer egy alkalmazásszintű absztrakció, amely kódot és függőségeket kombinál. A tárolók mindig képekből készülnek, írható felső réteg hozzáadásával és különféle paraméterek inicializálásával. Mivel egy tárolónak saját írási rétege van, és minden módosítás ebben a rétegben van tárolva, több tároló is megoszthatja a hozzáférést ugyanahhoz a főképhez.

Minden tároló egy fájlon keresztül konfigurálható a fő megoldásban található docker-compose projektben - docker-compose.yml. Itt különféle paramétereket állíthat be, például tároló nevét, portokat, azonosítókat, erőforráskorlátokat, más tárolók közötti függőséget. Ha nem ad meg tárolónevet a beállításokban, a Docker minden alkalommal új tárolót hoz létre, és véletlenszerűen ad neki nevet.

Amikor egy tárolót képből indítanak el, a Docker egy olvasási-írási fájlrendszert csatol az alatta lévő rétegek tetejére. Itt fog futni az összes folyamat, amelyet a Docker-tárolónknak futtatni szeretnénk.

Amikor a Docker először indít egy tárolót, a kezdeti olvasási-írási réteg üres. Amikor változások történnek, a rendszer erre a rétegre alkalmazza őket; Például, ha módosítani szeretne egy fájlt, akkor a fájl az alábbi csak olvasható rétegből az írás-olvasható rétegbe kerül átmásolásra.
A fájl írásvédett változata továbbra is létezik, de most el van rejtve a másolat alatt. A kötetek az adatok tárolására szolgálnak, függetlenül a tároló életciklusától. A kötetek inicializálása a tároló létrehozásakor történik.

Hogyan kapcsolódik a kép a tárolóhoz?

kép — az egyes tartályok fő eleme. A kép a projekthez hozzáadott Docker-fájlból jön létre, és egymásra rétegzett és csoportosított fájlrendszerek (rétegek) halmaza, csak olvasható; a rétegek maximális száma 127.

Minden kép középpontjában egy alapkép található, amelyet a FROM parancs határoz meg – ez a belépési pont a Dockerfile képfájl felépítésénél. Minden réteg írásvédett, és egyetlen, a fájlrendszert módosító, Docker-fájlba írt parancs képviseli.
Ezen rétegek egyetlen képpé egyesítéséhez a Docker az Advanced multi layered Union fájlrendszert használja (az AuFS az UnionFS tetejére épül), lehetővé téve a különböző fájlrétegekből származó fájlok és könyvtárak átlátható átfedését, így összefüggő fájlrendszert hoz létre.

A rétegek metaadatokat tartalmaznak, amelyek lehetővé teszik az egyes rétegekről kapcsolódó információk tárolását futási és felépítési idő alatt. Minden réteg tartalmaz egy hivatkozást a következő rétegre; ha egy réteghez nincs hivatkozás, akkor ez a kép legfelső rétege.

A Dockerfile olyan parancsokat tartalmazhat, mint például:

  • FROM — belépési pont kép létrehozásakor;
  • MINTAINER - a kép tulajdonosának neve;
  • RUN – parancs végrehajtása a kép összeállítása során;
  • HOZZÁADÁS - a gazdagép fájl másolása egy új képre; ha megadja a fájl URL-jét, a Docker letölti a megadott könyvtárba;
  • ENV - környezeti változók;
  • CMD - elindítja egy új tároló létrehozását a kép alapján;
  • ENTRYPOINT – a parancs végrehajtásra kerül, amikor a tároló elindul.
  • A WORKDIR a CMD parancs végrehajtásának munkakönyvtára.
  • FELHASZNÁLÓ – beállítja a kép alapján létrehozott tároló UID-jét.
  • VOLUME - beilleszti a gazdagép könyvtárat a tárolóba.
  • Az EXPOSE a tárolóban hallgatott portok halmaza.

Hogyan működik az UnionFS?

UnionFS — segédprogram verem fájlrendszer (FS) Linux és FreeBSD számára. Ez az FS egy másolás-írási mechanizmust valósít meg (Copy-On-Write, COW). Az UnionFS munkaegysége egy réteg; minden réteget különálló, teljes értékű fájlrendszernek kell tekinteni, magától a gyökértől származó könyvtárak hierarchiájával. Az UnionFS union mount-ot hoz létre más fájlrendszerekhez, és lehetővé teszi a különböző fájlrendszerekből (az úgynevezett fork-ból) származó fájlok és könyvtárak egyetlen koherens fájlrendszerbe történő kombinálását a felhasználó számára átlátható módon.

Az azonos útvonalú könyvtárak tartalma együtt jelenik meg az eredményül kapott fájlrendszer egyetlen egyesített könyvtárában (egy névtérben).

Az UnionFS a következő elvek alapján egyesíti a rétegeket:

  • az egyik réteg a legfelső szintű réteg, a második és az azt követő rétegek az alsó szintű rétegekké;
  • rétegobjektumok „fentről lefelé” érhetők el a felhasználó számára, azaz. ha a kért objektum a „felső” rétegben van, akkor visszaküldi, függetlenül attól, hogy az „alsó” rétegben van-e azonos nevű objektum; ellenkező esetben az „alsó” réteg objektuma kerül visszaadásra; ha a kért objektum se ott, se ott nincs, akkor a „Nincs ilyen fájl vagy könyvtár” hibaüzenet jelenik meg;
  • a munkaréteg a „felső”, vagyis minden felhasználói adatmódosítási művelet csak a legfelső szintű rétegen jelenik meg, anélkül, hogy az alsóbb szintek rétegeinek tartalmát befolyásolná.

A Docker a legelterjedtebb technológia a konténerek alkalmazás futtatására. A Linux kernel által biztosított cgroupokra és névterekre építve szabvány lett a területen.

A Docker lehetővé teszi az alkalmazások gyors üzembe helyezését és a fájlrendszer legjobb kihasználását azáltal, hogy felosztja az operációs rendszer kernelt az összes konténer között, amelyek külön operációs rendszer folyamatként futnak.

Forrás: will.com

Hozzászólás