Ü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