Files
2026-02-17 21:17:42 +01:00

433 lines
16 KiB
TeX

\section{Docker Alapok}
\begin{frame}{Mi a Docker?}
\begin{block}{Docker -- Konténerizációs platform}
\begin{itemize}
\item 2013-ban indult nyílt forráskódú projekt
\item Alkalmazások csomagolása és futtatása izolált környezetben
\item Könnyűsúlyú alternatíva a virtuális gépeknek
\end{itemize}
\end{block}
\end{frame}
\begin{frame}{Docker -- Definíció}
\begin{exampleblock}{Definíció}
A Docker egy platform, amely lehetővé teszi alkalmazások és függőségeik \textbf{konténerekbe} csomagolását, amelyek bárhol futtathatók.
\end{exampleblock}
\begin{block}{Filozófia}
\textbf{``Build once, run anywhere''} -- egyszer csomagolva, bárhol fut.
\end{block}
\end{frame}
\begin{frame}{A probléma, amit megold}
\begin{alertblock}{``Works on my machine'' probléma}
\begin{itemize}
\item Fejlesztői gépen működik, production-ön nem
\item Különböző operációs rendszerek
\item Eltérő függőség verziók
\end{itemize}
\end{alertblock}
\end{frame}
\begin{frame}{A probléma -- Következmények}
\begin{alertblock}{További problémák}
\begin{itemize}
\item Bonyolult telepítési folyamatok
\item Nehezen reprodukálható hibák
\item Inkonzisztens viselkedés környezetek között
\end{itemize}
\end{alertblock}
\end{frame}
\begin{frame}{Docker megoldás}
\begin{exampleblock}{Hogyan oldja meg?}
\begin{itemize}
\item Azonos környezet mindenhol (dev, test, prod)
\item Összes függőség a konténerben
\item Gyors telepítés és indítás
\end{itemize}
\end{exampleblock}
\begin{block}{Lényeg}
Egyszer csomagolva, bárhol fut -- garantáltan!
\end{block}
\end{frame}
\begin{frame}{Miért használjunk Dockert? -- Fejlesztőknek}
\begin{block}{Fejlesztői előnyök}
\begin{itemize}
\item Gyors setup -- percek helyett másodpercek
\item Konzisztens környezet minden fejlesztőnél
\item Izoláció -- egymástól független projektek
\end{itemize}
\end{block}
\end{frame}
\begin{frame}{Miért használjunk Dockert? -- Gyakorlatban}
\begin{exampleblock}{Gyakorlati előnyök}
\begin{itemize}
\item Új csapattag: \texttt{docker compose up} és kész
\item Nincs ``nálam működik'' probléma
\item Különböző Node.js verziók párhuzamosan
\end{itemize}
\end{exampleblock}
\end{frame}
\begin{frame}{Miért használjunk Dockert? -- DevOps}
\begin{block}{DevOps előnyök}
\begin{itemize}
\item Automatizálás -- CI/CD pipeline egyszerűsítése
\item Skálázhatóság -- könnyű horizontális skálázás
\item Mikroszolgáltatások -- ideális architektúra
\end{itemize}
\end{block}
\end{frame}
\begin{frame}{Docker fő előnyök}
\begin{block}{Összesítve}
\begin{itemize}
\item Hordozhatóság -- bárhol fut
\item Könnyűsúlyú -- MB-ok VM GB-jai helyett
\item Gyors indítás -- másodpercek
\end{itemize}
\end{block}
\end{frame}
\begin{frame}{Docker vs Virtuális gépek -- VM jellemzői}
\begin{block}{Virtuális gép (VM)}
\begin{itemize}
\item Teljes operációs rendszer minden VM-nek
\item Hypervisor szükséges (VMware, VirtualBox)
\item Lassabb indítás -- perceket vehet igénybe
\end{itemize}
\end{block}
\begin{exampleblock}{Szerkezet}
Hardware $\rightarrow$ Host OS $\rightarrow$ Hypervisor $\rightarrow$ Guest OS $\rightarrow$ App
\end{exampleblock}
\end{frame}
\begin{frame}{Docker vs Virtuális gépek -- VM hátrányok}
\begin{alertblock}{VM hátrányok}
\begin{itemize}
\item Nagy méret -- több gigabájt
\item Több erőforrás igény -- CPU, memória, tárhely
\item Teljes OS virtualizálás -- minden VM-nek saját kernel
\end{itemize}
\end{alertblock}
\end{frame}
\begin{frame}{Docker vs Virtuális gépek -- Docker jellemzői}
\begin{block}{Docker konténer}
\begin{itemize}
\item Osztott OS kernel a host-tal
\item Docker Engine futtatja
\item Gyors indítás -- másodpercek
\end{itemize}
\end{block}
\begin{exampleblock}{Szerkezet}
Hardware $\rightarrow$ Host OS $\rightarrow$ Docker Engine $\rightarrow$ App
\end{exampleblock}
\end{frame}
\begin{frame}{Docker vs VM -- Kulcskülönbség}
\begin{alertblock}{Kulcskülönbség}
\begin{itemize}
\item Alkalmazás szintű izoláció az OS kernelen
\item Konténerek osztják a host kernel-t
\item Kisebb méret -- megabájtok vs gigabájtok
\end{itemize}
\end{alertblock}
\end{frame}
\begin{frame}{Architektúra összehasonlítás}
\begin{center}
\begin{tikzpicture}[node distance=0.25cm, scale=0.85, every node/.style={scale=0.85}]
\node[font=\bfseries\footnotesize] at (-3, 4.5) {Virtuális gép};
\node[draw, rectangle, fill=blue!20, minimum width=2.5cm, minimum height=0.5cm, align=center, font=\scriptsize] (app1) at (-3, 3.8) {App A};
\node[draw, rectangle, fill=blue!20, minimum width=2.5cm, minimum height=0.5cm, below=of app1, align=center, font=\scriptsize] (os1) {Guest OS};
\node[draw, rectangle, fill=blue!20, minimum width=2.5cm, minimum height=0.5cm, font=\scriptsize] (app2) at (-3, 2.2) {App B};
\node[draw, rectangle, fill=blue!20, minimum width=2.5cm, minimum height=0.5cm, below=of app2, align=center, font=\scriptsize] (os2) {Guest OS};
\node[draw, rectangle, fill=green!20, minimum width=5.5cm, minimum height=0.5cm, below=of os2, align=center, yshift=-0.2cm, font=\scriptsize] (hypervisor) {Hypervisor};
\node[draw, rectangle, fill=yellow!20, minimum width=5.5cm, minimum height=0.5cm, below=of hypervisor, align=center, font=\scriptsize] (hostos1) {Host OS};
\node[draw, rectangle, fill=red!20, minimum width=5.5cm, minimum height=0.5cm, below=of hostos1, align=center, font=\scriptsize] (hw1) {Hardware};
\node[font=\bfseries\footnotesize] at (3, 4.5) {Docker konténer};
\node[draw, rectangle, fill=blue!20, minimum width=1.2cm, minimum height=0.5cm, align=center, font=\scriptsize] (dapp1) at (2, 3.8) {App A};
\node[draw, rectangle, fill=blue!20, minimum width=1.2cm, minimum height=0.5cm, align=center, font=\scriptsize] (dapp2) at (3.3, 3.8) {App B};
\node[draw, rectangle, fill=blue!20, minimum width=1.2cm, minimum height=0.5cm, align=center, font=\scriptsize] (dapp3) at (4.6, 3.8) {App C};
\node[draw, rectangle, fill=green!20, minimum width=5.5cm, minimum height=0.5cm, align=center, font=\scriptsize] (docker) at (3, 3) {Docker Engine};
\node[draw, rectangle, fill=yellow!20, minimum width=5.5cm, minimum height=0.5cm, below=of docker, align=center, font=\scriptsize] (hostos2) {Host OS};
\node[draw, rectangle, fill=red!20, minimum width=5.5cm, minimum height=0.5cm, below=of hostos2, align=center, font=\scriptsize] (hw2) {Hardware};
\end{tikzpicture}
\end{center}
\end{frame}
\begin{frame}{Docker életciklus}
\begin{center}
\begin{tikzpicture}[node distance=2cm]
\node[draw, rectangle, fill=blue!20, minimum width=2.5cm, minimum height=1cm, align=center] (dockerfile) {Dockerfile\\(utasítások)};
\node[draw, rectangle, fill=green!20, minimum width=2.5cm, minimum height=1cm, right=of dockerfile, align=center] (image) {Image\\(sablon)};
\node[draw, rectangle, fill=orange!20, minimum width=2.5cm, minimum height=1cm, right=of image, align=center] (container) {Container\\(futó app)};
\draw[->, thick] (dockerfile) -- (image) node[midway, above, font=\small] {build};
\draw[->, thick] (image) -- (container) node[midway, above, font=\small] {run};
\node[draw, rectangle, fill=purple!20, minimum width=2.5cm, minimum height=1cm, below=of image, align=center] (registry) {Registry\\(Docker Hub)};
\draw[->, thick] (image) -- (registry) node[midway, right, font=\small] {push};
\draw[->, thick] (registry) -- (image) node[midway, left, font=\small] {pull};
\end{tikzpicture}
\end{center}
\end{frame}
\begin{frame}{Docker Engine}
\begin{block}{Docker Engine -- A fő komponens}
\begin{itemize}
\item A Docker fő komponense
\item Kliens-szerver architektúra
\item 3 fő rész: Daemon, REST API, CLI
\end{itemize}
\end{block}
\end{frame}
\begin{frame}{Docker Engine -- Részei}
\begin{enumerate}
\item \textbf{Docker Daemon (dockerd):} Háttérfolyamat, kezeli a konténereket
\item \textbf{Docker CLI (docker):} Parancssor interfész
\item \textbf{REST API:} Kommunikáció daemon és CLI között
\end{enumerate}
\begin{exampleblock}{Működés}
Parancs: \texttt{docker run nginx} \\
CLI \textrightarrow{} REST API \textrightarrow{} Daemon \textrightarrow{} Image letöltés \& Konténer indítás
\end{exampleblock}
\end{frame}
\begin{frame}{Használati esetek -- Fejlesztés}
\begin{block}{Fejlesztési környezet}
\begin{itemize}
\item Gyors projekt setup másodpercek alatt
\item Különböző verziók párhuzamosan (Node 16, 18, 20)
\item Csapat tagjai azonos környezetben dolgoznak
\end{itemize}
\end{block}
\begin{exampleblock}{Példa}
Új fejlesztő csatlakozik: \texttt{git clone} + \texttt{docker compose up}\\
$\Rightarrow$ Azonnal dolgozhat, telepítés nélkül
\end{exampleblock}
\end{frame}
\begin{frame}{Használati esetek -- Mikroszolgáltatások}
\begin{block}{Mikroszolgáltatások}
\begin{itemize}
\item Minden szolgáltatás saját konténerben fut
\item Független skálázás és deployment
\item Könnyű verziókezelés
\end{itemize}
\end{block}
\end{frame}
\begin{frame}{Használati esetek -- CI/CD}
\begin{block}{CI/CD pipeline}
\begin{itemize}
\item Automatizált build és tesztelés
\item Konzisztens deployment minden környezetben
\item Gyors rollback hibás verzióról
\end{itemize}
\end{block}
\end{frame}
\begin{frame}{Mi kerül konténerbe? -- Alapok}
\begin{exampleblock}{Alapvető elemek}
\begin{itemize}
\item \textbf{Alap OS réteg:} Linux disztribúció (Alpine, Ubuntu)
\item \textbf{Runtime:} Node.js futtatókörnyezet (pl. 18.x)
\item \textbf{Függőségek:} npm csomagok (node\_modules mappa)
\end{itemize}
\end{exampleblock}
\end{frame}
\begin{frame}{Mi kerül konténerbe? -- Alkalmazás}
\begin{exampleblock}{Alkalmazás specifikus elemek}
\begin{itemize}
\item \textbf{Alkalmazás kód:} forrásfájlok (src/, index.js)
\item \textbf{Konfigurációk:} package.json, környezeti beállítások
\item \textbf{Indítási parancs:} npm start vagy node index.js
\end{itemize}
\end{exampleblock}
\begin{block}{Eredmény}
Önálló, hordozható csomag, amely bárhol futtatható
\end{block}
\end{frame}
\begin{frame}{Mi NEM kerül konténerbe? -- Adatok}
\begin{alertblock}{Perzisztens adatok}
\begin{itemize}
\item \textbf{Adatbázis adatok} -- volume-ban kell tárolni
\item \textbf{Nagy méretű log fájlok} -- host-ra vagy log service-re
\item \textbf{Feltöltött fájlok} -- user uploads, media files
\end{itemize}
\end{alertblock}
\begin{exampleblock}{Miért?}
Konténer törléskor ezek az adatok elvesznének!
\end{exampleblock}
\end{frame}
\begin{frame}{Mi NEM kerül konténerbe? -- Biztonság}
\begin{alertblock}{Biztonsági és development elemek}
\begin{itemize}
\item \textbf{Érzékeny konfigurációk} -- titkos kulcsok, jelszavak
\item \textbf{Fejlesztői eszközök} -- debugging, testing tools
\item \textbf{Build artifacts} -- ideiglenesen használt fájlok
\end{itemize}
\end{alertblock}
\begin{exampleblock}{Jó gyakorlat}
Titkos kulcsok: Docker secrets vagy környezeti változók\\
Dev tools: csak development image-ben
\end{exampleblock}
\end{frame}
\begin{frame}{Docker Desktop -- Mi az?}
\begin{block}{Docker Desktop alkalmazás}
\begin{itemize}
\item Grafikus felületű alkalmazás Windows és macOS rendszerekhez
\item Tartalmazza az összes szükséges Docker komponenst
\item Beépített GUI konténerek és image-ek kezeléséhez
\end{itemize}
\end{block}
\end{frame}
\begin{frame}{Docker Desktop -- Technológia}
\begin{exampleblock}{Technológiai előnyök}
\begin{itemize}
\item Integrált Kubernetes támogatás
\item WSL 2 backend Windows-on (Linux kernel)
\item Automatikus frissítések
\end{itemize}
\end{exampleblock}
\end{frame}
\begin{frame}{Docker Desktop -- Funkciók}
\begin{block}{Fő funkciók}
\begin{itemize}
\item Konténerek vizuális monitorozása
\item Resource használat követése (CPU, RAM)
\item Volume és network kezelés GUI-n keresztül
\end{itemize}
\end{block}
\end{frame}
\begin{frame}{Docker Desktop -- Kiegészítők}
\begin{exampleblock}{Kiegészítők}
\begin{itemize}
\item Extension marketplace -- további funkciók
\item Dev Environments támogatás
\item Docker Scout -- biztonsági elemzés
\end{itemize}
\end{exampleblock}
\end{frame}
\begin{frame}{Docker Desktop -- Telepítés}
\begin{exampleblock}{Telepítési lépések}
\begin{enumerate}
\item Letöltés: \texttt{docker.com/products/docker-desktop}
\item Telepítő futtatása
\item Rendszer újraindítása (ha szükséges)
\end{enumerate}
\end{exampleblock}
\end{frame}
\begin{frame}{Docker Desktop -- Ellenőrzés}
\begin{exampleblock}{Ellenőrzés}
\begin{enumerate}
\item Docker Desktop indítása
\item Ellenőrzés terminálban: \texttt{docker --version}
\end{enumerate}
\end{exampleblock}
\end{frame}
\begin{frame}{Docker Desktop -- Windows és macOS}
\begin{block}{Windows és macOS}
\begin{itemize}
\item \textbf{Docker Desktop ajánlott} -- grafikus telepítő
\item Tartalmaz mindent: Docker Engine, CLI, Compose
\item Automatikus frissítések
\end{itemize}
\end{block}
\end{frame}
\begin{frame}{Docker Desktop -- Linux}
\begin{alertblock}{Linux}
\begin{itemize}
\item \textbf{Docker Engine} közvetlenül telepíthető
\item Docker Desktop opcionális (beta)
\item Parancssorból: \texttt{apt install docker.io}
\end{itemize}
\end{alertblock}
\end{frame}
\begin{frame}{Összefoglalás -- Docker lényege}
\begin{block}{Docker = Modern konténerizáció}
\begin{itemize}
\item Alkalmazások izolált, hordozható csomagolása
\item Könnyűsúlyú alternatíva a virtuális gépeknek
\item ``Build once, run anywhere'' filozófia
\end{itemize}
\end{block}
\end{frame}
\begin{frame}{Összefoglalás -- Előnyök}
\begin{exampleblock}{Miért használjuk?}
\begin{itemize}
\item Gyors és könnyű deployment
\item Hatékony erőforrás kihasználás
\item Skálázható mikroszolgáltatások
\end{itemize}
\end{exampleblock}
\end{frame}
\begin{frame}{Összefoglalás -- Fogalmak}
\begin{block}{Build és futtatás}
\begin{itemize}
\item \textbf{Dockerfile:} Utasítások az image építéséhez
\item \textbf{Image:} Csak olvasható sablon az alkalmazásról
\item \textbf{Container:} Futó példány egy image-ből
\end{itemize}
\end{block}
\begin{exampleblock}{Folyamat}
Dockerfile $\rightarrow$ build $\rightarrow$ Image $\rightarrow$ run $\rightarrow$ Container
\end{exampleblock}
\end{frame}
\begin{frame}{Összefoglalás -- Tárolás}
\begin{block}{Tárolás és kommunikáció}
\begin{itemize}
\item \textbf{Registry:} Image-ek tárolása (pl. Docker Hub)
\item \textbf{Volume:} Perzisztens adattárolás
\item \textbf{Network:} Konténerek közötti kommunikáció
\end{itemize}
\end{block}
\begin{alertblock}{Következő lépések}
Dockerfile készítés, image build, konténer kezelés, Docker Compose
\end{alertblock}
\end{frame}