Docker telepítése és használata Ubuntun fejlesztőknek

Üdvözöljük a konténerizáció izgalmas világában! Ha Ön fejlesztő, és valaha is találkozott azzal a problémával, hogy „az én gépemen működik”, akkor a Docker az a megoldás, amire várt. Ebben az átfogó útmutatóban lépésről lépésre végigvezetjük a Docker telepítésén és használatán Ubuntun, hogy alkalmazásai a jövőben garantáltan mindenhol működjenek.

Miért a Docker? A konténerizáció ereje

A fejlesztői munka során gyakran szembesülünk azzal a kihívással, hogy a különböző környezetek – legyen szó akár fejlesztői gépről, teszt szerverről vagy éles rendszerről – eltérő szoftververziókat, függőségeket vagy konfigurációkat tartalmazhatnak. Ez a „működik az én gépemen” szindróma egyik fő oka. A Docker erre kínál elegáns megoldást.

A Docker nem egy virtuális gép (VM), ami egy teljes operációs rendszert emulál, hanem egy sokkal könnyedebb technológia. Lehetővé teszi alkalmazásaink és azok összes függőségének – könyvtárak, futtatókörnyezetek, konfigurációs fájlok – becsomagolását egyetlen, önálló egységbe, amit konténernek hívunk. Ez a konténer garantálja, hogy az alkalmazás pontosan ugyanúgy fog futni bármilyen Docker-kompatibilis környezetben.

A Docker legfőbb előnyei fejlesztők számára:

  • Reprodukálhatóság és konzisztencia: A Docker konténer biztosítja, hogy az alkalmazás pontosan ugyanazokkal a függőségekkel és konfigurációval indul el mindenhol.
  • Izoláció: Az alkalmazások el vannak szigetelve egymástól és a gazda rendszertől, így több projekt is futtatható ugyanazon a gépen.
  • Gyors fejlesztési ciklus: A konténerek gyorsabban indulnak és állnak le, felgyorsítva a fejlesztési és tesztelési folyamatokat.
  • Portabilitás: Egy konténer bárhol futtatható, ahol Docker van telepítve.
  • Egyszerűsített telepítés: Az alkalmazások telepítése jelentősen leegyszerűsödik, mivel a Docker image tartalmaz minden szükséges komponenst.

A Docker telepítése Ubuntun

A Docker telepítése Ubuntun viszonylag egyszerű folyamat, de fontos, hogy a hivatalos repository-ból történjen, hogy a legfrissebb és legbiztonságosabb verziót kapjuk.

1. Rendszerfrissítés és előfeltételek telepítése

Nyisson egy terminált (Ctrl+Alt+T) és futtassa a következő parancsokat:

sudo apt update
sudo apt upgrade -y
sudo apt install ca-certificates curl gnupg lsb-release -y

2. A Docker GPG kulcs hozzáadása

A Docker hivatalos repository-jának használatához hozzá kell adnunk a GPG kulcsát a rendszerünkhöz:

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

3. A Docker repository hozzáadása

Most adjuk hozzá a Docker APT repository-ját az Ubuntu szoftverforrásaihoz:

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

4. A Docker Engine telepítése

Frissítsük az APT csomaglistáját, majd telepítsük a Docker Engine-t:

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

5. A telepítés ellenőrzése

Ellenőrizzük, hogy a Docker sikeresen települt és fut-e a „hello-world” konténer futtatásával:

sudo docker run hello-world

Ha egy üdvözlő üzenetet lát, a Docker megfelelően működik.

6. Docker használata sudo nélkül (ajánlott fejlesztőknek)

Adja hozzá felhasználóját a docker csoporthoz, hogy sudo nélkül is futtathasson Docker parancsokat:

sudo usermod -aG docker $USER

A változtatások érvényesüléséhez jelentkezzen ki, majd újra be, vagy indítsa újra a rendszert. Ezután próbálja meg újra a hello-world futtatását sudo nélkül.

Alapvető Docker parancsok és fogalmak

Ismerkedjünk meg az alapvető parancsokkal és fogalmakkal.

Image-ek (Képek) és Konténerek

  • Image (Kép): Egy Docker image egy előre összeállított, futtatható csomag, ami tartalmazza az alkalmazáshoz szükséges kódot és függőségeket. Statikus, írásvédett sablon.
  • Konténer: Egy konténer egy futó image példány. Ez egy izolált környezet, ahol az alkalmazásunk fut.

Gyakori Docker CLI parancsok:

  • docker pull [image-név]: Letölt egy image-et. (pl. docker pull ubuntu)
  • docker run [image-név]: Létrehoz és elindít egy konténer-t. (pl. docker run -d -p 80:80 nginx)
  • docker ps: Kilistázza a futó konténer-eket (-a opcióval az összeset).
  • docker images: Kilistázza a helyben tárolt image-eket.
  • docker stop [konténer-ID vagy név]: Leállít egy futó konténer-t.
  • docker start [konténer-ID vagy név]: Elindít egy leállított konténer-t.
  • docker rm [konténer-ID vagy név]: Töröl egy leállított konténer-t.
  • docker rmi [image-ID vagy név]: Töröl egy image-et.
  • docker logs [konténer-ID vagy név]: Megjeleníti egy konténer naplóit.
  • docker exec -it [konténer-ID vagy név] bash: Belép egy futó konténer-be.

Volume-ok (Kötetek) – Perzisztens adattárolás

A konténerek alapvetően efemerek, az adatok elvesznek leálláskor. Az adatok perzisztens tárolására volume-okat használunk.

docker run -d -p 80:80 -v my_nginx_data:/etc/nginx/conf.d nginx

Itt a my_nginx_data nevű Docker volume-ot csatoljuk az Nginx konténer /etc/nginx/conf.d könyvtárához.

Hálózatkezelés

A Docker alapértelmezésben biztosít hálózatot, de saját hálózatokat is létrehozhatunk a konténerek közötti néven alapuló kommunikációhoz.

docker network create my_app_network
docker run -d --name db --network my_app_network postgres
docker run -d --name web --network my_app_network -p 8080:80 my_web_app

A web konténer a db néven éri el a PostgreSQL konténert a my_app_network hálózaton belül.

Dockerfile-ok: Saját Image-ek építése

A Dockerfile egy szöveges fájl, amely utasításokat tartalmaz a Docker image építéséhez. Ez a Docker egyik legfontosabb része a fejlesztők számára, mivel lehetővé teszi a környezet precíz definiálását és automatizálását.

Példa Dockerfile-ra (Node.js alkalmazás)

Íme egy Dockerfile egy egyszerű Node.js alkalmazáshoz:

# Alap image
FROM node:18-alpine

# Munkakönyvtár beállítása
WORKDIR /app

# Függőségek másolása és telepítése
COPY package.json package-lock.json ./
RUN npm install

# Az alkalmazás fájljainak másolása
COPY . .

# Port deklarálása
EXPOSE 3000

# Indító parancs
CMD ["node", "app.js"]

Image építése Dockerfile-ból:

Navigáljon abba a mappába, ahol a Dockerfile található, majd futtassa:

docker build -t my-nodejs-app:1.0 .

A -t opcióval adja meg az image nevét és címkéjét, a . a jelenlegi könyvtárra utal.

Docker Compose: Többkonténeres alkalmazások

Amikor alkalmazásunk több szolgáltatásból áll, a Docker Compose nyújt elegáns megoldást a több konténer együttes kezelésére és definiálására egyetlen YAML fájlban (docker-compose.yml).

Példa docker-compose.yml fájlra (Web app + PostgreSQL)

version: '3.8'

services:
  web:
    build: .
    ports:
      - "80:80"
    volumes:
      - .:/app
    depends_on:
      - db
    environment:
      DATABASE_URL: postgres://user:password@db:5432/mydatabase

  db:
    image: postgres:13
    environment:
      POSTGRES_DB: mydatabase
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:

Docker Compose parancsok:

  • docker compose up: Elindítja és létrehozza az összes szolgáltatást. A -d opcióval a háttérben futtatja őket.
  • docker compose down: Leállítja és eltávolítja a konténereket (-v opcióval a volume-okat is törli).
  • docker compose ps: Kilistázza a Docker Compose által felügyelt konténer-eket.

Docker legjobb gyakorlatok fejlesztőknek

A hatékony Docker használat érdekében érdemes néhány bevált gyakorlatot követni:

  • Kisebb image-ek: Használjon minél kisebb alap image-eket (pl. Alpine Linux alapúakat).
  • Multi-stage buildek: Különítse el a build időben szükséges függőségeket a futásidejű környezettől a kisebb image méret és nagyobb biztonság érdekében.
  • .dockerignore fájl: Hozzon létre egy .dockerignore fájlt a felesleges fájlok (pl. node_modules, .git) kizárására a build contextből.
  • Cache rétegek kihasználása: Rendezze a Dockerfile utasításait úgy, hogy a ritkán változó lépések legyenek előbb, kihasználva a build cache-t.
  • Specifikus verziók használata: Mindig adjon meg specifikus image verziókat (pl. node:18-alpine), a reprodukálhatóság érdekében.

Hibaelhárítás és gyakori problémák

A Docker használata során előfordulhatnak hibák. Íme néhány gyakori probléma és megoldás:

  • Engedélyek: Ha engedélyhibát kap, győződjön meg róla, hogy felhasználója hozzá lett adva a docker csoporthoz, és újra bejelentkezett.
  • Portütközés: Ellenőrizze, hogy a gazdagépen vagy más konténerben nem fut-e már valami azon a porton. (netstat -tulnp | grep <port_szám>)
  • Nincs elegendő lemezterület: A Docker image-ek és konténerek sok helyet foglalhatnak. Használja a docker system prune parancsot a felesleges image-ek, konténerek és cache törlésére.

Összefoglalás

A Docker telepítése és használata Ubuntun kulcsfontosságú lépés a modern fejlesztés felé. A konténerizáció forradalmasítja az alkalmazások csomagolását, terjesztését és futtatását, garantálva a konzisztenciát és a reprodukálhatóságot. A Dockerfile-ok, Docker Compose és a bevált gyakorlatok elsajátításával Ön is a legmodernebb fejlesztési technikákat alkalmazhatja. Kezdjen el kísérletezni, építse meg első image-ét, és tapasztalja meg a Docker erejét!

Leave a Reply

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