\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}



