docker
This commit is contained in:
@@ -0,0 +1,721 @@
|
||||
\section{Docker hálózatok}
|
||||
|
||||
\begin{frame}{Docker hálózatok -- Bevezetés}
|
||||
\begin{block}{Miért fontosak a Docker hálózatok?}
|
||||
\begin{itemize}
|
||||
\item Konténerek közötti kommunikáció
|
||||
\item Szolgáltatások izolálása
|
||||
\item Biztonságos konténer-architektúra
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Probléma hálózatok nélkül}
|
||||
\begin{alertblock}{Mi történik hálózatok nélkül?}
|
||||
\begin{itemize}
|
||||
\item Konténerek nem érik el egymást
|
||||
\item Minden port-ot a host-ra kell publikálni
|
||||
\item Nincs belső szolgáltatás-felderítés (DNS)
|
||||
\end{itemize}
|
||||
\end{alertblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Megoldás -- Docker hálózatok}
|
||||
\begin{exampleblock}{Docker hálózatokkal}
|
||||
\begin{itemize}
|
||||
\item Konténerek név alapján érik el egymást
|
||||
\item Belső kommunikáció port-publikálás nélkül
|
||||
\item Automatikus DNS feloldás
|
||||
\end{itemize}
|
||||
\end{exampleblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Hálózati driverek -- Áttekintés}
|
||||
\begin{block}{Docker hálózati driverek}
|
||||
\begin{itemize}
|
||||
\item \texttt{bridge}: Alapértelmezett, izolált hálózat
|
||||
\item \texttt{host}: Host hálózat közvetlen használata
|
||||
\item \texttt{none}: Nincs hálózat
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Hálózati driverek -- További}
|
||||
\begin{block}{Haladó driverek}
|
||||
\begin{itemize}
|
||||
\item \texttt{overlay}: Több Docker host közötti hálózat (Swarm)
|
||||
\item \texttt{macvlan}: Saját MAC cím, fizikai hálózatba illeszkedik
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Bridge hálózat -- Mi az?}
|
||||
\begin{block}{Bridge driver (alapértelmezett)}
|
||||
\begin{itemize}
|
||||
\item Szoftveres hálózati híd a host-on
|
||||
\item Konténerek egymást elérik a bridge-en
|
||||
\item Külvilág felé port-publikálás szükséges
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Bridge architektúra}
|
||||
\begin{center}
|
||||
\begin{tikzpicture}[
|
||||
box/.style={draw, rounded corners, minimum width=2.2cm, minimum height=0.9cm, font=\footnotesize},
|
||||
bridge/.style={draw, fill=szecyan!20, rounded corners,
|
||||
minimum width=8cm, minimum height=0.7cm, font=\footnotesize},
|
||||
arr/.style={->, thick, >=stealth}
|
||||
]
|
||||
% Host
|
||||
\node[draw, dashed, rounded corners, minimum width=9.5cm, minimum height=5cm,
|
||||
label={[font=\footnotesize]above:Host gép}] (host) at (0,0) {};
|
||||
|
||||
% Bridge
|
||||
\node[bridge] (br) at (0, 0.5) {docker0 (bridge)};
|
||||
|
||||
% Containers
|
||||
\node[box, fill=szezold!30] (c1) at (-2.5, -1.2) {Konténer A};
|
||||
\node[box, fill=szezold!30] (c2) at (0, -1.2) {Konténer B};
|
||||
\node[box, fill=szezold!30] (c3) at (2.5, -1.2) {Konténer C};
|
||||
|
||||
% veth pairs
|
||||
\draw[arr] (c1.north) -- (br.south -| c1.north);
|
||||
\draw[arr] (c2.north) -- (br.south);
|
||||
\draw[arr] (c3.north) -- (br.south -| c3.north);
|
||||
|
||||
% External
|
||||
\node[box, fill=szenavy!20, text=szenavy] (ext) at (0, 2.5) {Külvilág};
|
||||
\draw[arr, dashed] (br.north) -- node[right, font=\scriptsize] {port publish} (ext.south);
|
||||
\end{tikzpicture}
|
||||
\end{center}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Hálózat parancsok -- Listázás}
|
||||
\begin{block}{Hálózatok listázása}
|
||||
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
|
||||
# Összes hálózat
|
||||
docker network ls
|
||||
|
||||
# NETWORK ID NAME DRIVER SCOPE
|
||||
# abc123 bridge bridge local
|
||||
# def456 host host local
|
||||
# ghi789 none null local
|
||||
\end{lstlisting}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Hálózat parancsok -- Létrehozás}
|
||||
\begin{block}{Hálózat létrehozása}
|
||||
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
|
||||
# Egyszerű bridge hálózat
|
||||
docker network create mynetwork
|
||||
|
||||
# Megadott driver-rel
|
||||
docker network create --driver bridge mynetwork
|
||||
|
||||
# Megadott subnet-tel
|
||||
docker network create --subnet=172.20.0.0/16 mynetwork
|
||||
\end{lstlisting}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Hálózat parancsok -- Törlés}
|
||||
\begin{block}{Hálózat törlése és tisztítás}
|
||||
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
|
||||
# Egy hálózat törlése
|
||||
docker network rm mynetwork
|
||||
|
||||
# Nem használt hálózatok törlése
|
||||
docker network prune
|
||||
|
||||
# Részletes információk
|
||||
docker network inspect mynetwork
|
||||
\end{lstlisting}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Konténer csatlakoztatás -- Indításkor}
|
||||
\begin{block}{Hálózat megadása indításkor}
|
||||
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
|
||||
# Konténer indítása adott hálózaton
|
||||
docker run -d --name backend \
|
||||
--network mynetwork my-app
|
||||
|
||||
# Több hálózat: indítás után csatlakoztatás
|
||||
docker network connect frontend-net backend
|
||||
\end{lstlisting}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Konténer csatlakoztatás -- Utólag}
|
||||
\begin{block}{Utólagos csatlakoztatás / leválasztás}
|
||||
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
|
||||
# Futó konténer csatlakoztatása hálózathoz
|
||||
docker network connect mynetwork mycontainer
|
||||
|
||||
# Leválasztás hálózatról
|
||||
docker network disconnect mynetwork mycontainer
|
||||
\end{lstlisting}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Default bridge vs User-defined}
|
||||
\begin{alertblock}{Default bridge hálózat}
|
||||
\begin{itemize}
|
||||
\item \textbf{Nincs} automatikus DNS feloldás
|
||||
\item Konténerek csak IP-vel érik el egymást
|
||||
\item IP cím változhat újraindításkor
|
||||
\end{itemize}
|
||||
\end{alertblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{User-defined bridge -- Előnyök}
|
||||
\begin{exampleblock}{User-defined bridge hálózat}
|
||||
\begin{itemize}
|
||||
\item \textbf{Van} automatikus DNS feloldás
|
||||
\item Konténerek \textbf{név alapján} érik el egymást
|
||||
\item Jobb izoláció, automatikus link
|
||||
\end{itemize}
|
||||
\end{exampleblock}
|
||||
|
||||
\begin{alertblock}{Ajánlás}
|
||||
Mindig user-defined bridge-et használj!
|
||||
\end{alertblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{DNS és Service Discovery -- Kód}
|
||||
\begin{exampleblock}{Automatikus névfeloldás}
|
||||
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
|
||||
# Hálózat létrehozása
|
||||
docker network create app-net
|
||||
|
||||
# Adatbázis indítása
|
||||
docker run -d --name database \
|
||||
--network app-net postgres:15
|
||||
|
||||
# Backend indítása
|
||||
docker run -d --name backend \
|
||||
--network app-net \
|
||||
-e DB_HOST=database \
|
||||
my-backend
|
||||
\end{lstlisting}
|
||||
\end{exampleblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{DNS és Service Discovery -- Magyarázat}
|
||||
\begin{block}{Hogyan működik?}
|
||||
\begin{itemize}
|
||||
\item \texttt{backend} eléri \texttt{database}-t a nevével
|
||||
\item Docker beépített DNS szerver: \texttt{127.0.0.11}
|
||||
\item Konténer név = hostname a hálózaton
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Fullstack példa -- Hálózat létrehozás}
|
||||
\begin{exampleblock}{Hálózat előkészítése}
|
||||
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
|
||||
# Hálózat létrehozása
|
||||
docker network create fullstack-net
|
||||
\end{lstlisting}
|
||||
\end{exampleblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Fullstack példa -- Adatbázis}
|
||||
\begin{exampleblock}{PostgreSQL indítása}
|
||||
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
|
||||
docker run -d --name postgres \
|
||||
--network fullstack-net \
|
||||
-e POSTGRES_PASSWORD=secret \
|
||||
-e POSTGRES_DB=myapp \
|
||||
-v pgdata:/var/lib/postgresql/data \
|
||||
postgres:15-alpine
|
||||
\end{lstlisting}
|
||||
\end{exampleblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Fullstack példa -- Backend}
|
||||
\begin{exampleblock}{Node.js backend}
|
||||
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
|
||||
docker run -d --name backend \
|
||||
--network fullstack-net \
|
||||
-p 3001:3001 \
|
||||
-e DATABASE_URL=postgresql://postgres:secret
|
||||
@postgres:5432/myapp \
|
||||
my-backend
|
||||
\end{lstlisting}
|
||||
\end{exampleblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Fullstack példa -- Frontend}
|
||||
\begin{exampleblock}{React frontend}
|
||||
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
|
||||
docker run -d --name frontend \
|
||||
--network fullstack-net \
|
||||
-p 3000:3000 \
|
||||
my-frontend
|
||||
\end{lstlisting}
|
||||
\end{exampleblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Fullstack példa -- Magyarázat}
|
||||
\begin{block}{Kommunikáció}
|
||||
\begin{itemize}
|
||||
\item Backend eléri az adatbázist: \texttt{postgres:5432}
|
||||
\item Frontend eléri a backend-et: \texttt{backend:3001}
|
||||
\item Külvilág eléri: \texttt{localhost:3000} és \texttt{:3001}
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Port publishing vs belső hálózat}
|
||||
\begin{block}{Mikor kell port publishing?}
|
||||
Csak ha a \textbf{host-ról} vagy \textbf{külvilágból} kell elérni!
|
||||
\end{block}
|
||||
|
||||
\begin{exampleblock}{Belső hálózat}
|
||||
\begin{itemize}
|
||||
\item Adatbázis: \textbf{NEM} kell port publish
|
||||
\item Backend API: kell, ha host-ról is elérik
|
||||
\item Frontend: kell, mert böngészőből érik el
|
||||
\end{itemize}
|
||||
\end{exampleblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Port példa -- Helyes konfiguráció}
|
||||
\begin{exampleblock}{Best practice}
|
||||
\begin{lstlisting}[language=yaml,basicstyle=\scriptsize\ttfamily]
|
||||
services:
|
||||
database:
|
||||
image: postgres # Nincs ports: belső!
|
||||
networks:
|
||||
- backend
|
||||
|
||||
api:
|
||||
ports:
|
||||
- "3001:3001" # Kívülről is elérhető
|
||||
networks:
|
||||
- backend
|
||||
- frontend
|
||||
\end{lstlisting}
|
||||
\end{exampleblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Host hálózat -- Mi az?}
|
||||
\begin{block}{Host driver}
|
||||
\begin{itemize}
|
||||
\item Konténer közvetlenül a host hálózatát használja
|
||||
\item Nincs port mapping szükség
|
||||
\item Nincs hálózati izoláció
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Host hálózat -- Használat}
|
||||
\begin{block}{Parancs}
|
||||
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
|
||||
docker run -d --network host nginx
|
||||
# nginx elérhető: localhost:80 (port mapping nélkül)
|
||||
\end{lstlisting}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Host hálózat -- Előnyök és hátrányok}
|
||||
\begin{exampleblock}{Előnyök}
|
||||
\begin{itemize}
|
||||
\item Jobb hálózati teljesítmény
|
||||
\item Egyszerűbb port-kezelés
|
||||
\end{itemize}
|
||||
\end{exampleblock}
|
||||
|
||||
\begin{alertblock}{Hátrányok}
|
||||
\begin{itemize}
|
||||
\item Nincs izoláció
|
||||
\item Port ütközések lehetségesek
|
||||
\item Csak Linuxon működik jól
|
||||
\end{itemize}
|
||||
\end{alertblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{None hálózat -- Mi az?}
|
||||
\begin{block}{None driver}
|
||||
\begin{itemize}
|
||||
\item Teljesen izolált konténer
|
||||
\item Nincs hálózati hozzáférés
|
||||
\item Batch feldolgozáshoz, biztonsági feladatokhoz
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{None hálózat -- Használat}
|
||||
\begin{block}{Parancs}
|
||||
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
|
||||
docker run -d --network none my-batch-processor
|
||||
\end{lstlisting}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Network inspect}
|
||||
\begin{block}{Hálózat részletes adatai}
|
||||
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
|
||||
docker network inspect mynetwork
|
||||
\end{lstlisting}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Network inspect -- Kimenet}
|
||||
\begin{block}{Kimenet részlet}
|
||||
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
|
||||
{
|
||||
"Name": "mynetwork",
|
||||
"Driver": "bridge",
|
||||
"Subnet": "172.20.0.0/16",
|
||||
"Containers": {
|
||||
"abc123": {
|
||||
"Name": "backend",
|
||||
"IPv4Address": "172.20.0.2/16"
|
||||
}
|
||||
}
|
||||
}
|
||||
\end{lstlisting}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Egyedi subnet és IP}
|
||||
\begin{block}{Subnet és fix IP beállítás}
|
||||
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
|
||||
# Hálózat egyedi subnet-tel
|
||||
docker network create \
|
||||
--subnet=172.28.0.0/16 \
|
||||
--gateway=172.28.0.1 \
|
||||
custom-net
|
||||
|
||||
# Konténer fix IP-vel
|
||||
docker run -d --name db \
|
||||
--network custom-net \
|
||||
--ip 172.28.0.10 \
|
||||
postgres:15
|
||||
\end{lstlisting}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Egyedi subnet -- Mikor használjuk?}
|
||||
\begin{block}{Mikor hasznos a fix IP?}
|
||||
\begin{itemize}
|
||||
\item Tűzfal szabályokhoz
|
||||
\item Legacy alkalmazásokhoz
|
||||
\item Speciális hálózati konfigurációkhoz
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
|
||||
\begin{alertblock}{Ajánlás}
|
||||
Lehetőleg DNS neveket használj fix IP-k helyett!
|
||||
\end{alertblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Docker Compose hálózatok -- Automatikus}
|
||||
\begin{block}{Compose automatikus hálózat}
|
||||
\begin{lstlisting}[language=yaml,basicstyle=\scriptsize\ttfamily]
|
||||
services:
|
||||
backend:
|
||||
image: my-app
|
||||
database:
|
||||
image: postgres
|
||||
\end{lstlisting}
|
||||
Compose automatikusan létrehozza: \texttt{<projektnév>\_default}\\
|
||||
Mindkét szolgáltatás rajta van, név alapján érik el egymást.
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Docker Compose hálózatok -- Egyedi}
|
||||
\begin{exampleblock}{Egyedi hálózatok definiálása}
|
||||
\begin{lstlisting}[language=yaml,basicstyle=\scriptsize\ttfamily]
|
||||
services:
|
||||
frontend:
|
||||
networks:
|
||||
- frontend-net
|
||||
backend:
|
||||
networks:
|
||||
- frontend-net
|
||||
- backend-net
|
||||
database:
|
||||
networks:
|
||||
- backend-net
|
||||
|
||||
networks:
|
||||
frontend-net:
|
||||
backend-net:
|
||||
\end{lstlisting}
|
||||
\end{exampleblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Compose hálózatok -- Magyarázat}
|
||||
\begin{block}{Izoláció}
|
||||
\begin{itemize}
|
||||
\item \texttt{frontend} $\leftrightarrow$ \texttt{backend}: OK (frontend-net)
|
||||
\item \texttt{backend} $\leftrightarrow$ \texttt{database}: OK (backend-net)
|
||||
\item \texttt{frontend} $\leftrightarrow$ \texttt{database}: \textbf{NEM} megy!
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
|
||||
\begin{exampleblock}{Biztonsági előny}
|
||||
Az adatbázis nem érhető el közvetlenül a frontendből.
|
||||
\end{exampleblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Links -- Régi módszer}
|
||||
\begin{alertblock}{Legacy: links}
|
||||
A \texttt{links} kulcsszó elavult!
|
||||
\begin{itemize}
|
||||
\item Régi Docker verziókban használták
|
||||
\item Helyette: user-defined networks
|
||||
\item Automatikus DNS feloldás jobb megoldás
|
||||
\end{itemize}
|
||||
\end{alertblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Network alias}
|
||||
\begin{block}{Alternatív nevek a hálózaton}
|
||||
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
|
||||
docker run -d --name postgres \
|
||||
--network app-net \
|
||||
--network-alias db \
|
||||
--network-alias database \
|
||||
postgres:15
|
||||
\end{lstlisting}
|
||||
A konténer 3 néven érhető el: \texttt{postgres}, \texttt{db}, \texttt{database}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Network alias -- Compose-ban}
|
||||
\begin{block}{Compose alias}
|
||||
\begin{lstlisting}[language=yaml,basicstyle=\scriptsize\ttfamily]
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:15
|
||||
networks:
|
||||
backend:
|
||||
aliases:
|
||||
- db
|
||||
- database
|
||||
|
||||
networks:
|
||||
backend:
|
||||
\end{lstlisting}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Overlay hálózat}
|
||||
\begin{block}{Overlay driver}
|
||||
\begin{itemize}
|
||||
\item Több Docker host közötti hálózat
|
||||
\item Docker Swarm és Kubernetes használja
|
||||
\item Konténerek különböző gépeken kommunikálnak
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
|
||||
\begin{alertblock}{Egyetemi keretek}
|
||||
Fejlesztéshez bridge hálózat elég, overlay csak produkciós klaszterben szükséges.
|
||||
\end{alertblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Troubleshooting -- Alapparancsok}
|
||||
\begin{block}{Hálózati hibakeresés}
|
||||
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
|
||||
# Konténer hálózati beállításai
|
||||
docker inspect --format \
|
||||
'{{json .NetworkSettings.Networks}}' backend
|
||||
|
||||
# Ping teszt konténerből
|
||||
docker exec backend ping database
|
||||
|
||||
# DNS feloldás konténerből
|
||||
docker exec backend nslookup database
|
||||
\end{lstlisting}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Troubleshooting -- Haladó}
|
||||
\begin{block}{Haladó hibakeresés}
|
||||
\begin{lstlisting}[language=bash,basicstyle=\scriptsize\ttfamily]
|
||||
# Hálózati konténer csatlakoztatás
|
||||
docker run --rm -it --network mynetwork \
|
||||
nicolaka/netshoot
|
||||
|
||||
# Hálózati port ellenőrzés
|
||||
docker exec backend curl -v database:5432
|
||||
\end{lstlisting}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Gyakori problémák 1 -- Nem éri el}
|
||||
\begin{alertblock}{Probléma: Konténer nem éri el a másikat}
|
||||
\begin{itemize}
|
||||
\item \textbf{Ok:} Nem ugyanazon a hálózaton vannak
|
||||
\item \textbf{Megoldás:} \texttt{docker network connect} vagy közös hálózat
|
||||
\end{itemize}
|
||||
\end{alertblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Gyakori problémák 2 -- DNS nem működik}
|
||||
\begin{alertblock}{Probléma: DNS névfeloldás nem működik}
|
||||
\begin{itemize}
|
||||
\item \textbf{Ok:} Default bridge-en nincs DNS
|
||||
\item \textbf{Megoldás:} User-defined bridge hálózat használata
|
||||
\end{itemize}
|
||||
\end{alertblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Gyakori problémák 3 -- Port ütközés}
|
||||
\begin{alertblock}{Probléma: Port already in use}
|
||||
\begin{itemize}
|
||||
\item \textbf{Ok:} Host-on már foglalt a port
|
||||
\item \textbf{Megoldás:} Másik host port (\texttt{-p 3001:3000})
|
||||
\end{itemize}
|
||||
\end{alertblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Gyakori problémák 4 -- Connection refused}
|
||||
\begin{alertblock}{Probléma: Connection refused}
|
||||
\begin{itemize}
|
||||
\item \textbf{Ok:} Alkalmazás csak localhost-on figyel
|
||||
\item \textbf{Megoldás:} \texttt{0.0.0.0}-ra bind-olás
|
||||
\end{itemize}
|
||||
\end{alertblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Biztonsági best practices 1}
|
||||
\begin{exampleblock}{Hálózati biztonság}
|
||||
\begin{itemize}
|
||||
\item Külön hálózat minden szolgáltatás-rétegnek
|
||||
\item Ne publikálj felesleges portokat
|
||||
\item Adatbázis soha nem érhető el kívülről
|
||||
\end{itemize}
|
||||
\end{exampleblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Biztonsági best practices 2}
|
||||
\begin{exampleblock}{Hálózati biztonság -- Fejlesztés}
|
||||
\begin{itemize}
|
||||
\item Használj user-defined bridge-et
|
||||
\item Network alias a rugalmasságért
|
||||
\item Prod-ban minimális port exposure
|
||||
\end{itemize}
|
||||
\end{exampleblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Komplex hálózat -- 3-rétegű alkalmazás}
|
||||
\begin{exampleblock}{Frontend réteg}
|
||||
\begin{lstlisting}[language=yaml,basicstyle=\scriptsize\ttfamily]
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
nginx:
|
||||
image: nginx:alpine
|
||||
ports:
|
||||
- "80:80"
|
||||
networks:
|
||||
- frontend
|
||||
depends_on:
|
||||
- api
|
||||
\end{lstlisting}
|
||||
\end{exampleblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Komplex hálózat -- API réteg}
|
||||
\begin{exampleblock}{API réteg}
|
||||
\begin{lstlisting}[language=yaml,basicstyle=\scriptsize\ttfamily]
|
||||
services:
|
||||
api:
|
||||
build: ./api
|
||||
networks:
|
||||
- frontend
|
||||
- backend
|
||||
depends_on:
|
||||
- postgres
|
||||
- redis
|
||||
environment:
|
||||
DB_HOST: postgres
|
||||
REDIS_HOST: redis
|
||||
\end{lstlisting}
|
||||
\end{exampleblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Komplex hálózat -- Adatbázis réteg}
|
||||
\begin{exampleblock}{Adatbázis réteg}
|
||||
\begin{lstlisting}[language=yaml,basicstyle=\scriptsize\ttfamily]
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:15
|
||||
networks:
|
||||
- backend
|
||||
volumes:
|
||||
- pgdata:/var/lib/postgresql/data
|
||||
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
networks:
|
||||
- backend
|
||||
\end{lstlisting}
|
||||
\end{exampleblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]{Komplex hálózat -- Hálózat és volume definíciók}
|
||||
\begin{exampleblock}{Hálózatok és volume-ok}
|
||||
\begin{lstlisting}[language=yaml,basicstyle=\scriptsize\ttfamily]
|
||||
networks:
|
||||
frontend:
|
||||
driver: bridge
|
||||
backend:
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
pgdata:
|
||||
\end{lstlisting}
|
||||
\end{exampleblock}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Komplex hálózat -- Magyarázat}
|
||||
\begin{block}{Biztonsági izoláció}
|
||||
\begin{itemize}
|
||||
\item nginx $\leftrightarrow$ api: frontend hálózat
|
||||
\item api $\leftrightarrow$ postgres/redis: backend hálózat
|
||||
\item nginx $\leftrightarrow$ postgres: \textbf{NINCS} közvetlen út
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Összefoglalás -- Lényeg}
|
||||
\begin{block}{Docker hálózatok}
|
||||
\begin{itemize}
|
||||
\item Konténerek közötti kommunikáció alapja
|
||||
\item Szolgáltatás-felderítés DNS-sel
|
||||
\item Biztonsági izoláció rétegekkel
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Összefoglalás -- Kulcs koncepciók}
|
||||
\begin{block}{Fő elemek}
|
||||
\begin{itemize}
|
||||
\item \textbf{Bridge}: alapértelmezett, legtöbb esetben elég
|
||||
\item \textbf{User-defined}: mindig ezt használd (DNS!)
|
||||
\item \textbf{Compose}: automatikus hálózat létrehozás
|
||||
\end{itemize}
|
||||
\end{block}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}{Összefoglalás -- Aranyszabályok}
|
||||
\begin{exampleblock}{Aranyszabályok}
|
||||
\begin{itemize}
|
||||
\item Konténer név = hostname a hálózaton
|
||||
\item Csak szükséges portokat publikáld
|
||||
\item Külön hálózat = jobb biztonság
|
||||
\end{itemize}
|
||||
\end{exampleblock}
|
||||
\end{frame}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user