A Docker konténerek kezelése a terminál parancssorából

Üdvözöljük a konténerizáció izgalmas világában! Ha valaha is találkozott a „működik a gépemen” problémával, vagy egyszerűen csak hatékonyabb, elszigeteltebb fejlesztési és üzemeltetési környezetre vágyott, akkor valószínűleg már hallott a Dockerről. A Docker forradalmasította a szoftverek fejlesztésének, szállításának és futtatásának módját, lehetővé téve alkalmazások és függőségeik „konténerekbe” való becsomagolását. Ezek a konténerek elszigetelten futnak, biztosítva a konzisztenciát a különböző környezetekben – legyen szó a fejlesztő laptopjáról, egy tesztkiszolgálóról vagy egy éles adatközpontról.

Bár léteznek grafikus felületek a Docker kezelésére, az igazi erő és rugalmasság a terminál parancssorából (CLI – Command Line Interface) érhető el. A parancssori eszközök ismerete elengedhetetlen a haladó felhasználók számára, hiszen ez teszi lehetővé a mélyebb interakciót a Docker démonnal, a hibakeresést, és a szkriptekbe integrált automatizálást. Ez az átfogó útmutató végigvezet a legfontosabb Docker CLI parancsokon, amelyek segítségével mesterévé válhat a konténerkezelésnek.

Alapfogalmak Rövid Áttekintése

Mielőtt belevágnánk a parancsok erdejébe, frissítsük fel az alapvető Docker fogalmakat:

  • Image (Kép): Egy olvasási jogú sablon, amely a konténer létrehozásához szükséges utasításokat tartalmazza. Például egy Ubuntu image tartalmazza az Ubuntu operációs rendszer alapjait, míg egy Nginx image az Nginx webkiszolgálót.
  • Container (Konténer): Egy futtatható példány egy image-ből. Ez az, ami elszigetelten futtatja az alkalmazást és annak függőségeit. A konténerek állapota (pl. fut, leállítva) változhat, és ideiglenesen is létezhetnek.
  • Volume (Kötet): A konténerek által generált és használt adatok perzisztens tárolására szolgáló mechanizmus. Mivel a konténerek alapvetően eldobhatóak, a volume-ok biztosítják, hogy az adatok megmaradjanak, még a konténer törlése után is.
  • Network (Hálózat): Lehetővé teszi a konténerek közötti kommunikációt, valamint a konténerek és a gazdagép hálózata közötti interakciót.

A Konténer Életciklusának Alapjai: Létrehozás és Futtatás

A Docker konténerekkel való munka gerincét a docker run parancs képezi. Ez a parancs felelős egy új konténer létrehozásáért és elindításáért egy megadott image alapján. Nézzük meg a leggyakrabban használt opcióit:

docker run [OPCIÓK] IMAGE [PARANCS] [ARGUMENTUMOK]

Főbb opciók és példák:

  • -d vagy --detach: A konténert háttérben, „detached” módban futtatja, így azonnal visszakapja a terminál vezérlését. Ez ideális webkiszolgálókhoz vagy adatbázisokhoz.
  • docker run -d --name my-nginx -p 80:80 nginx:latest

    Ez a parancs letölti (ha még nincs meg) az nginx:latest image-et, létrehoz egy my-nginx nevű konténert, ami a gazdagép 80-as portját a konténer 80-as portjára képezi le, és háttérben futtatja.

  • -it: Kombinálja az interaktív (-i) és a TTY (terminál) kiosztást (-t). Ez lehetővé teszi, hogy interaktívan kommunikáljon a konténerrel, például egy shell parancssor eléréséhez.
  • docker run -it ubuntu:latest bash

    Ez a parancs elindít egy Ubuntu konténert, és azonnal egy bash shellt nyit meg benne. A konténer leáll, amint kilép a shellből.

  • -p vagy --publish: Portleképezés. Összekapcsolja a gazdagép egy portját a konténer egy portjával. Formátuma: host_port:container_port.
  • docker run -d -p 8080:80 --name my-web-app my-custom-image

    A gazdagép 8080-as portjára érkező kérések a my-web-app konténer 80-as portjára lesznek irányítva.

  • -v vagy --volume: Volume csatlakoztatás. Lehetővé teszi adatok megőrzését és/vagy megosztását a gazdagép és a konténer között. Formátuma: /path/on/host:/path/in/container vagy volume_name:/path/in/container.
  • docker run -d -p 80:80 -v /home/user/my-website:/usr/share/nginx/html --name local-nginx nginx:latest

    Ez a parancs a gazdagép /home/user/my-website mappáját csatlakoztatja az Nginx konténer alapértelmezett weboldal mappájához. Így a konténer a helyi fájlokkal fog dolgozni.

  • --name: Nevet ad a konténernek, ami könnyebbé teszi a későbbi azonosítást és kezelést. Ha nem ad meg nevet, a Docker egy véletlenszerű nevet generál.

Konténerek Áttekintése és Kezelése

Miután elindított néhány konténert, szükség lesz a futó példányok nyomon követésére és kezelésére.

  • docker ps: Listázza a futó konténereket.
  • docker ps

    Ez megmutatja a konténer ID-t, az image-et, a parancsot, a létrehozás idejét, az állapotot, a portleképezéseket és a konténer nevét.

    • -a vagy --all: Listázza az összes konténert, futókat és leállítottakat egyaránt.
    • docker ps -a
    • -s vagy --size: Megjeleníti a konténer virtuális méretét.
    • -q vagy --quiet: Csak a konténerek ID-jét jeleníti meg. Hasznos szkriptekben.
  • docker stop [KONTÉNER_ID_VAGY_NÉV]: Leállít egy futó konténert. Ez egy „graceful” leállítás, ami időt ad az alkalmazásnak a tisztességes leállásra.
  • docker stop my-nginx
  • docker start [KONTÉNER_ID_VAGY_NÉV]: Elindít egy leállított konténert.
  • docker start my-nginx
  • docker restart [KONTÉNER_ID_VAGY_NÉV]: Újraindít egy konténert (stop, majd start).
  • docker restart my-nginx
  • docker rm [KONTÉNER_ID_VAGY_NÉV]: Eltávolít egy vagy több konténert. Egy futó konténert nem lehet eltávolítani enélkül, hogy először leállítaná, kivéve ha a -f opciót használja.
  • docker rm my-nginx
    docker rm -f stubborn-container
    docker rm $(docker ps -aq)  # Az összes konténer eltávolítása

Beszélgetés a Konténerrel: Parancsvégrehajtás és Naplózás

Néha szükség van arra, hogy belépjen egy futó konténerbe, vagy megnézze annak naplóit a hibakereséshez.

  • docker exec [OPCIÓK] KONTÉNER_ID_VAGY_NÉV PARANCS: Parancsot hajt végre egy már futó konténerben.
  • docker exec -it my-nginx bash

    Ez megnyit egy bash shellt a my-nginx konténerben, lehetővé téve, hogy a konténer környezetében dolgozzon. A -it opció itt is kritikus az interaktív sessionhöz.

    docker exec my-nginx ls -l /usr/share/nginx/html

    Ez kiírja a /usr/share/nginx/html mappa tartalmát a my-nginx konténeren belül.

  • docker logs [OPCIÓK] KONTÉNER_ID_VAGY_NÉV: Megjeleníti egy konténer standard kimeneti (stdout) és standard hibakimeneti (stderr) naplóit.
  • docker logs my-nginx
    • -f vagy --follow: Folyamatosan követi a naplók outputját (mint a tail -f).
    • docker logs -f my-nginx
    • --tail N: Csak az utolsó N sort jeleníti meg.
    • docker logs --tail 100 my-nginx

Image Kezelés: A Konténerek Alapkövei

Az image-ek a konténerek alapjai. Ezeket is a Docker CLI segítségével kezelheti.

  • docker pull IMAGE_NÉV[:TAG]: Letölt egy image-et a Docker Hub-ról (vagy más registry-ről) a helyi gépre. Ha nincs megadva tag, a latest tag-et használja.
  • docker pull ubuntu:22.04
    docker pull postgres
  • docker images: Listázza a helyi gépen lévő összes image-et.
  • docker images

    Ez megmutatja az image nevét, tag-jét, ID-jét, létrehozásának idejét és méretét.

  • docker rmi IMAGE_ID_VAGY_NÉV[:TAG]: Eltávolít egy image-et a helyi gépről. Csak akkor tud egy image-et eltávolítani, ha nincs belőle futó konténer, vagy ha a -f opciót használja.
  • docker rmi ubuntu:22.04
    docker rmi $(docker images -q) # Az összes image eltávolítása
  • docker build -t IMAGE_NÉV[:TAG] .: Hozzá létre egy image-et egy Dockerfile alapján. A . a build kontextus helyét jelöli.
  • docker build -t my-app:1.0 .

    Ez egy komplexebb téma, de fontos tudni, hogy a CLI-n keresztül történik az egyéni image-ek építése.

Adatmegőrzés: Docker Volume-ok Kezelése

A konténerek efemer természetűek. Ha töröl egy konténert, a benne lévő adatok is elvesznek. A volume-ok biztosítják az adatok perzisztens tárolását.

  • docker volume create [VOLUME_NÉV]: Létrehoz egy nevesített volume-ot.
  • docker volume create my-data
  • docker volume ls: Listázza az összes létező volume-ot.
  • docker volume ls
  • docker volume inspect [VOLUME_NÉV]: Részletes információt szolgáltat egy volume-ról, beleértve a fizikai helyét a gazdagépen.
  • docker volume inspect my-data
  • docker volume rm [VOLUME_NÉV]: Eltávolít egy volume-ot. Győződjön meg róla, hogy nincs aktív konténer, amelyik használja.
  • docker volume rm my-data

Emlékezzünk, a docker run -v paranccsal tudjuk csatlakoztatni őket a konténerekhez.

Hálózati Konfiguráció: Konténerek Összekötése

A Docker alapértelmezett hálózatot biztosít a konténereknek, de gyakran szükség van egyéni hálózatokra az elszigeteltebb, vagy komplexebb kommunikációs igények kielégítésére.

  • docker network create [HÁLÓZAT_NÉV]: Létrehoz egy új, felhasználó által definiált hálózatot.
  • docker network create my-app-network
  • docker network ls: Listázza az összes Docker hálózatot.
  • docker network ls
  • docker network inspect [HÁLÓZAT_NÉV]: Részletes információt szolgáltat egy hálózatról, beleértve a hozzá csatlakozó konténereket.
  • docker network inspect my-app-network
  • docker network connect [HÁLÓZAT_NÉV] [KONTÉNER_ID_VAGY_NÉV]: Csatlakoztat egy futó konténert egy hálózathoz.
  • docker network connect my-app-network my-nginx
  • docker network disconnect [HÁLÓZAT_NÉV] [KONTÉNER_ID_VAGY_NÉV]: Lekapcsol egy konténert egy hálózatról.
  • docker network disconnect my-app-network my-nginx

A docker run --network my-app-network ... paranccsal közvetlenül egy hálózathoz csatlakoztathatja a konténert az indításkor.

Monitoring és Hibakeresés: A Rendszer Állapotának Figyelése

Amikor valami nem működik, vagy csak figyelni szeretné a konténerek viselkedését, a Docker CLI több hasznos eszközt is kínál.

  • docker stats [KONTÉNER_ID_VAGY_NÉV]: Valós idejű erőforrás-használati statisztikákat (CPU, memória, I/O, hálózat) mutat a futó konténerekről.
  • docker stats

    Ez egy folyamatosan frissülő táblázatot jelenít meg, rendkívül hasznos a teljesítmény monitorozásához.

  • docker top [KONTÉNER_ID_VAGY_NÉV]: Megmutatja a konténeren belül futó folyamatokat. Hasonló a gazdagép top parancsához.
  • docker top my-nginx
  • docker inspect [OBJEKTUM_TÍPUSA] [ID_VAGY_NÉV]: Részletes alacsony szintű információt szolgáltat bármilyen Docker objektumról (konténer, image, volume, network). A kimenet JSON formátumban van, ami kiválóan alkalmas szkriptekbe való integrálásra.
  • docker inspect my-nginx
    docker inspect nginx:latest

Hasznos Tippek és Jó Gyakorlatok

  • Tisztítás: A Docker könnyen felhalmozhatja a nem használt image-eket, konténereket és volume-okat. A docker system prune parancs segítségével eltávolíthatja az összes leállított konténert, a nem használt hálózatokat és image-eket. A -a opcióval a nem használt image-eket is törli, a --volumes opcióval pedig a nem használt volume-okat is.
    docker system prune -a --volumes

    Ez segít felszabadítani a lemezterületet.

  • Nevek használata: Mindig használjon értelmes --name opciót a konténerekhez. Így könnyebb hivatkozni rájuk, mint a véletlenszerű ID-kre.
  • Specifikus image tagek: A latest tag használata kényelmes, de éles környezetben inkább rögzítsen egy specifikus verziót (pl. ubuntu:22.04, nginx:1.23.0), hogy elkerülje a váratlan viselkedést egy újabb verzió megjelenésekor.
  • Interaktív session megszakítása: Ha egy docker run -it paranccsal indított konténerben van, a Ctrl+C leállítja a konténert. Ha csak ki akar lépni a konténerből anélkül, hogy leállítaná, használja a Ctrl+P, majd Ctrl+Q billentyűkombinációt. Ez „detach-eli” a terminált a konténerről.
  • Docker Compose: Bár ez a cikk a tiszta Docker CLI-re fókuszál, fontos megemlíteni a Docker Compose-t. Amikor több konténerből álló alkalmazásokkal dolgozik (pl. webkiszolgáló + adatbázis + cache), a Compose leegyszerűsíti a komplex környezetek definiálását és kezelését egyetlen YAML fájl segítségével.

Összefoglalás és Következtetés

Ahogy láthatja, a Docker konténerek kezelése a terminál parancssorából rendkívül hatékony és rugalmas. A docker run, docker ps, docker stop, docker rm, docker exec és docker logs parancsok az alapkövei a mindennapi munkának, míg a volume- és hálózatkezelő, valamint a monitoring eszközök a haladóbb igényeket elégítik ki.

A Docker CLI elsajátítása felszabadítja Önt a grafikus felületek korlátaiból, és mélyebb betekintést enged a konténerizált alkalmazások működésébe. Ezáltal képessé válik komplexebb rendszerek felépítésére, hibakeresésére és automatizálására. Gyakorlással és kísérletezéssel hamarosan magabiztosan navigálhat a Docker ökoszisztémájában, és teljes mértékben kihasználhatja annak előnyeit.

Ne habozzon kipróbálni a felsorolt parancsokat a saját gépén! A legjobb módja a tanulásnak a gyakorlás. Sok sikert a konténerizáció világában!

Leave a Reply

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