docker
This commit is contained in:
@@ -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}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user