Docker és Kubernetes a mindennapokban – Teljes kezdő útmutató
2024. december 20.•30 perc olvasás•
#Docker#Kubernetes#DevOps
"De a gépen működött!" – Ismerős? A konténerizáció ezt a problémát oldja meg egyszer s mindenkorra. A Docker és a Kubernetes napjaink legfontosabb DevOps eszközei. Ebben a cikkben nem elméleti szintű magyarázatot kapsz, hanem használható, másolható parancsokat és konfig fájlokat, amelyekkel azonnal produktívvá válhatsz.
Miért van szükség konténerekre?
Képzeld el: megírod a webalkalmazásod Node.js-ben, használsz egy bizonyos verziójú könyvtárat, Redis-t cache-nek, és PostgreSQL adatbázist. A fejlesztői gépeden minden tökéletesen fut. Aztán felteszed a szerverre, és… semmi. Mert a szerveren más a Node verzió, nincs telepítve a Redis, más a környezeti változó.
A Docker ezt úgy oldja meg, hogy minden függőséget egy konténerbe csomagol, ami bárhol ugyanúgy fut. A Kubernetes pedig ezeket a konténereket kezeli, skálázza, és ha egy leáll, újraindítja.
1. Docker – Az alapok
Telepítsd a Docker-t a hivatalos oldalról (macOS, Windows, Linux egyaránt).
Első konténer indítása
# Hello World
docker run hello-world
# Indíts egy Ubuntu konténert interaktív módban
docker run -it ubuntu bash
# Indíts egy Nginx webszervert a 8080-as porton
docker run -d -p 8080:80 nginx
A docker ps megmutatja a futó konténereket, docker stop <container_id> leállítja.
Dockerfile – a konténer receptje
Hozz létre egy Dockerfile fájlt egy Node.js alkalmazáshoz:
# Alapkép (hivatalos Node 20-alpine, ami nagyon kicsi)
FROM node:20-alpine
# Munkakönyvtár beállítása
WORKDIR /app
# Csak a package.json fájlokat másoljuk először (a cache miatt)
COPY package*.json ./
# Függőségek telepítése (production only)
RUN npm ci --only=production
# Forráskód másolása
COPY . .
# A port, amit az alkalmazás használ
EXPOSE 3000
# Az indításkor futtatandó parancs
CMD ["node", "server.js"]
Buildeld és futtasd:
docker build -t my-node-app .
docker run -p 3000:3000 my-node-app
Használd a .dockerignore fájlt, hogy ne másolódjanak be a felesleges dolgok (node_modules, .git, stb.).
2. Docker Compose – több konténer együtt
Egy modern alkalmazás ritkán egyetlen konténerből áll. Legyen egy Node.js backend, egy PostgreSQL adatbázis, és egy Redis cache. Így néz ki a docker-compose.yml:
docker-compose up -d # háttérben
docker-compose logs -f # logok követése
docker-compose down # leállítás
Ez a setup fejlesztésre is tökéletes – a kód megváltoztatásakor újra kell buildelni a app szolgáltatást, de az adatbázis adatai megmaradnak a volume-nak köszönhetően.
3. Kubernetes – a konténer orkesztrátor
Ha már több konténered van, és azokat több szerveren akarod futtatni, automatizálni a skálázást, a frissítéseket, akkor jön a Kubernetes (röviden K8s).
Először is telepítsd a kubectl parancssori eszközt, és ha lokálisan tanulnál, használd a Minikube-ot vagy a Docker Desktop beépített Kubernetes funkcióját.
Alapfogalmak
Pod – egy vagy több konténer együtt, a legkisebb egység.
Deployment – pod-ok sablonja, kezeli a replikák számát, a frissítéseket.
Service – stabil hálózati címet ad a pod-oknak (mert a pod-ok jönnek-mennek).
ConfigMap / Secret – konfigurációs adatok és jelszavak tárolása.
Ingress – külső forgalom irányítása a service-ekhez (pl. domain alapján).
Használj multi-stage build-eket a Dockerben, hogy a production image kicsi legyen (pl. builder stage + node:alpine).
Ne futtasd root-ként a konténereket – adj meg USER node a Dockerfile-ban.
Health check-ek – Kubernetesben állíts be livenessProbe és readinessProbe értékeket, hogy a K8s tudja, mikor indítsa újra a pod-ot.
Használd a kubectl port-forward parancsot fejlesztéshez: kubectl port-forward pod/my-app-pod 3000:3000.
Tanulj Helm-et – a Kubernetes csomagkezelője, amivel sablonosíthatod a konfigokat.
Ha most kezded, ne ijedj meg a sok új fogalomtól. Kezdd a Dockerrel, építs pár egyszerű konténert, próbáld ki a Docker Compose-t, és csak utána ugorj a Kubernetes-be. Minden perc megéri, mert a konténerizáció tudása ma már alap elvárás a legtöbb fejlesztői pozícióban.
Kérdésed van? Vagy valami nem működik? Írd meg kommentben, segítek! 🐳