VM vagy Docker?

Hogyan tudhatja, hogy a Dockerre van szüksége, nem pedig VM-re? Meg kell határoznia, mit szeretne elkülöníteni. Ha garantáltan elkülönített erőforrásokkal és virtuális hardverrel rendelkező rendszert szeretne, akkor a VM a megfelelő választás. Ha viszont működő alkalmazásokat szeretne elkülöníteni a rendszer különálló folyamataiként, akkor Önnek a Dockerre lesz szüksége.

Miben különböznek a Docker-kontejnerek a VM-től?

Virtuális gép (VM) — ez egy virtuális számítógép, amely minden virtuális eszközzel és virtuális merevlemezzel rendelkezik, amelyre egy új, független operációs rendszert telepítenek virtuális eszközmeghajtókkal, memóriakezeléssel és más komponensekkel együtt. Ezáltal a fizikai hardver absztrakcióját kapjuk, amely lehetővé teszi, hogy egy számítógépen több virtuális számítógép fusson.
A telepített VM különböző módon foglalhat helyet a számítógép merevlemezén:

  • fix mennyiségű helyet a merevlemezen, amely gyorsabb hozzáférést biztosít a virtuális merevlemezhez, és megakadályozza a fájlfragmentálódást;
  • dinamikus memóriaallokációval. További alkalmazások telepítésekor a memória dinamikusan ki lesz allokálva ezekhez, amíg el nem éri a maximális kibővített mennyiséget.

Minél nagyobb virtuális gépekhez a szerveren, annál nagyobb helyet foglalnak el, és folyamatos támogatást igényelnek a működéséhez szükséges környezethez.

Docker ez egy szoftver a konténer alapú alkalmazások létrehozásához. A konténerek és virtuális gépek hasonló előnyökkel rendelkeznek, de másképp működnek. A konténerek kevesebb helyet foglalnak el, mivel több közös erőforrást használnak újra a hoszt rendszeren, mint a VM, mivel a VM-mel ellentétben az operációs rendszer szintjén biztosít virtualizációt, nem hardver szinten. Ez a megközelítés kevesebb memóriahasználatot, gyorsabb telepítést és egyszerűbb skálázhatóságot biztosít.

A konténer hatékonyabb mechanizmust biztosít az alkalmazások elkapszulázására, lehetővé téve a szükséges interfészeket a hoszt rendszer számára. Ez a lehetőség lehetővé teszi a konténerek számára, hogy megosszák a rendszer kernelét, ahol minden egyes konténer a fő operációs rendszer külön folyamataként működik, amely saját memóriaterületekkel rendelkezik (saját virtuális címterével). Mivel minden konténer virtuális címtérrel rendelkezik, 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 Dockert Windows-on és MacOS-en is lehet használni), amely a fő előnyeit hasznosítja, lehetővé téve a kernel megosztását. A Docker konténerek Windows-on Linux operációs rendszerű virtuális gépen belül fognak futni, mivel a konténerek megosztják a hoszt rendszer operációs rendszerét, és az alap operációs rendszerük a Linux.

Mi az a konténer és hogyan működik?

Konténer — ez egy alkalmazási szintű absztrakció, amely egyesíti a kódot és a függőségeket. A konténerek mindig képekből készülnek, hozzáadva egy írásra elérhető felső réteget, és inicializálva a különböző paramétereket. Mivel a konténer saját írási rétegével rendelkezik, és minden módosítás ebben a rétegben kerül tárolásra, több konténer is együtt használhatja ugyanazon alap képhez való hozzáférést.

Minden konténert a docker-compose projektfájl segítségével lehet konfigurálni, amely a fő megoldás része — docker-compose.yml. Itt különféle paramétereket lehet beállítani, például a konténer nevét, portokat, azonosítókat, erőforrás-korlátokat és más konténerekkel való függőségeket. Ha a beállításokban nem adunk meg konténernevet, a Docker minden alkalommal új konténert fog létrehozni, véletlenszerű nevet rendel a konténerhez.

Amikor a konténer egy képből elindul, a Docker a fájlrendszert olvasási-írási módban csatlakoztatja az alatta lévő bármely réteghez. Itt fognak végrehajtódni azok a folyamatok, amelyeket szeretnénk, hogy a Docker konténereink végrehajtsanak.

Amikor a Docker először indít egy konténert, a kezdeti olvasási-írási réteg üres. Amikor módosítások történnek, azok ebbe a rétegbe kerülnek; például, ha meg szeretné változtatni egy fájlt, az a fájl a csak olvasási rétegről a olvasási-írási rétegbe lesz másolva.
A fájl csak olvasható verziója továbbra is létezni fog, de most már egy másolat mögött rejtve van. Az adatok tárolására, a konténer életciklusától függetlenül, kötetek használatosak. A köteteket a konténer létrehozásakor inicializálják.

Hogyan kapcsolódik a kép a konténerhez?

Kép — a legfontosabb elem minden konténer számára. A kép a projektbe hozzáadott Dockerfile-ból készül, és egy egymásra halmozott, és együtt csoportosított, csak olvasható fájlrendszerek (rétegek) halmaza; a maximális számú réteg 127.

Minden kép alapja egy alap kép, amelyet a FROM parancs határoz meg — a Dockerfile képének létrehozási pontja. Minden réteg egy readonly réteg, amelyet egy parancs képvisel, amely módosítja a Dockerfile-ban rögzített fájlrendszert.
Ezeknek a rétegeknek egy képpé való egyesítéséhez a Docker az Advanced multi layered Union file system-t használja (Az AuFS a UnionFS alapjain épül), lehetővé téve, hogy különböző fájlok és könyvtárak különböző fájlrétegekből átláthatóan fektessenek egymásra, létrehozva egy kapcsolt fájlrendszert.

A rétegek metainformációkat tartalmaznak, amelyek lehetővé teszik, hogy minden régréteghez tartozó kísérő információt megőrizzünk a végrehajtás és a build során. Minden réteg egy hivatkozást tartalmaz a következő rétegre; ha egy réteg nem hivatkozik másikra, akkor ez a legfelső réteg a képben.

A Dockerfile tartalmazhat olyan parancsokat, mint:

  • FROM — a kép létrehozási pontja;
  • MAINTAINER — a kép tulajdonosának neve;
  • RUN — a parancs végrehajtása a kép buildje során;
  • ADD — fájl másolása a gazdagépről az új képbe; ha URL-t adunk meg, a Docker letölti azt a megadott könyvtárba;
  • ENV — környezeti változók;
  • CMD — új konténer létrehozása a kép alapján;
  • ENTRYPOINT — parancs, amely a konténer indításakor hajtódik végre.
  • WORKDIR — a parancs CMD végrehajtásához szükséges munkakönyvtár.
  • USER — az UID beállítása a kép alapján létrehozott konténer számára.
  • VOLUME — könyvtár beszerelése a gazdagépről a konténerbe.
  • EXPOSE — a konténerben figyelő portok készlete.

Hogyan működik a UnionFS?

UnionFS — szolgáltatási réteges fájlrendszer (FS) Linux és FreeBSD számára. Ez a fájlrendszer a másolás írási mechanizmusát (Copy-On-Write, COW) valósítja meg. A UnionFS munkai egysége egy réteg, amelyet úgy kell tekinteni, mint különálló, teljes értékű fájlrendszert, hierarchikus könyvtárstruktúrával a gyökértől kezdve. A UnionFS egyesített csatolást hoz létre más fájlrendszerek számára, és lehetővé teszi a felhasználó számára, hogy különböző fájlrendszerek fájljait és könyvtárait (ágaknak nevezett) átláthatóan egy összekapcsolt fájlrendszerben egyesítse.

Az azonos útvonalú könyvtárak tartalma egy helyen fog megjelenni, egyesített könyvtárban (az egyesített névtérben) a kapott fájlrendszeren belül.

A UnionFS a következő elveket követve egyesíti a rétegeket:

  • az egyik réteg a legfelső szintű réteg lesz, a második és a továbbiak alsó szintű rétegek;
  • a felhasználó számára a rétegek objektumai "felülről lefelé" érhetők el, azaz ha a kért objektum a "felső" rétegben létezik, az visszaadódik, függetlenül attól, hogy van-e ugyanilyen nevű objektum az "alsó" rétegben; különben az "alsó" réteg objektuma kerül visszaadásra; ha a kért objektum egyik helyen sem létezik, akkor "Nincs ilyen fájl vagy könyvtár" hibaüzenet kerül visszaadásra;
  • a munkaréteg a "felső" réteg, tehát a felhasználó adatmódosítási műveletei csak a legfelső szintű rétegen tükröződnek, anélkül, hogy hatással lennének az alsó szintű rétegek tartalmára.

A Docker a legelterjedtebb konténertechnológia az alkalmazások működésében. Ez a terület standardjává vált, amely a cgroups és a névtér alapelvein alapul, amelyeket a Linux magja biztosít.

A Docker lehetővé teszi számunkra, hogy gyorsan telepítsük az alkalmazásokat és optimálisan kihasználjuk a fájlrendszert a rendszerkern és az összes konténer közötti megosztás révén, működve, mint a rendszer különálló folyamatai.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster