A mai nappal útjára indul a Docker gyorstalpaló sorozatom, mely keretében a konténerizációval és az abban rejlő lehetőségekkel szeretném megismertetni az olvasóimat. Elsősorban fejlesztői szempontú írások lesznek, de úgy gondolom az üzemeltetésben dolgozók is számos hasznos információval gazdagodhatnak a cikksorozat olvasásával.

Konténerizáció nem virtualizáció

Mindjárt az elején érdemes tisztázni, hogy a Docker és úgy általában a konténerizációs technológia mi nem. A Docker ugyanis nem virtualizációs megoldás. Egy konténerbe csomagolt alkalmazás nem fog futni különböző processzorokon. Tehát, ha az alkalmazásodat tartalmazó konténer amd64 processzor családon képes futni, akkor az nem fog elindulni más típusú processzoron. Ezzel főleg akkor fogsz találkozni, ha a legújabb MacBook-on fejlesztesz, abban ugyanis arm64v8 processzor családba tartozó processzor van. Természetesen van már több megoldás is erre a problémára. Egy ilyen megoldással érkezik a Docker Desktop is, tehát fejlesztőként “nem kell” foglalkoznunk ezzel a kérdéssel, de azért jó tisztába lenni vele, amikor hibát keresünk.

Számos egyéb problémába is beleütközhetünk még, hisz a CPU mellett lehet a GPU-t is szeretnénk használni, vagy MongoDB-t futtatnánk egy AVX-et nem támogató processzoron.

Ha túltettük magunkat a processzor függőségen, jöjjön egy újabb megkötés. A konténer a futtató környezet operációs rendszerének kernelét használja. Azért kellett ilyen körülményesen fogalmaznom, mert régen elég volt annyit mondani, hogy “csak Linuxon futtathatsz konténert”, de ma már lehetőség van arra is, hogy Windows-os konténereket készítsünk. Arról nem is beszélve, hogy 2014 óta már a negyedik főverzió jelenik meg a Linux kernelből, a sok-sok alverzióról nem is beszélve. Ne csodálkozzunk azon, hogy a centos:6 imagebe csomagolt bash nem fog futni egy mai Linux kernelen. Az alábbi képen láthatjuk, ahogy lekérdezem a kernel kiadási információit konténeren kívül és konténeren belül. Ahogy látszik az uname parancs verziója eltér, de a kernelre mindkettő ugyanazt a választ adja.

Kernel verzió konténeren belül és kívül

Szóval, ha Mac-en vagy Windwos-on szeretnéd futtatni a Linuxos konténereket, akkor kell hozzá egy futó linux kernel. Erre van természetesen megoldás - ma már több is - de mindegyiknél a virtualizáció miatt kell egy pici teljesítmény csökkenéssel számolni. Amennyiben fájlokat is szeretnél megosztani, úgy 2-3 szoros teljesítménycsökkenéstől akár a százszor lassabb programig is el lehet jutni. A lassulás mértéke nagyban függ az alkalmazás fájlrendszer használatától és az adott környezet beállításaitól. Alapesetben nem fogod érezni a lassulást, de lesznek esetek, amikor a mélyére kell majd ásnod a dolgoknak.

A konténerizáció

A konténerizáció abból a szempontból hasonlít a virtualizációhoz, hogy a futtatott alkalmazás az általunk beállított fájlrendszert, processzort és erőforrásokat látja. Ezért is szokták a konténerizációt úgy hívni, hogy operációs rendszer szintű (OS-based) virtualizáció. Ilyen volt az 1979-ben megjelent chroot program is, amely csak a fájlrendszer virtualizálását tette lehetővé és ilyen volt a 2008-ban megjelent LXC, mely a cgroups és namespace lehetőségekkel tette lehetővé a konténerek létrehozását, mely konténereknél már a fájlrendszeren túl a processzort, a memóriát, a hálózati kártyákat és minden, a számítógépen elérhető erőforrás elérését is szabályozni lehetett. A 2014-ben megjelent Docker kezdetben “csak” egy tool volt, aminek a segítségével könnyedén lehetett LXC konténereket építeni és futtatni. A “csak” azért van aposztrófok között, mert a Docker pont a felhasználó barátságával olyan áttörést tudott elérni a területen, ami alapvetően változtatta meg az üzemeltetést és fejlesztést. A megjelenése óta számos projekt és egy egész új iparág nőtt ki a hatására.

Ma már elképzelhetetlen, hogy egy fejlesztő ne legyen tisztába a konténerizáció alapjaival. Amennyiben szeretnél fejlődni keress meg nyugodtan. Csoportos és személyes Docker oktatással és tanácsadással tudlak téged vagy csapatodat, cégedet támogatni.

A Docker gyorstalpaló cikksorozat részei

  1. Bevezetés - Docker gyorstalpaló
  2. Telepítés - Docker gyorstalpaló
  3. CLI avagy a parancssori értelmező - Docker gyorstalpaló
  4. Konténer futtatása - Docker gyorstalpaló
  5. Compose - Docker gyorstalpaló
  6. Stack futtatása - Docker gyorstalpaló
  7. Image készítése, Dockerfile - Docker gyorstalpaló

Borító Brigitte Werner képe a Pixabay-en.