6 Docker trükk a reprodukálható adatos projektekhez

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 neveFő előnyMikor használd
Fix verziókStabilitásMindig
RequirementsKompatibilitásCsomagtelepítésnél
.dockerignoreKisebb méretÉpítés előtt
Multi-stageBiztonságÉlesítéskor
ComposeÁtláthatóságTöbb szolgáltatásnál
VolumesGyorsaságFejleszté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.

Kérjük, ellenőrizd a mező formátumát, és próbáld újra.
Köszönjük, hogy feliratkoztál.

vagyunk.hu hírlevél

Hozzászólás

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