Konténer, Docker, Bare-metal és VM

A konténerek és a virtuális gépek (VM-ek) a számítási erőforrás csomagolások két módja, amelyek különféle IT-összetevőket kombinálnak, és különitenek el a rendszer más részeitől. A fő különbség a kettő között az, hogy mely összetevők vannak elkülönítve, ami viszont jelentősen befolyásolja az egyes megoldások méretét és hordozhatóságát.

Mik a Konténerek?

A konténer olyan szoftveregység, amely az alkalmazás futtatásához szükséges összes összetevőt és funkciót tartalmazza (docker engine, docker image, stb..). A legtöbb modern alkalmazás több konténerből áll, amelyek mindegyike meghatározott funkciót lát el. A konténereket általában megabájtban mérik, nem használnak hypervisort, és általában gyorsabb, agilisabb a folyamatleválasztás kezelésében.

A konténerek sikeréhez hozzájáruló egyik jelentős tényező a hordozhatóság. A LEGO elemekhez hasonlóan az egyes konténerek is könnyen cserélhetők és mozgathatók különböző környezetekben. Miután egy alkalmazást és függőségeit egy konténerbe csomagolták, az bárhol telepíthető – a fejlesztői laptopon, az adatközpontban, a felhőben vagy az edge-ben – azzal az elvárással, hogy pontosan ugyanúgy fog működni.

Mi a Docker?

A Docker, egy nyílt forráskódú platform konténeres alkalmazások építésére, telepítésére, kezelésére. és jelentős szerepe van a konténertechnológia fejlődésében.

A Docker egy szolgáltatásként beállított platform, egy Platform-as-a-Service (PaaS) termék, amely csomagok formájában szállít szoftvereket, amelyeket konténereknek neveznek. A Docker OS-szintű virtualizációs szabványokat használ, ahol a kernel lehetővé teszi az felhasználói területek elszigetelését, például konténereket, partíciókat, zónákat, virtuális kerneleket stb.

Valódi számítógépként viselkednek, szimulálva a bennük lévő programok futtatását. Egy átlagos operációs rendszeren láthatóak a számítógépes program által futtatott erőforrások. A konténerekben csak akkor láthatóak a tartalmak és a konténerhez hozzárendelt eszközök, amikor a benne lévő programok futnak.

Az iparág fejlesztői számára a Docker a konténeres alkalmazások fejlesztésének és megosztásának elfogadott szabványa desktopon és a felhőben. A konténer egy szabványos szoftveregység. A fejlesztők arra használják, hogy elszigeteljék az alkalmazást a környezetétől. A kis terjedelme miatt több docker konténer (jellemzően több mint nyolc konténer állomásonként) futtatható egy kiszolgálón vagy virtuális gépen egyidejűleg.

Mi a VM?

A virtuális gépek (VM) döntő szerepet játszanak a cloud computing rendszerben, emulálják a fizikai számítógépeket azáltal, hogy az operációs rendszereket izolált környezetben futtatják. Több VM is tárolható egyetlen szerveren. A hypervisor szoftver a fizikai host szerver és a VM-ek közötti rétegként működik. Ez a hypervisor kezeli az erőforrásokhoz való hozzáférést, lehetővé téve a VM-ek számára, hogy különálló szerverként működjenek, miközben fokozott rugalmasságot és agilitást kínál.

A VM-ek számos cloud computing alapjául is szolgálnak, támogatva az erőforrások virtualizációját, a multi-tenancy modellt és az izolációt (ugyanazon az erőforráson több megosztott rendszer futtatható).

A VM-ek saját operációs rendszert futtatnak, amely lehetővé teszi, hogy egyszerre több erőforrás igényes funkciót hajtsanak végre egymástól izolálva. A VM-ek erőforrásai lehetővé teszik a szerverek, operációs rendszerek, asztali számítógépek, adatbázisok és hálózatok felosztását, megkettőzését illetve emulálását.

Cloud Native vs Tradicionális IT

A felhő alapú natív alkalmazások olyan mikroszolgáltatások gyűjteményei, amelyeket arra terveztek, hogy konzisztens fejlesztési és automatizált kezelési élményt nyújtsanak nyilvános, privát, hibrid és többfelhős környezetben. A hagyományos vagy monolit struktúrák egységben kezelik a munkameneteket és szétválaszthatatlan egységet képeznek.

Új informatikai gyakorlatok

Ezek a felhőalapú, cloud-native, CI/CD és DevOps fejlesztések. Alapjai a munkaelemek lehető legkisebb egységekre való felosztása (egy funkció vagy mikroservice) és elszigetelt futtatása, amiket egymástól függetlenül fejlesztenek, telepítenek, kezelnek és méreteznek. Ezután konténerekbe csomagolják, ami lehetővé teszi mások számára, hogy az alkalmazásokon vagy szolgáltatásokon úgy dolgozhassanak, hogy ne ütközzenek a más tárolókba csomagolt kódokkal.

Hagyományos informatikai architektúrák

A monolit vagy hagyományos rendszerek a munkafolyamat minden részét szorosan összekapcsolják, és nem képesek átfogó rendszer nélkül működni. A mukafolyamatok teljes egységként vannak csomagolva egy nagyobb környezetben, a VM-en belül. Amennyiben egy teljes alkalmazást virtuális gépen belül építenek fel és futtattak, az összes kód és dependency egy helyen való elhelyezése túlméretezett VM-hez vezethet, ami lépcsőzetes meghibásodásokat és leállásokat okozthat, főleg frissitések során.

Virtualizáció

A hypervisor szoftver elválasztja az erőforrásokat a fizikai hardvertől, így azok particionálhatók és virtuális gépek (VM) számára dedikálhatók. Amikor egy felhasználó olyan utasítást ad, amely további erőforrásokat igényel a fizikai hardvertől, a hypervisor továbbítja a kérést a fizikai rendszernek, és tárazza a változtatásokat. A VM-ek úgy néznek ki és működnek, mint a fizikai szerverek.

Konténerizáció

A konténerben minden egy konténer image segítségével van csomagolva és szállítva. Ez egy olyan fájl, amely tartalmazza az összes könyvtárat és a dependency-ket. A konténer image fájljai hasonlóak a szoftvertelepítő csomagokhoz (például az RPM-ekhez Linuxban), de csak egy kompatibilis kernelre és konténer futtatókörnyezetre van szüksége az alkalmazás futtatásához, függetlenül attól, hogy melyik operációs rendszert használták a konténer létrehozásához, és hogy hol vannak a könyvtárak. Mivel a konténerek kicsik, általában több száz is lehet belőlük lazán összekapcsolva. Ezért konténer orchestration platformokat (mint például a Red Hat OpenShift és a Kubernetes) használnak ezek managelésére.

Ez attól függ mire van szükség. Ha könnyen mozgatható kis méretű architektúrára akkor a  konténer a jobb megoldás. Ha  egyedi IT-erőforrások félig állandó kiosztására van szüksége akkor VM a megfelelőbb. További figyelembe veendő tényezők az alkalmazás architektúrája, a fejlesztési gyakorlatok, a biztonsági és szabályozási követelmények.

1.ábra VM vs Konténer

Konténer vagy VM a megfelelőbb megoldás?

A konténerek kicsi, könnyű és rugalmas jellege lehetővé teszi, hogy könnyen telepíthetőséget bare-metal szervereken, illetve publikus, magán, hibrid és többfelhős környezetben. Nagyon gyakori a konténerek virtuális gépeken történő futtatása is. A konténerek ideális környezetet biztositanak a felhőalapú natív alkalmazások üzembe helyezéséhez is, amelyek olyan mikroszolgáltatások gyűjteményei.

A konténerek a következőkre alkalmasabbak :

  • Felhőalapú natív alkalmazások készítése
  • Csomagolt mikroszolgáltatások
  • Alkalmazások DevOps vagy CI/CD gyakorlatokba beépítése
  • Skálázható IT-projektek mozgatása sokrétű IT-területeken

A VM-ek inkább a következőkre alkalmasabbak:

  • Hagyományos monolitikus folyamatok virtualizálása
  • A kockázatosabb funkciók virtuális elkülönítése
  • Infrastrukturális erőforrások támogatása (hálózatok, szerverek, adatok)
  • Egy operációs rendszer egy másik operációs rendszeren belüli futtatására (Unix futtatása Linuxon)