Docker konténerek futtatása egy VPS szerveren

Üdvözöljük a digitális infrastruktúra világában! Manapság egyre népszerűbbé válik a saját virtuális privát szerver (VPS) használata különböző webes alkalmazások, szolgáltatások vagy akár személyes projektek üzemeltetésére. A hatékonyság és a rugalmasság jegyében pedig a Docker konténerek forradalmasították az alkalmazások telepítését, futtatását és skálázását. De hogyan hozzuk össze ezt a két erőteljes technológiát? Ez a cikk részletesen bemutatja, hogyan futtathat Docker konténereket egy VPS szerveren, a kezdeti beállításoktól a fejlettebb menedzsmentig.

Miért érdemes Dockert használni VPS-en?

A VPS szerverek nagyszerű alapot biztosítanak, hiszen dedikált erőforrásokat és teljes kontrollt kínálnak a környezet felett. A Docker konténerek pedig erre a stabil alapra építve számos előnyt nyújtanak:

  • Izoláció: Minden konténer saját, elszigetelt környezetben fut, ami minimalizálja az ütközéseket és biztosítja az alkalmazások stabilitását. Ha egy alkalmazás hibásan működik, az nem befolyásolja a többit.
  • Hordozhatóság: A Docker image-ek bárhol futtathatók, ahol Docker van telepítve, legyen szó fejlesztői gépről, tesztkörnyezetről vagy éles VPS szerverről. Ezzel megszűnik a „nálam működik” probléma.
  • Hatékonyság: A konténerek könnyebbek, mint a virtuális gépek, kevesebb erőforrást fogyasztanak, így több alkalmazást futtathatunk egyetlen VPS-en.
  • Gyors telepítés és skálázás: Az alkalmazások percek alatt telepíthetők és konfigurálhatók, és ha megnövekszik a forgalom, könnyedén skálázhatók.
  • Verziókövetés és visszaállás: A Docker image-ek verziózhatók, így könnyedén visszatérhetünk egy korábbi, stabil verzióhoz, ha valami nem a terv szerint alakul.

A konténerizáció tehát egy modern és hatékony megközelítés az alkalmazások menedzselésére, különösen egy erőforrás-korlátozott, de rugalmas VPS környezetben.

Mire lesz szükséged az induláshoz?

Mielőtt belevágnánk a technikai részletekbe, győződj meg róla, hogy a következőkre rendelkezel:

  • Egy VPS szerver: Válassz egy megbízható szolgáltatót (pl. DigitalOcean, Linode, Hetzner, Vultr, AWS Lightsail). Az operációs rendszer szempontjából az Ubuntu LTS verziók (pl. Ubuntu 22.04 LTS) a legelterjedtebbek és leginkább támogatottak. Ami az erőforrásokat illeti, egy alap, 1-2 GB RAM-mal és 1-2 CPU maggal rendelkező VPS elegendő lehet a legtöbb kezdeti projekthez.
  • SSH hozzáférés: Ehhez szükséged lesz a VPS IP-címére, a root jelszavadra vagy egy SSH kulcsra.
  • Alapvető Linux parancssori ismeretek: Nem kell profi rendszergazdának lenned, de az alapvető parancsok (navigálás, fájlműveletek, csomagkezelés) ismerete elengedhetetlen.

VPS kiválasztása és kezdeti beállítása

1. VPS szolgáltató és operációs rendszer kiválasztása

Mint említettük, számos kiváló VPS szolgáltató létezik. Fontos szempont lehet az ár, a szerver elhelyezkedése (földrajzi közelség a célközönséghez), az ügyfélszolgálat minősége és a felhőplatform funkcionalitása. A legtöbb szolgáltató könnyedén lehetővé teszi a népszerű Linux disztribúciók, mint az Ubuntu telepítését, amit mi is fogunk használni.

2. Kapcsolódás a VPS-hez SSH-n keresztül

Nyisd meg a terminált (Linux/macOS) vagy egy SSH klienst (Windows, pl. PuTTY, Windows Terminal WSL-lel) és lépj be a szerverre:

ssh root@a_te_vps_ip_cimed

Ha jelszót kér, add meg a root jelszavadat. Az első bejelentkezéskor érdemes lehet egy SSH kulcsot beállítani, ami biztonságosabb és kényelmesebb autentikációt tesz lehetővé.

3. Rendszer frissítése és biztonsági beállítások

Az első és legfontosabb lépés a rendszer naprakésszé tétele:

sudo apt update && sudo apt upgrade -y

Ezután hozz létre egy új, nem root felhasználót a mindennapi használatra, ami növeli a biztonságot:

sudo adduser ujfelhasznalo
sudo usermod -aG sudo ujfelhasznalo

Jelentkezz ki a root felhasználóból, majd jelentkezz be az új felhasználóval. A root bejelentkezést érdemes letiltani az /etc/ssh/sshd_config fájlban a PermitRootLogin no sor beállításával, majd az SSH szolgáltatás újraindításával.

4. Tűzfal beállítása (UFW)

A tűzfal elengedhetetlen a szerver védelméhez. Az Ubuntu beépített Uncomplicated Firewall (UFW) nevű eszközét fogjuk használni:

sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status

Ez engedélyezi az SSH kapcsolatokat, majd aktiválja a tűzfalat. Később, amikor konténereket futtatsz, engedélyezned kell a szükséges portokat.

Docker telepítése a VPS-re

A Docker telepítése viszonylag egyszerű. A hivatalos Docker dokumentáció a legmegbízhatóbb forrás, de általában a következő lépésekkel telepíthető a Docker Engine Ubuntu rendszereken:

1. Korábbi Docker verziók eltávolítása (ha vannak)

Ha korábban telepítettél Dockert, érdemes eltávolítani a régebbi verziókat:

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt remove $pkg; done

2. Docker telepítése a hivatalos repository-ból

Telepítsük a szükséges csomagokat:

sudo apt update
sudo apt install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

Adjuk hozzá a Docker repository-t az APT forrásaihoz:

echo 
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu 
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | 
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update

Végül telepítsük a Docker Engine-t, a Docker CLI-t és a Containerd-t:

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

3. Felhasználó hozzáadása a docker csoporthoz

Alapértelmezetten a Docker parancsok futtatásához root jogosultság szükséges (sudo). Ahhoz, hogy ezt elkerüljük, add hozzá a felhasználódat a docker csoporthoz:

sudo usermod -aG docker ${USER}

Jelentkezz ki, majd újra be az SSH-n keresztül, hogy a változások érvénybe lépjenek. Ezután már sudo nélkül is futtathatod a Docker parancsokat.

4. Docker telepítés ellenőrzése

Futtass egy egyszerű konténert a telepítés ellenőrzéséhez:

docker run hello-world

Ha a kimenet egy üdvözlő üzenet, akkor sikeresen telepítetted a Dockert!

Alapvető Docker parancsok és fogalmak

Mielőtt konténereket futtatnánk, ismerkedjünk meg néhány alapfogalommal és parancsgal:

  • Image (kép): Ez egy csak olvasható sablon, amely tartalmazza az alkalmazáshoz szükséges kódot, futásidejű környezetet, rendszereszközöket, könyvtárakat és függőségeket. Gondolj rá úgy, mint egy program telepítőjére. A Docker Hub a képek legnagyobb nyilvános tárháza.
  • Container (konténer): Egy image futó példánya. Amikor futtatsz egy image-t, az egy konténerként életre kel, elszigetelt környezetben. Ez az, ahol az alkalmazásod valóban él és dolgozik.

Néhány gyakran használt parancs:

  • docker pull <image_név>: Letölt egy image-t a Docker Hub-ról.
  • docker run <image_név>: Futtat egy konténert egy adott image-ből.
  • docker ps: Listázza az éppen futó konténereket. A -a kapcsolóval az összes (leállítottat is) konténert megmutatja.
  • docker stop <konténer_azonosító_vagy_név>: Leállít egy futó konténert.
  • docker rm <konténer_azonosító_vagy_név>: Töröl egy leállított konténert.
  • docker rmi <image_azonosító_vagy_név>: Töröl egy image-t.
  • docker images: Listázza a helyben tárolt image-eket.
  • docker logs <konténer_azonosító_vagy_név>: Megmutatja egy konténer logjait.

Első konténerünk futtatása: Egy Nginx weboldal

Futtassunk egy Nginx web szervert, ami tökéletes példa az első konténerizált alkalmazásunkra.

docker run -d -p 80:80 --name my-nginx nginx

Magyarázzuk meg a parancsot:

  • docker run: Indíts egy új konténert.
  • -d (detached): Futtassa a konténert a háttérben, ne foglalja le a terminált.
  • -p 80:80: Port mapping. Ez azt mondja a Dockernek, hogy a host (a VPS) 80-as portjára érkező forgalmat irányítsa át a konténer 80-as portjára. Ez elengedhetetlen, hogy a weboldalad elérhető legyen a külvilág számára.
  • --name my-nginx: Adjunk egy könnyen azonosítható nevet a konténernek. Ez segít majd a későbbi menedzselésben.
  • nginx: Ez az az image, amit használni akarunk. A Docker automatikusan letölti a legújabb nginx image-t a Docker Hub-ról, ha még nincs meg helyben.

Most pedig engedélyeznünk kell a 80-as portot a tűzfalon (ha még nem tettük meg):

sudo ufw allow 80/tcp
sudo ufw reload

Nyisd meg a böngésződet, és navigálj a VPS-ed IP-címére. Látnod kell az Nginx alapértelmezett üdvözlőoldalát! Gratulálunk, sikeresen futtattad az első weboldalad Docker konténerben!

Adatperzisztencia: Konténer adatainak megőrzése

A fenti Nginx példában, ha törölnénk a konténert, minden adat (jelen esetben az Nginx konfigurációja és a weboldal fájljai) elveszne. Ezért az adatperzisztencia kulcsfontosságú. A Docker két fő módon teszi lehetővé az adatok megőrzését:

1. Bind Mounts (kötési csatolások)

Ez a módszer egy fájlt vagy könyvtárat csatol a host rendszerből (VPS-edről) a konténerbe. Ha a host fájljai megváltoznak, azok azonnal tükröződnek a konténerben. Ideális fejlesztésre vagy konfigurációs fájlok kezelésére.

Példa: Hozzunk létre egy saját Nginx HTML fájlt:

mkdir ~/my-nginx-website
echo "<h1>Hello from Docker VPS!</h1>" > ~/my-nginx-website/index.html

Most állítsuk le és töröljük a korábbi Nginx konténert:

docker stop my-nginx
docker rm my-nginx

Futtassuk újra az Nginx-et a saját fájljainkkal:

docker run -d -p 80:80 --name my-nginx -v ~/my-nginx-website:/usr/share/nginx/html nginx

Itt a -v ~/my-nginx-website:/usr/share/nginx/html rész mondja meg a Dockernek, hogy a VPS-en található ~/my-nginx-website könyvtárat csatolja be a konténer /usr/share/nginx/html útvonalára, ahol az Nginx az alapértelmezett weboldal fájljait keresi.

2. Docker Managed Volumes (Docker által kezelt volume-ok)

Ezeket a volume-okat a Docker hozza létre és kezeli. Előnyük, hogy platformfüggetlenek, és a Docker kezeli a fájlrendszerstruktúrát. Ideálisak adatbázisokhoz vagy olyan adatokhoz, amelyeknek nem kell könnyen hozzáférhetőnek lenniük a host rendszeren.

docker volume create my-nginx-data
docker run -d -p 80:80 --name my-nginx-volume -v my-nginx-data:/usr/share/nginx/html nginx

Ez létrehoz egy my-nginx-data nevű volume-ot, és azt csatolja be a konténerbe. Az adatok megmaradnak, még ha a konténert töröljük is, amíg a volume-ot nem töröljük explicit módon (docker volume rm my-nginx-data).

Biztonsági alapelvek Docker VPS környezetben

A biztonság mindig prioritás, különösen, ha nyilvánosan elérhető szervereket üzemeltetünk:

  • VPS alapok: Tartsd naprakészen a rendszert (apt update && apt upgrade). Használj erős jelszavakat és SSH kulcsokat. Ne használd a root felhasználót a mindennapi munkához.
  • Tűzfal (UFW): Csak a feltétlenül szükséges portokat engedélyezd. Zárj be minden más bejövő kapcsolatot.
  • Docker image-ek: Használj hivatalos, megbízható forrásból származó image-eket (Docker Hub verified publishers). Rendszeresen frissítsd a használt image-eket a legújabb biztonsági javításokkal.
  • Minimális jogok: Futtasd a konténereket a lehető legkevesebb jogosultsággal. Ne futtass konténereket root felhasználóként, ha nem muszáj.
  • Volume-ok jogosultságai: Ügyelj a bind mount-ok esetében a host rendszeren lévő könyvtárak jogosultságaira. A konténerben futó felhasználó jogai legyenek megfelelőek.
  • Forráskód ellenőrzés: Ha saját Dockerfile-t használsz, győződj meg róla, hogy csak a szükséges függőségeket és fájlokat másolja a konténerbe.

Több konténer kezelése Docker Compose segítségével

Komplexebb alkalmazások gyakran több konténerből állnak (pl. weboldal + adatbázis + cache). A Docker Compose egy kiváló eszköz ezeknek a többkonténeres alkalmazásoknak a definiálására és futtatására egyetlen fájl segítségével.

1. Mi az a Docker Compose?

A Docker Compose lehetővé teszi, hogy egy YAML fájlban (általában docker-compose.yml) definiáld a szolgáltatásaidat (konténereket), hálózataikat és volume-jaikat. Ezután egyetlen paranccsal elindíthatod, leállíthatod és menedzselheted az egész alkalmazást.

2. Telepítés

A modern Docker telepítők már tartalmazzák a Docker Compose-t is (docker compose parancsként). Ha mégsem, akkor külön telepíteni kell (régebbi verziókhoz docker-compose parancsként).

3. WordPress példa Docker Compose-zal

Képzeld el, hogy egy WordPress oldalt szeretnél üzemeltetni. Ehhez egy WordPress konténerre és egy MySQL adatbázis konténerre van szükséged. Hozz létre egy docker-compose.yml fájlt a VPS-eden:

mkdir ~/wordpress-app && cd ~/wordpress-app
# docker-compose.yml
version: '3.8'

services:
  wordpress:
    image: wordpress:latest
    container_name: wordpress
    ports:
      - "80:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: supersecretpassword
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wordpress_data:/var/www/html
    depends_on:
      - db

  db:
    image: mysql:8.0
    container_name: mysql_db
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: supersecretpassword
    volumes:
      - db_data:/var/lib/mysql

volumes:
  wordpress_data:
  db_data:

Navigálj abba a könyvtárba, ahol a docker-compose.yml fájlt létrehoztad, és futtasd:

docker compose up -d

Ez letölti a szükséges image-eket, létrehozza a hálózatokat, volume-okat és elindítja a két konténert. Most a VPS-ed IP-címén keresztül elérheted a WordPress telepítőjét. Az up parancs helyett használhatod a docker-compose up parancsot is, ha a régebbi Compose telepítésed van.

Az alkalmazás leállításához és a konténerek törléséhez (a volume-ok érintetlenül hagyásával):

docker compose down

Monitoring és karbantartás

A konténerek futtatása nem ér véget a telepítéssel. A rendszeres monitoring és karbantartás kulcsfontosságú a stabilitás és a hatékonyság fenntartásához.

  • Rendszeres frissítések: Rendszeresen frissítsd a VPS operációs rendszerét és a Docker Engine-t is.
  • Logok ellenőrzése: Használd a docker logs <konténer_név> parancsot a konténerek problémáinak feltárására.
  • Erőforrás-felhasználás: A docker stats paranccsal valós időben figyelheted a futó konténerek CPU, memória és hálózati erőforrás-felhasználását.
  • Felesleges image-ek és konténerek törlése: A felgyülemlett image-ek és konténerek feleslegesen foglalják a helyet. A docker system prune parancs törli az összes leállított konténert, a nem használt hálózatokat, a „dangling” (hivatkozás nélküli) image-eket és a „dangling” build cache-t. A -a kapcsolóval az összes nem használt image-t is törli.

Gyakori problémák és hibaelhárítás

  • Port ütközés: Ha egy konténer nem indul el port mapping hiba miatt, valószínűleg egy másik folyamat már használja azt a portot a VPS-en. Ellenőrizd a netstat -tulnp | grep <port_szám> paranccsal, melyik folyamat foglalja a portot.
  • Jogosultsági hibák (permission denied): Gyakori probléma volume-ok használatakor, különösen bind mount-ok esetén. Ellenőrizd a host rendszeren lévő mappák jogosultságait (ls -l), és győződj meg róla, hogy a konténerben futó felhasználó hozzáférhet hozzájuk.
  • Konténer nem indul el: A leggyakoribb okok közé tartozik a helytelen konfiguráció, hiányzó környezeti változók vagy hibás image. Használd a docker logs <konténer_név> parancsot a hibaüzenetek megtekintéséhez.
  • Tárhely fogyás: A rendszeres karbantartás (docker system prune) segít elkerülni ezt. Ellenőrizd a lemezhasználatot a df -h paranccsal.

Haladó tippek (röviden)

  • Reverse Proxy: Használj egy reverse proxy-t (pl. Nginx Proxy Manager, Traefik), ha több webes alkalmazást futtatsz ugyanazon a VPS-en és domain neveken keresztül szeretnéd elérni őket. Ez kezeli az SSL tanúsítványokat is (Let’s Encrypt).
  • CI/CD integráció: Automatizáld az alkalmazásaid buildelését és telepítését a VPS-re olyan eszközökkel, mint a GitLab CI/CD vagy a GitHub Actions.
  • Backup stratégiák: Tervezz be rendszeres backup-ot a volume-okról és a fontos adatokról.

Konklúzió

A Docker konténerek futtatása egy VPS szerveren egy rendkívül hatékony és modern megközelítés a webes alkalmazások üzemeltetésére. A konténerizáció rugalmasságot, izolációt és egyszerűséget hoz a telepítés és menedzsment folyamatába, miközben a VPS dedikált erőforrásokat és teljes kontrollt biztosít. Reméljük, ez az útmutató segített elindítani az utat a Docker és a VPS szerverek szinergikus világában. A lehetőségek tárháza szinte végtelen, és a megszerzett tudás alapja lesz a jövőbeli, még komplexebb projekteknek!

Leave a Reply

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük