A környezeti hibák okozzák a legnagyobb fejfájást a fejlesztés során. A Docker trükkök ismerete segít elkerülni a „nálam még működött” típusú problémákat. Ebben a cikkben hat gyakorlati technikát mutatunk be a stabil rendszerek építéséhez.
1. Konkrét verziók használata
Kezdők gyakran a latest címkét használják az alapképeknél. Ez kockázatos szokás. A háttérben frissülő szoftverek váratlanul eltörhetik a kódodat. Mindig rögzítsd a pontos verziószámot a Dockerfile elején.
Így garantálhatod a stabilitást hónapok múlva is.
# Helytelen megoldás
# FROM python:latest
# Helyes megoldás
FROM python:3.9.7-slim-buster
A konkrét verzió használata biztosítja az azonosságot minden gépen.
2. Függőségek befagyasztása
A Python könyvtárak folyamatosan változnak. Ha csak a csomag nevét adod meg, a telepítő a legfrissebbet tölti le. Ez inkompatibilitáshoz vezethet. Rögzítsd a verziókat egy fájlban.
Generáld le a listát a jelenlegi környezetedből.
pip freeze > requirements.txt
A fájl tartalma így néz ki pontos verziókkal.
pandas==1.3.3
numpy==1.21.2
scikit-learn==0.24.2
A Dockerfile pedig így használja ezt a fájlt.
COPY requirements.txt .
RUN pip install -r requirements.txt
3. A felesleg kizárása
A képek mérete befolyásolja a sebességet. Nem szabad minden fájlt bemásolni a konténerbe. A szükségtelen adatok csak foglalják a helyet. Hozz létre egy .dockerignore fájlt a projekt gyökerében.
Sorold fel benne a kihagyandó mappákat.
.git
__pycache__
*.pyc
.ipynb_checkpoints
adatok/temp
Ez a lépés jelentősen felgyorsítja az építési folyamatot.
4. Többlépcsős építés
A végső képnek nem kell tartalmaznia a fordító eszközöket. A többlépcsős építés lehetővé teszi a tisztább végeredményt. Az első szakaszban telepíted a függőségeket. A másodikban csak a szükséges fájlokat másolod át.
Nézd meg ezt a hatékony szerkezetet.
# 1. szakasz: Építés
FROM python:3.9 AS builder
COPY requirements.txt .
RUN pip install --user -r requirements.txt
# 2. szakasz: Futtatás
FROM python:3.9-slim
COPY --from=builder /root/.local /root/.local
WORKDIR /app
COPY . .
ENV PATH=/root/.local/bin:$PATH
CMD ["python", "app.py"]
Az eredmény egy sokkal kisebb és biztonságosabb konténer lesz.
5. Szolgáltatások szervezése
A valós projektek több elemből állnak. Az adatbázis és az elemző kód külön helyen fut. A Docker Compose segít ezeket összefogni. Egyetlen fájlban leírhatod az egész architektúrát.
Így köss össze egy Jupyter labort egy adatbázissal.
version: '3.8'
services:
notebook:
build: .
ports:
- "8888:8888"
volumes:
- .:/app
db:
image: postgres:13
environment:
POSTGRES_PASSWORD: titkos
Ezzel a megoldással egy paranccsal indíthatod a teljes rendszert.
6. Élő kódolás kötetekkel
A fejlesztés közben lassú lenne folyton újraépíteni a képet. A kötetek vagyis volumes használata megoldja ezt. A helyi mappádat „betükrözöd” a konténerbe. A módosítások azonnal látszanak.
A futtatási parancsban használd a -v kapcsolót.
docker run -p 8888:8888 -v $(pwd):/app nagy-projekt
Így a helyi szerkesztődben írhatod a kódot. A konténer pedig azonnal végrehajtja az új utasításokat.
Trükkök áttekintése
A táblázat segít a megfelelő technika kiválasztásában.
| Trükk neve | Fő előny | Mikor használd |
| Fix verziók | Stabilitás | Mindig |
| Requirements | Kompatibilitás | Csomagtelepítésnél |
| .dockerignore | Kisebb méret | Építés előtt |
| Multi-stage | Biztonság | Élesítéskor |
| Compose | Átláthatóság | Több szolgáltatásnál |
| Volumes | Gyorsaság | Fejlesztés közben |
Alkalmazd a Docker trükkök közül mindet a következő projektedben. A rendszered stabilabb és gyorsabb lesz. Kezdd a verziók rögzítésével még ma.




