This commit is contained in:
magdo
2026-02-17 21:17:42 +01:00
parent d90a6ed735
commit af57733506
17 changed files with 4194 additions and 59 deletions
+221
View File
@@ -0,0 +1,221 @@
\section{Docker Image-ek}
\begin{frame}{Mi a Docker image?}
\begin{block}{Image = futtatási sablon}
\begin{itemize}
\item Csak olvasható sablon egy konténer létrehozásához
\item Tartalmazza az alkalmazás kódját és a függőségeket
\item Rétegekből (layers) épül fel
\end{itemize}
\end{block}
\end{frame}
\begin{frame}{Image -- Jellemzők}
\begin{block}{Tulajdonságok}
\begin{itemize}
\item Egy image-ből több konténer is indulhat
\item Immutable -- nem módosítható közvetlenül
\end{itemize}
\end{block}
\begin{exampleblock}{Analógia}
Az image olyan, mint egy telepítő ISO, a konténer pedig a futó rendszer.
\end{exampleblock}
\end{frame}
\begin{frame}{Image felépítése -- rétegek}
\begin{block}{Layer alapú működés}
\begin{itemize}
\item Minden Dockerfile utasítás új réteget hozhat létre
\item A rétegek újrahasznosíthatók több image között
\item Kisebb tárhelyigény és gyorsabb build a cache miatt
\end{itemize}
\end{block}
\end{frame}
\begin{frame}{Image rétegek -- Konténer indítás}
\begin{block}{Konténer indulásakor}
\begin{itemize}
\item Egy írható réteg kerül az image fölé
\item Az image rétegek változatlanok maradnak
\end{itemize}
\end{block}
\begin{alertblock}{Miért fontos?}
A jó Dockerfile-sorrend jelentősen csökkenti a build időt.
\end{alertblock}
\end{frame}
\begin{frame}[fragile]{Image azonosítás: név és tag}
\begin{block}{Formátum}
\texttt{[registry/]repository:tag}
\end{block}
\begin{exampleblock}{Példák}
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
nginx:1.27
node:20-alpine
postgres:16
myrepo/my-api:1.0.0
ghcr.io/acme/payment-service:2026-02-15
\end{lstlisting}
\end{exampleblock}
\begin{alertblock}{Best practice}
Production környezetben ne használd a \texttt{latest} taget.
\end{alertblock}
\end{frame}
\begin{frame}[fragile]{Image letöltése -- docker pull}
\begin{block}{Pull parancs}
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
# Legfrissebb tag letöltése
docker pull nginx
# Konkrét verzió
docker pull nginx:1.27
# Privát registry
docker pull ghcr.io/acme/my-api:1.0.0
\end{lstlisting}
\end{block}
\end{frame}
\begin{frame}{Image letöltése -- Tudnivalók}
\begin{block}{Automatikus letöltés}
\begin{itemize}
\item Ha a \texttt{docker run} során nincs helyben az image, automatikusan pull történik
\item Több réteg párhuzamosan töltődik le
\end{itemize}
\end{block}
\end{frame}
\begin{frame}[fragile]{Saját image építése -- docker build}
\begin{block}{Alap build}
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
# Aktuális mappából build
docker build -t my-api:1.0.0 .
# Több tag egyszerre
docker build -t my-api:1.0.0 -t my-api:latest .
\end{lstlisting}
\end{block}
\end{frame}
\begin{frame}[fragile]{Saját image építése -- Haladó}
\begin{block}{Haladó opciók}
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
# Másik Dockerfile használata
docker build -f Dockerfile.prod -t my-api:prod .
\end{lstlisting}
\end{block}
\begin{alertblock}{Tipp}
A build context legyen kicsi (\texttt{.dockerignore} használata kötelezően ajánlott).
\end{alertblock}
\end{frame}
\begin{frame}[fragile]{Image lista és információk}
\begin{block}{Gyakori parancsok}
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
# Lokális image-ek listája
docker images
# Csak azonosítók
docker images -q
# Részletes adatok JSON-ben
docker image inspect my-api:1.0.0
\end{lstlisting}
\end{block}
\end{frame}
\begin{frame}[fragile]{Image történet}
\begin{block}{Réteg történet}
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
# Réteg történet
docker history my-api:1.0.0
\end{lstlisting}
\end{block}
\end{frame}
\begin{frame}[fragile]{Image publikálása -- docker push}
\begin{block}{Folyamat}
\begin{enumerate}
\item Registry-be bejelentkezés: \texttt{docker login}
\item Image tag-elése cél repository-ra
\item Feltöltés \texttt{docker push}-sal
\end{enumerate}
\end{block}
\end{frame}
\begin{frame}[fragile]{Image publikálása -- Példa}
\begin{exampleblock}{Példa Docker Hub-ra}
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
docker login
docker tag my-api:1.0.0 myuser/my-api:1.0.0
docker push myuser/my-api:1.0.0
\end{lstlisting}
\end{exampleblock}
\end{frame}
\begin{frame}[fragile]{Image mentés és visszatöltés}
\begin{block}{Offline terjesztés}
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
# Image mentése tar fájlba
docker save -o my-api-1.0.0.tar my-api:1.0.0
# Visszatöltés
docker load -i my-api-1.0.0.tar
\end{lstlisting}
\end{block}
\begin{exampleblock}{Mikor hasznos?}
Zárt hálózati környezetben, ahol nincs közvetlen registry elérés.
\end{exampleblock}
\end{frame}
\begin{frame}[fragile]{Image takarítás}
\begin{block}{Felesleges image-ek eltávolítása}
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
# Egy image törlése
docker rmi my-api:1.0.0
# Címke nélküli (dangling) image-ek törlése
docker image prune
# Minden nem használt image törlése
docker image prune -a
\end{lstlisting}
\end{block}
\begin{alertblock}{Figyelem}
A \texttt{prune} műveletek törlése nem visszavonható.
\end{alertblock}
\end{frame}
\begin{frame}{Best practices -- Verzió és méret}
\begin{exampleblock}{Ajánlott gyakorlatok}
\begin{itemize}
\item Használj fix verzió tag-eket (\texttt{1.0.0}, \texttt{2026-02-15})
\item Tartsd kicsiben az image méretét (alpine, multi-stage build)
\item Kerüld az érzékeny adatok beégetését image-be
\end{itemize}
\end{exampleblock}
\end{frame}
\begin{frame}{Best practices -- Build és deploy}
\begin{exampleblock}{Ajánlott gyakorlatok}
\begin{itemize}
\item Építs reprodukálható módon (determinista build)
\item CI-ben automatikusan címkézz és push-olj
\end{itemize}
\end{exampleblock}
\begin{alertblock}{Összefoglaló}
Jó image stratégia = gyors build, gyors deploy, kevesebb hiba.
\end{alertblock}
\end{frame}