A konténer már évek óta divatos szó... de mik is azok pontosan?
A tárolók a virtuális gépekhez hasonló, virtualizált alkalmazások futtatásának módszerei a számítógépen, de az alapul szolgáló technológiák eltérő készletét használják. Lehet, hogy bonyolult megérteni őket, de elengedhetetlenek ahhoz, hogy mindenből elindulhasson Minecraft szervereket a Google-nak. És megmutatjuk, hogyan kell beállítani őket.
Linuxot fogunk használni, egy olyan operációs rendszert, amely a hordozhatóságra, a modularitásra és a stabilitásra összpontosít. A Linux a szerverektől a mikrohullámú sütőkön át a videojáték-konzolokig mindenben megtalálható. A konténerek nem korlátozódnak a Linuxon való futtatásra, de a mögöttük lévő technológiák a legalkalmasabbak a Linuxra, és azon futnak a legjobban. Ha még nem ismeri a Linuxot, javasoljuk, hogy tekintse meg a mi oldalunkat kezdő útmutató merülés előtt.
A konténerek virtuális gépek?
A konténerek összetett témák lehetnek, de a legjobb, ha egy kulcsfontosságú ponttal kezdjük: A tároló az
nem egy virtuális gép. A virtuális gép egy adott hardver és szoftver szimulált változata, amely az úgynevezett hipervizorban fut. Ha valaha használt olyan szoftvert, mint a VirtualBox vagy multipass, akkor hipervizort használt.A hypervisor általában vagy saját operációs rendszerként (1-es típusú hipervizorként ismert), vagy egy másik operációs rendszer, például a Windows vagy az Ubuntu (2-es típusú hipervizor) keretein belül fut. A hypervisor felelőssége, hogy a vendég operációs rendszert bemutassa a futtatásához szükséges szimulált hardverrel. Ezután a teljes operációs rendszer futhat a tetején. Ez magában foglal mindent, a szimulált CPU-tól és RAM-tól az adatbuszokig, lemezmeghajtókig vagy hálózati adapterekig. Ez a szimuláció számítási szempontból költséges, így a virtuális gépek általában jelentős többletköltséggel rendelkeznek.
Szóval, mi az a konténer?
A tároló hasonló a virtuális gépekhez, mivel szoftvereket tartalmaz és futtat egy gazdarendszeren lévő elszigetelt környezetben. A konténerek azonban felváltják a hagyományos hardveres virtualizációt azáltal, hogy közvetlenül a gazdagép operációs rendszerre támaszkodnak. A tárolók megosztják a gazdagép operációs rendszer könyvtárait és bináris fájljait, és csak a bennük található adott alkalmazás futtatásához szükséges erőforrásokkal és függőségekkel rendelkeznek. Ez azt jelenti, hogy nincs szükség tárolónként teljes operációs rendszerre, mivel az összes konténer fut a rendszer megoszthatja az egyetlen gazdagép operációs rendszert, miközben megtartja a virtuális elválasztást gépek.
A tárolók az acontainer engine-en keresztül érik el a gazdagép operációs rendszert, amely kezeli a futó tárolókat, és szabályozza a mögöttes operációs rendszerhez való hozzáférésüket. Ez magában foglalhatja a tárolók közötti biztonság kikényszerítését, valamint az operációs rendszer fájljaihoz vagy hálózati kapcsolatokhoz való hozzáférés engedélyezését vagy megtagadását.
Milyen kompromisszumok vannak a konténerek használatával kapcsolatban?
Bár a virtuális gépek és a tárolók hasonlóak, a konténerek használatának megvannak a maga hátrányai. Egyrészt a virtuális gépek biztonságosabbnak tekinthetők, mivel a virtuális gépek elől való „meneküléshez” szükséges támadási felület lényegesen kisebb és nehezebben áthatolható. Előfordulhat, hogy egy tároló nem alkalmas például rosszindulatú programok tesztelésére.
A konténerek használatának fő előnye, hogy könnyűek, így a teljes operációs rendszer virtualizálásának elkerülése minimális indítási időt és alacsonyabb rendszerterhelést jelent. Ez azt jelenti, hogy egy gazdagépen sokkal több konténer futhat, ami virtuális gépekkel nem lenne lehetséges.
Mivel a tárolók nem igényelnek teljes operációs rendszert, könnyen kisebb képekbe csomagolhatók és terjeszthetők. Míg a virtuális gép teljes képfájlja könnyen több tíz gigabájt is lehet, a konténerek akár 15 Kb méretű képek is lehetnek. Ez rendkívül egyszerűvé teszi a konténerek elosztását és használatát. Ezt néhány egyszerű példatároló futtatásával mutatjuk be a Dockerben.
Docker telepítése
Ez sok elmélet, úgyhogy térjünk át a gyakorlatra. A tároló beállításának bemutatása érdekében telepítjük a Dockert az Ubuntu 23.10-be, és egy egyszerű Hello World tároló futtatására használjuk. Lépéseinket virtuális gépen teszteljük, de kettős rendszerindítást is végezhet a Windows PC-ről, vagy használhat a nagyszerű laptop Linuxhoz.
A Docker gyorsan a de facto konténerező eszközzé vált. Míg más eszközök is léteznek, a Dockert széles körben alkalmazzák, és a legigényesebb alkalmazások kivételével mindenhez tökéletes. van dokumentációt a Docker telepítésének különböző módjairól, de a kényelmi telepítési szkriptet fogjuk használni. Ez a parancs letölt egy szkriptet a get.docker.com webhelyről a helyi gépre:
$ curl -fsSL https://get.docker.com -o get-docker.sh
Ezután futtathatja ezt a szkriptet a Docker telepítéséhez. Ellenőrizheti, hogy a Docker megfelelően van-e telepítve, ha ellenőrizze a verziót:
$ sudo sh ./get-docker.sh
Ezt követi a verzióellenőrzés a következővel:
$ sudo docker version
Azt is ellenőrizheti, hogy a docker szolgáltatás fut-e a háttérben:
$ sudo systemctl status docker
Az alábbi képernyőképen kiemelve, zöld szöveggel kell jeleznie az „aktív (futó)” feliratot. A Docker motor verzióját is hiba nélkül ki kell nyomtatni.
Egy egyszerű példa futtatása
Most, hogy a Docker telepítve van, használhatja egy tárolókép letöltésére. A konténerképek sokban hasonlítanak a virtuális gépek ISO-jához, kivéve, hogy általában kisebbek és könnyebben összeállíthatók. Tölts le egy egyszerű hello-world konténerképet a következő paranccsal:
$ sudo docker pull hello-world
A kép letöltése után a rendszerre letöltött képek felsorolásával ellenőrizheti a következőket:
$ sudo docker images
Most látnia kell a hello-world letöltését. Vegye figyelembe a nagyon kis méretet (13 Kb tesztgépünkön), valamint a címkéjét. A kép címkéje gyakorlatilag annak változata. Alapértelmezés szerint a Docker letölti a kép legújabb verzióját. Futtasson egy tárolót a kép alapján:
$ sudo docker run hello-world: latest
Ez kiadja a Dockers hello-world játékát, amely egy nagyon kicsi C programból fut (amit meg lehet nézni GitHub).
Gratulálunk; futtattad az első konténeredet! Ebben az esetben a program kiadta az eredményt és befejezte a végrehajtást. A tároló most már halott, és már nem fut.
Hogyan tartsuk életben a konténereket
Miután lefuttattunk egy alaptárolót, most már létrehozhatunk egy összetettebb példát, amely nem lép ki azonnal, ha egy feladatot befejezett. A konténerek gyakran egyetlen folyamat köré épülnek, ami további folyamatokat eredményezhet. Amint ez az alapfolyamat kilép, az egész tároló kilép vele. Ez korlátozásnak tűnhet, de valójában nagyon hasonlít ahhoz, ahogyan az init rendszerek a teljes Linux kernelben működnek.
Egy állandó példa futtatásához készíthetünk képet az Nginx-hez, amely egy webszerver, amely a világ webhelyeinek jelentős százalékának tárolására szolgál. Azért választottuk az Nginxet ehhez a példához, mert egyszerű, nem igényel speciális konfigurációt, és könnyű. Töltse le a legújabb Nginx képet a következő paranccsal:
$ sudo docker pull nginx
Hozzáadtuk a -o jelölje meg itt a porttovábbítás konfigurálásához a tárolóból a gazdagép operációs rendszerbe. A 80-as portot titkosítatlan HTTP (azaz webes) forgalomhoz használják. Ez lehetővé teszi a tároló elérését a gazdagépről:
$ sudo docker run -p 80:80 nginx
Ez a parancs csatolt módban fog futni a terminálon, ami azt jelenti, hogy a tároló szó szerint a terminálhoz van csatolva, így a tárolóból származó összes napló oda lesz nyomtatva. Miután a tartály elindult, nyissa ki http://localhost a böngészőjében. Az alábbihoz hasonló Nginx üdvözlőképernyőt fog látni:
Az Nginx tároló most fut a konténermotorban. Míg az Nginx csatolt módban fut, csak addig fut, amíg nyitva van. Az Nginx tárolóból a gomb megnyomásával léphet ki Ctrl + C a termináljában.
Hogyan lehet konténereket futtatni a háttérben
Az Nginx háttérben történő futtatásához hozzáadunk egy másik jelzőt, -d, leválasztott üzemmódhoz. Ezzel elindítja a terminálról leválasztott tárolót, ami azt jelenti, hogy a háttérben van. Például:
$ sudo docker run -d -p 80:80 nginx
Felsorolhatja a rendszeren futó tárolókat. Figyelje meg, hogyan fut az Nginx-tároló a háttérben, és azonosítót rendeltek hozzá.
$ sudo docker ps
Egy futó háttértárolót le lehet ölni az azonosítójával. Azt is észreveheti, hogy a tároló nevet kapott. Ha nincs megadva, a Docker minden tárolónak véletlenszerű, egyedi nevet ad.
$ sudo docker kill
Ezt azonban kipróbálhatná néhány érdekesebb képpel. Rengeteg kapható a helyszínen Docker hub, amely a nyilvános tárolóképek központi tárházaként működik.
Búvárkodás mélyebbre konténerekkel
Ez volt a konténerek rövid bemutatása. A tárolók korlátlanul összetettek lehetnek, de alapvető építőkövei azoknak a rendkívül elosztott rendszereknek, amelyek modern internetünk nagy részét üzemeltetik. Ez az erő azonban nem veszi el a kisebb léptékű használatukat. A konténerek és a Docker alapjainak ismerete átjárót jelenthet olyan hasznos helyi szolgáltatások futtatásához, mint a Minecraft szerver vagy Plex egy régi PC-n.