# 🐳 Docker
## 👓 Fontosabb fogalmak
**Dockerfile:** Egy szöveges "recept", ami leírja, hogyan kell felépíteni a konténerünket *(milyen alaprendszerből induljon, milyen csomagokat telepítsen, milyen fájlokat másoljon be, milyen parancsot futtasson indításkor)*.
**Image *(Kép)*:** A Dockerfile alapján létrehozott "sablon" vagy "tervrajz". Ez tartalmaz mindent, ami az alkalmazás futtatásához kell. Nem változik. Maga a "becsomagolt" állapot.
**Container *(Konténer)*:** Az Image-ből elindított, futó példány. Ez már egy élő, futó folyamat, amivel interakcióba lehet lépni. Egy Image-ből több Container-t is indíthatunk.
**Docker Hub:** Egy online "könyvtár" (registry), ahol rengeteg előre elkészített Image-t találhatunk (pl. web szerverekhez, adatbázisokhoz, programozási nyelvekhez).
## 👨🏼💻 Docker parancsok
### 📥 Telepítés
sudo apt install docker.io docker-compose-v2 -y
**Felhasználó hozzáadása a docker csoporthoz** \\
Így nem kell `sudo` a docker parancsok elé.
sudo groupadd docker
sudo usermod -aG docker $USER
Jelentkezz be újra a felhasználóval.
----
### 📐 Image kezelés
* **Docker image letöltése**
docker pull
* **Letöltött Image-k listázása**
docker image ls -a
* **Image törlése**
docker rmi
----
### 🧰 Konténer kezelés
* **Minden konténer listázása**
docker container ls -a
* **Csak a futó konténerek listázása**
docker ps
* **Konténer futtatása**
docker run --name -d -p 8080:80 image-neve
ahol:
**docker run**: *Parancs egy új konténer indítására.*\\
**--name **: *Nevet adunk a konténernek (könnyebb hivatkozni rá).*\\
**-d (detach)**: *A konténer a háttérben fusson, ne foglalja le a terminált.*\\
**-p 8080:80 (publish)**: *Port átirányítás. Például a gépünk (host) 8080-as portjára érkező kéréseket irányítsa át a konténeren belül futó webszerver 80-as portjára (ez a HTTP alapértelmezett portja).*\\
**image-neve:** *Megadjuk, melyik image-ből induljon a konténer.)*
* **Konténer leállítása**
docker stop
* **Konténer törlése**
docker rm
----
### 🕵🏻♂️ Hibakeresés
docker container logs
----
## 📜 Néhány egyszerű példa
{{topic>docker +tutorial}}
----
## 🧾 Docker Compose
Eddig minden konténert egy hosszú `docker run` paranccsal indítottunk. De mi van, ha például egy weboldalhoz egyszerre kell egy webszerver, egy adatbázis és egy PHP feldolgozó is? Három külön terminálablakban futtatnánk őket? Hogyan beszélgetnek egymással?
Erre a **Docker Compose** a megoldás. Ez az "Infrastructure as Code" (IaC) alapja: ahelyett, hogy parancsokat gépelnénk, egy szöveges fájlban (**compose.yaml**) írjuk le, hogyan nézzen ki a rendszerünk.
**Előnyei:**
* **Reprodukálható:** A fájlt átküldöd a társadnak, beírja, hogy `docker compose up`, és ugyanaz fut nála is.
* **Átlátható:** Egy fájlban látod a teljes architektúrát.
* **Hálózatkezelés:** Automatikusan létrehoz egy belső hálózatot, ahol a konténerek a nevük alapján megtalálják egymást.
**További leírás:**
* [[docker-compose|🧾 Docker Compose]] részletesen, példákkal
----
{{tag>docker}}