Ü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 atail -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, alatest
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, aCtrl+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 aCtrl+P
, majdCtrl+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