Next revision | Previous revision |
tanszek:oktatas:informatikai_rendszerek_epitese:docker_ismerteto [2025/03/26 13:12] – created kissa | tanszek:oktatas:informatikai_rendszerek_epitese:docker_ismerteto [2025/03/26 13:39] (current) – [Feladatok] kissa |
---|
A felhő alapú számítástechnika lehetővé teszi a vállalatok számára, hogy minimalizálják az IT-infrastruktúra felépítésének kezdeti költségeit, valamint alkalmazásaikat gyorsabban üzembe helyezzék, jobb kezelhetőség és kevesebb karbantartás mellett. | A felhő alapú számítástechnika lehetővé teszi a vállalatok számára, hogy minimalizálják az IT-infrastruktúra felépítésének kezdeti költségeit, valamint alkalmazásaikat gyorsabban üzembe helyezzék, jobb kezelhetőség és kevesebb karbantartás mellett. |
| |
Lehetővé teszi továbbá, hogy a szolgáltatók gyorsan adaptálják saját erőforrásaikat az ingadozó, vagy csak időszakosan kiugró igényekhez (pl. Black Friday egy webshopnál, sorozat premier egy streaming szolgáltatónál). Ezt „cloud bursting”-nek is nevezzük. | Lehetővé teszi továbbá, hogy a szolgáltatók valamely publikus felhőszolgáltatás felhasználásával gyorsan adaptálják saját erőforrásaikat az ingadozó, vagy csak időszakosan kiugró igényekhez (pl. Black Friday egy webshopnál, sorozat premier egy streaming szolgáltatónál). Ezt „cloud bursting”-nek is nevezzük. |
| |
===== Konténerek ===== | ===== Konténerek ===== |
| |
A natív felhő alapú számítástechnika (Cloud Native Computing) egy olyan modern szoftverfejlesztési megközelítés, amely a felhőt használja fel jól skálázható alkalmazások létrehozására és futtatására, dinamikus üzemeltetési környezetekben. Ennek a megközelítésnek gyakori elemei az olyan technológiák, mint a konténerek, mikroszolgáltatások, „serverless” függvények és a deklaratív kódon keresztül telepített infrastruktúra (**Infrastructure as Code**). | A natív felhő alapú számítástechnika (Cloud Native Computing) egy olyan modern szoftverfejlesztési megközelítés, amely a felhőt használja fel jól skálázható alkalmazások létrehozására és futtatására, dinamikus üzemeltetési környezetekben. Ennek a megközelítésnek gyakori elemei az olyan technológiák, mint a konténerek, mikroszolgáltatások, „serverless” függvények és a deklaratív kódon keresztül telepített infrastruktúra (Infrastructure as Code). |
| |
A natív felhő alapú alkalmazások gyakran Docker-tárolókban futó konténerek által nyújtott mikroszolgáltatásokból épülnek fel, amelyeket Kubernetes-ben irányítanak, és CI/CD, valamint DevOps munkafolyamatok segítségével telepítenek és üzemeltetnek. | A natív felhő alapú alkalmazások gyakran Docker-tárolókban futó konténerek által nyújtott mikroszolgáltatásokból épülnek fel, amelyeket Kubernetes-ben irányítanak, és CI/CD, valamint DevOps munkafolyamatok segítségével telepítenek és üzemeltetnek. |
A konténer technológia, mint OS-szintű virtualizáció jelen van, és egyre inkább teret nyer a modern szoftverek üzemeltetésében. A számítási felhő platformok következő generációja nem a hardverek, hanem az alkalmazások virtualizációján alapul. | A konténer technológia, mint OS-szintű virtualizáció jelen van, és egyre inkább teret nyer a modern szoftverek üzemeltetésében. A számítási felhő platformok következő generációja nem a hardverek, hanem az alkalmazások virtualizációján alapul. |
| |
{{:tanszek:oktatas:informatikai_rendszerek_epitese:pasted:20250326-125311.png}} | {{ tanszek:oktatas:informatikai_rendszerek_epitese:pasted:20250326-132224.png }} |
| |
A klasszikus virtuális gépek általában úgy működnek, hogy egy hypervisor felügyel több virtuális gépet (VM), melyek egyenként külön operációs rendszert futtatnak. A konténerek esetében minden alkalmazás ugyanazon az operációs rendszeren fut, viszont konténerenként külön-külön, elszeparált környezetekben. A konténerek között tehát processz szintű izoláció valósul meg, melyet a hoszt gép kernele biztosít. | A klasszikus, [[https://en.wikipedia.org/wiki/Hypervisor||hypervisor]] alapú virtuális gépek úgy működnek, hogy a hypervisor több virtuális gépet (VM) felügyel, melyek egyenként külön operációs rendszert futtatnak. A konténerek esetében minden alkalmazás ugyanazon az operációs rendszeren fut, viszont konténerenként külön-külön, elszeparált környezetekben. A konténerek között tehát processz szintű izoláció valósul meg, melyet a hoszt gép kernele biztosít. |
| |
Mivel egy-egy alkalmazás elindításakor nem kell a kernel elindulására várni, a rendszerindítási folyamat sokkal gyorsabb, mint a hagyományos VM-ek esetében. Emellett az erőforrás kihasználás jelentősen jobb (közel natív teljesítmény elérésére van lehetőség), mint a virtuális gépeknél. | Mivel egy-egy alkalmazás elindításakor nem kell a kernel elindulására várni, a rendszerindítási folyamat sokkal gyorsabb, mint a hagyományos VM-ek esetében. Emellett az erőforrás kihasználás jelentősen jobb (közel natív teljesítmény elérésére van lehetőség), mint a virtuális gépeknél. |
A konténerek emellett kisebb tár- és memóriaigénnyel rendelkeznek, mint a VM-ek, emiatt könnyebben lehet őket alkalmazni multi-cloud környezetben, ahol a szolgáltatás egyszerre több felhőben (pl. céges privátfelhő, Google Cloud Platform, Microsoft Azure, Amazon Web Services) van üzemeltetve. Jól alkalmazhatók továbbá cloud bursting során, amikor a megnövekvő igények miatt a saját infrastruktúra mellett igénybe kell venni egy publikus felhőszolgáltatást is az üzemeltetett alkalmazás számára. | A konténerek emellett kisebb tár- és memóriaigénnyel rendelkeznek, mint a VM-ek, emiatt könnyebben lehet őket alkalmazni multi-cloud környezetben, ahol a szolgáltatás egyszerre több felhőben (pl. céges privátfelhő, Google Cloud Platform, Microsoft Azure, Amazon Web Services) van üzemeltetve. Jól alkalmazhatók továbbá cloud bursting során, amikor a megnövekvő igények miatt a saját infrastruktúra mellett igénybe kell venni egy publikus felhőszolgáltatást is az üzemeltetett alkalmazás számára. |
| |
A konténerek számos előnnyel rendelkeznek, de architektúrájukból adódóan sebezhetőbb megoldásnak számítanak, mint a klasszikus virtuális gépek, ugyanis minden konténer egyetlen kernelen fut, és csupán ennek a kernelnek a hibáiból adódóan (Single Point of Failure) előfordulhat nem kívánt adatszivárgás a konténerek között. | A konténerek számos előnnyel rendelkeznek, de architektúrájukból adódóan sebezhetőbb megoldásnak számítanak, mint a klasszikus virtuális gépek, ugyanis minden konténer egyetlen kernelen fut, és csupán ennek a kernelnek (vagy a konténer motornak) a hibáiból adódóan ([[https://en.wikipedia.org/wiki/Single_point_of_failure|Single Point of Failure]]) előfordulhat nem kívánt adatszivárgás a konténerek között. |
| |
===== Docker ===== | ===== Docker ===== |
==== Architektúra ==== | ==== Architektúra ==== |
| |
{{:tanszek:oktatas:informatikai_rendszerek_epitese:pasted:20250326-125339.png}} | {{ tanszek:oktatas:informatikai_rendszerek_epitese:pasted:20250326-132236.png }} |
| |
A Docker architektúrális felépítését, valamint legfontosabb parancsait a fenti ábra mutatja be. | A Docker architektúrális felépítését, valamint legfontosabb parancsait a fenti ábra mutatja be. |
A képfájl a konténer statikus váza, egy recept arra vonatkozóan, hogy hogyan tudjuk a konténert létrehozni és elindítani. | A képfájl a konténer statikus váza, egy recept arra vonatkozóan, hogy hogyan tudjuk a konténert létrehozni és elindítani. |
| |
{{:tanszek:oktatas:informatikai_rendszerek_epitese:pasted:20250326-130055.png}} | {{ tanszek:oktatas:informatikai_rendszerek_epitese:pasted:20250326-132253.png }} |
| |
Egy képfájlból több konténer is létrehozható, például abban az esetben lehet erre szükség, ha alkalmazásunk válaszidejét csökkenteni szeretnénk, például az alábbi módok valamelyikén: | Egy képfájlból több konténer is létrehozható, például abban az esetben lehet erre szükség, ha alkalmazásunk válaszidejét csökkenteni szeretnénk, például az alábbi módok valamelyikén: |
Ennek a problémának a megoldása miatt van lehetőségünk ún. **perzisztens tárolók** (volume-ok) létrehozására. A perzisztens tárolók nem a konténer virtualizált – és kívülről közvetlenül elérhetetlen - fájlrendszerén, hanem közvetlenül a hoszt gépen kerülnek tárolásra, ahogy az az alábbi ábrán is látható. | Ennek a problémának a megoldása miatt van lehetőségünk ún. **perzisztens tárolók** (volume-ok) létrehozására. A perzisztens tárolók nem a konténer virtualizált – és kívülről közvetlenül elérhetetlen - fájlrendszerén, hanem közvetlenül a hoszt gépen kerülnek tárolásra, ahogy az az alábbi ábrán is látható. |
| |
{{:tanszek:oktatas:informatikai_rendszerek_epitese:pasted:20250326-130313.png}} | {{ tanszek:oktatas:informatikai_rendszerek_epitese:pasted:20250326-132557.png }} |
| |
Perzisztens tárolókat nevük és opcionálisan egyes jellemzőik (pl. méretük) megadásával hozhatunk létre. A tároló nevének egyedinek kell lennie. | Perzisztens tárolókat nevük és opcionálisan egyes jellemzőik (pl. méretük) megadásával hozhatunk létre. A tároló nevének egyedinek kell lennie. |
Ezt a folyamatot a Docker Engine kezeli, a konténer számára teljesen transzparens módon. | Ezt a folyamatot a Docker Engine kezeli, a konténer számára teljesen transzparens módon. |
| |
==== Virtuális hálózat ==== | ==== Hálózat virtualizáció ==== |
| |
Az alkalmazások gyakran több konténerre oszthatóak, ezek a konténerek a hálózaton keresztül képesek kommunikálni egymással. A Docker többféle virtualizált hálózatkezelési módszert támogat, melyek közül leggyakrabban [[https://docs.docker.com/engine/network/drivers/bridge/|bridge network]]-öket használnak. | Az alkalmazások gyakran több konténerre oszthatóak, ezek a konténerek a hálózaton keresztül képesek kommunikálni egymással. A Docker többféle virtualizált hálózatkezelési módszert támogat, melyek közül leggyakrabban [[https://docs.docker.com/engine/network/drivers/bridge/|bridge network]]-öket használnak. |
| |
{{:tanszek:oktatas:informatikai_rendszerek_epitese:pasted:20250326-130711.png}} | {{ tanszek:oktatas:informatikai_rendszerek_epitese:pasted:20250326-132611.png }} |
| |
Ahogy az a képen is látható, az azonos hálózathoz hozzákapcsolt konténerek (''todo-backend'', ''todo-database'') egymással kommunikálni tudnak, azonban a különböző hálózaton lévő konténerek (pl. a ''some-application'' és a ''todo-backend'') nem érhetik el egymást. Egy konténer egyébként akár több hálózathoz is kapcsolódhat. | Ahogy az a képen is látható, az azonos hálózathoz hozzákapcsolt konténerek (''todo-backend'', ''todo-database'') egymással kommunikálni tudnak, azonban a különböző hálózaton lévő konténerek (pl. a ''some-application'' és a ''todo-backend'') nem érhetik el egymást. Egy konténer egyébként akár több hálózathoz is kapcsolódhat. |
| |
Amennyiben saját hálózatot („user-defined bridge”) hozunk létre, azon belül a névfeloldás automatikusan biztosított, az egyes konténerekre konkrét IP-címük helyett elegendő elnevezésükkel (pl. ''todo-database'') hivatkoznunk a hálózati kommunikáció során, így az esetleges IP-cím váltás sem okoz gondot az alkalmazás üzemeltetésében. | Amennyiben saját hálózatot („user-defined bridge”) hozunk létre, azon belül a névfeloldás automatikusan biztosított, az egyes konténerekre konkrét IP-címük helyett elegendő elnevezésükkel (pl. ''todo-database'') hivatkoznunk a hálózati kommunikáció során, így az esetleges IP-cím váltás sem okoz gondot az alkalmazás üzemeltetésében. |
| |
| ==== Feladatok ==== |
| |
| * [[tanszek:oktatas:informatikai_rendszerek_epitese:docker_vitualizacio|Flask szerver és Redis cache beüzemelése]] |
| * [[tanszek:oktatas:informacios_rendszerek_integralasa:docker_loadbalancer|Terhelés elosztás és monitorozás HAProxy segítségével]] |
| * {{:tanszek:oktatas:informatikai_rendszerek_epitese:pasted:20250326-131416.pdf|Todo webalkalmazás beüzemelése}} + [[https://github.com/aron123/docker-tutorial|Forráskód]] |
| |