A leggyakoribb Docker parancsok, amiket nap mint nap használni fogsz

Üdvözöllek a modern szoftverfejlesztés egyik alapkövének, a Dockernek a világában! Ha valaha is hallottad azt a mondatot, hogy „Nálam működik!”, de másoknál mégsem, akkor a Docker az a varázslat, ami egyszer s mindenkorra megoldja ezt a problémát. Lényegében a Docker lehetővé teszi, hogy az alkalmazásaidat és az összes függőségüket úgynevezett konténerekbe csomagold, garantálva, hogy bárhol, bármilyen környezetben pontosan ugyanúgy fognak futni. Ez a cikk egy átfogó útmutatót nyújt a leggyakoribb Docker parancsokhoz, amelyeket nap mint nap használni fogsz, hogy magabiztosan navigálhass a konténerizáció tengerében.

Miért pont a Docker? A konténerizáció előnyei

Mielőtt belevetnénk magunkat a parancsok erdejébe, érdemes megérteni, miért vált ennyire népszerűvé a Docker. A hagyományos virtuális gépekhez képest a konténerek sokkal könnyebbek, gyorsabban indulnak, és sokkal kevesebb erőforrást igényelnek. Ez azért van, mert a konténerek megosztják a gazdarendszer (host) operációs rendszerét, csak a szükséges alkalmazásokat és a hozzájuk tartozó függőségeket tartalmazzák. Ez a megközelítés számos előnnyel jár:

  • Konzisztencia: Az alkalmazásod ugyanúgy fog futni a fejlesztői gépeden, a tesztkörnyezetben és a production szerveren.
  • Izoláció: Minden konténer izoláltan fut, így az egyikben történő változások vagy hibák nem befolyásolják a többit.
  • Portabilitás: Egy Docker konténer bárhová áthelyezhető, ahol fut Docker.
  • Skálázhatóság: Könnyedén skálázhatod az alkalmazásaidat konténerek hozzáadásával vagy eltávolításával.
  • Gyorsabb fejlesztési ciklus: A fejlesztők sokkal gyorsabban tudnak környezeteket létrehozni és rombolni.

A Docker ökoszisztéma alapelemei

A parancsok megértéséhez néhány alapfogalommal tisztában kell lenned:

  • Image (Kép): Egy olvasási jogú sablon, amely tartalmazza az alkalmazáshoz szükséges operációs rendszert, szoftvereket, könyvtárakat és kódokat. Ebből hozzuk létre a konténereket.
  • Container (Konténer): Egy futó példány egy image-ből. Ez az, ahol az alkalmazásod él és lélegzik.
  • Dockerfile: Egy szöveges fájl, amely tartalmazza azokat az utasításokat, amelyek alapján a Docker felépít egy image-et.
  • Registry (Nyilvántartás): Egy tároló, ahol a Docker image-eket tárolják (pl. Docker Hub).
  • Volume (Kötet): Lehetővé teszi, hogy a konténer adatokat tároljon a gazdarendszer fájlrendszerében, így az adatok megmaradnak, még ha a konténer törlődik is.
  • Network (Hálózat): Lehetővé teszi, hogy a konténerek kommunikáljanak egymással és a külvilággal.

A leggyakoribb Docker parancsok részletesen

Most pedig lássuk azokat a parancsokat, amelyeket a leggyakrabban fogsz használni a mindennapi munkád során.

1. Információgyűjtés

Mielőtt bármit is csinálnánk, jó, ha tudjuk, mi fut a rendszerünkön.

  • docker --version
    Ez a parancs kiírja a telepített Docker verziószámát. Gyakran hasznos ellenőrizni, hogy a megfelelő verzióval dolgozol-e.
  • docker info
    Részletesebb információkat ad a Docker daemonról, például a konténerek, image-ek, tárolók számáról, és egyéb rendszerbeállításokról. Ideális az első lépéshez, ha valamilyen problémával szembesülsz.

2. Image-ek kezelése

Az image-ek képezik a konténerek alapját, így elengedhetetlen a kezelésük.

  • docker pull [image_neve]:[tag]
    Ezzel a paranccsal tudsz letölteni egy image-et egy registry-ből (alapértelmezetten a Docker Hub-ról) a helyi gépedre. Ha a :[tag] részt elhagyod, akkor az alapértelmezett latest tag-gel tölti le az image-et.

    Példa: docker pull ubuntu:20.04
    Ez letölti az Ubuntu 20.04-es verziójú image-et.
  • docker images vagy docker image ls
    Kilistázza az összes helyileg tárolt Docker image-et. Láthatod a nevüket, tag-jüket, image ID-jukat, méretüket és azt, hogy mikor készültek.
  • docker build -t [image_neve]:[tag] .
    Ez a parancs egy Dockerfile alapján épít fel egy új image-et. A -t flag adja meg az elkészült image nevét és tag-jét. A . (pont) jelzi, hogy a Dockerfile a jelenlegi könyvtárban található.

    Példa: docker build -t my-app:1.0 .
    Ez felépít egy my-app:1.0 nevű image-et a jelenlegi könyvtárban található Dockerfile alapján.
  • docker rmi [image_neve]:[tag] vagy docker rmi [image_ID]
    Törli a megadott image-et a helyi gépről. Csak akkor tudsz törölni egy image-et, ha egyetlen konténer sem használja azt.

    Példa: docker rmi ubuntu:20.04

3. Konténerek kezelése

Ezek azok a parancsok, amelyekkel a futó alkalmazásaidat menedzseled.

  • docker run [opciók] [image_neve]:[tag] [parancs]
    Ez a parancs az egyik legfontosabb. Létrehoz és elindít egy konténert egy adott image-ből. Számos hasznos opcióval rendelkezik:

    • -d (--detach): A konténert a háttérben futtatja, nem foglalja le a terminált.

      Példa: docker run -d nginx
    • -p [host_port]:[container_port] (--publish): Portok leképezése. A gazdarendszer egy portját összekapcsolja a konténer egy portjával, így a konténerben futó alkalmazás elérhetővé válik a külvilág számára.

      Példa: docker run -d -p 80:80 nginx (elérhetővé teszi az Nginx-et a gazdarendszer 80-as portján)
    • -v [host_path]:[container_path] (--volume): Volume-ok csatolása. Lehetővé teszi, hogy a konténer hozzáférjen a gazdarendszer fájljaihoz, vagy hogy a konténer adatai megmaradjanak a konténer törlése után is.

      Példa: docker run -d -p 80:80 -v C:my_website:/usr/share/nginx/html nginx
    • --name [konténer_neve]: Egyedi nevet ad a konténernek, ami megkönnyíti a hivatkozást rá.

      Példa: docker run -d --name my-webserver -p 80:80 nginx
    • --rm: A konténer automatikusan törlődik, miután leáll. Ideális ideiglenes konténerekhez.

      Példa: docker run --rm ubuntu echo "Hello Docker!"
    • -it (-i --interactive -t --tty): Interaktív terminált biztosít a konténerhez. Gyakran használják shell elindításához.

      Példa: docker run -it ubuntu bash (elindít egy bash shell-t az Ubuntu konténerben)
    • --env [kulcs]=[érték] vagy -e: Környezeti változók átadása a konténernek.

      Példa: docker run -e MY_VARIABLE=value my-app
  • docker ps
    Listázza az összes futó konténert. Láthatod a konténer ID-ját, az image nevét, a parancsot, ami fut, a létrehozás idejét, a státuszát, a portokat és a nevet.
  • docker ps -a (--all)
    Listázza az összes konténert, beleértve azokat is, amelyek leálltak.
  • docker stop [konténer_ID vagy név]
    Leállítja a megadott konténert. A Docker küld egy SIGTERM jelet a fő folyamatnak, vár egy rövid ideig (alapértelmezetten 10 másodperc), majd ha szükséges, SIGKILL jelet küld.

    Példa: docker stop my-webserver
  • docker start [konténer_ID vagy név]
    Elindít egy korábban leállított konténert.

    Példa: docker start my-webserver
  • docker restart [konténer_ID vagy név]
    Leállít és újraindít egy konténert.

    Példa: docker restart my-webserver
  • docker rm [konténer_ID vagy név]
    Törli a megadott konténert. Ahhoz, hogy törölhess egy konténert, először le kell állítanod.

    Példa: docker rm my-webserver
  • docker rm -f [konténer_ID vagy név] (--force)
    Ezzel az opcióval erővel törölhetsz egy futó konténert is (először leállítja, majd törli). Óvatosan használd!
  • docker exec -it [konténer_ID vagy név] [parancs]
    Futtat egy parancsot egy már futó konténeren belül. Az -it opcióval interaktív terminált kapsz, ami ideális hibakereséshez vagy a konténer belsejének megtekintéséhez.

    Példa: docker exec -it my-webserver bash (elindít egy bash shell-t a futó Nginx konténerben)
  • docker logs [konténer_ID vagy név]
    Megjeleníti egy konténer standard output (stdout) és standard error (stderr) naplóit. Hasznos az alkalmazás viselkedésének ellenőrzésére vagy hibakeresésre. A -f (--follow) opcióval valós időben követheted a logokat.

    Példa: docker logs -f my-webserver
  • docker inspect [konténer_ID vagy név vagy image_ID vagy név]
    Részletes, alacsony szintű információkat nyújt egy Docker objektumról (konténer, image, volume, network). JSON formátumban adja vissza az adatokat, beleértve a hálózati beállításokat, volume-okat, konfigurációt stb.

    Példa: docker inspect my-webserver

4. Hálózat és Volume-ok kezelése

A konténerek közötti kommunikáció és az adatok perzisztenciája kulcsfontosságú.

  • docker network ls
    Kilistázza az összes Docker hálózatot. A konténerek alapértelmezetten a bridge hálózaton vannak, de létrehozhatsz saját hálózatokat is, hogy a konténerek könnyebben kommunikálhassanak egymással név alapján.
  • docker network create [hálózat_neve]
    Létrehoz egy új, felhasználó által definiált hálózatot.

    Példa: docker network create my-app-network
  • docker volume ls
    Kilistázza az összes Docker volume-ot.
  • docker volume create [volume_neve]
    Létrehoz egy új volume-ot.

    Példa: docker volume create my-data

5. Tisztítás és Optimalizálás

A Docker objektumok (konténerek, image-ek, volume-ok, hálózatok) idővel felhalmozódhatnak, foglalva a tárhelyet. Ez a parancs egy igazi életmentő!

  • docker system prune
    Ez a parancs törli az összes leállított konténert, a nem használt hálózatokat, a „dangling” (nem tag-elt és nem konténerhez kapcsolt) image-eket, és opcionálisan a build cache-t.

    Példa: docker system prune -a --volumes
    A -a (--all) opció a nem használt image-eket is törli (még azokat is, amiknek van tag-je, de nem kapcsolódnak futó konténerhez), a --volumes pedig a nem használt volume-okat is eltávolítja. Nagyon hasznos a tárhely felszabadítására!

6. Többkonténeres alkalmazások: Docker Compose (rövid említés)

Bár a docker parancsok önmagukban is erősek, komplexebb, több konténerből álló alkalmazások (pl. webalkalmazás adatbázissal és cache-sel) esetén a Docker Compose nyújt elegáns megoldást. Ez egy különálló eszköz, amely lehetővé teszi, hogy egyetlen YAML fájlban definiáld és egyetlen paranccsal (docker-compose up) indítsd el, állítsd le és menedzseld a teljes alkalmazás stack-et.

  • docker-compose up -d
    Elindítja az összes szolgáltatást a docker-compose.yml fájlban definiált módon. A -d opcióval a háttérben futnak.
  • docker-compose down
    Leállítja és eltávolítja az összes szolgáltatást és hálózatot, amelyet a docker-compose up hozott létre.

A Docker Compose mélyebb ismerete egy külön cikk témája lehetne, de fontos tudni a létezéséről, mivel a valós életbeli alkalmazások gyakran igénylik a használatát.

Gyakorlati tippek és bevált gyakorlatok

  • Rendszeres tisztítás: Használd a docker system prune parancsot rendszeresen, különösen fejlesztés során, hogy elkerüld a merevlemez túltelítődését.
  • Értelmes nevek: Adhatsz konténereknek és image-eknek beszédes neveket és tag-eket (--name a konténereknek, -t a buildeknél), hogy könnyebben azonosítsd őket.
  • Ne futtass root-ként: Lehetőség szerint ne futtasd az alkalmazásaidat root felhasználóként a konténerben a biztonsági kockázatok minimalizálása érdekében.
  • Minimalista image-ek: Használj minél kisebb alap image-eket (pl. Alpine Linux alapú image-eket), hogy csökkentsd az image méretét és a biztonsági felületet.
  • Verziózás: Mindig add meg az image-ek tag-jét (pl. node:16-alpine a node:latest helyett) a konzisztencia és reprodukálhatóság érdekében.

Konklúzió

A Docker az egyik legfontosabb eszköz a modern szoftverfejlesztő eszköztárában. Az itt bemutatott parancsok jelentik az alapot, amire építhetsz. Gyakorlással és folyamatos felfedezéssel hamarosan magabiztosan fogsz navigálni a konténerizáció világában. Ne feledd, a kulcs a kísérletezésben és a parancsok megértésében rejlik. Kezdd el használni őket, fedezd fel az opciókat, és hamarosan a Docker a leghűségesebb társad lesz a fejlesztésben és az üzemeltetésben egyaránt. Jó konténerizálást!

Leave a Reply

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