অধ্যায়Phase 7 · প্রোডাকশন ও ডিপ্লয়মেন্ট
7.2 15 মিনিট পড়া

Docker Deployment

Containerized inference।

🎬 গল্প দিয়ে শুরু
"আমার মেশিনে চলে, আপনার মেশিনে চলে না" — Docker এই সমস্যা চিরতরে শেষ করে। OS, Python version, CUDA, library — সব একটি image-এ pack হয়।

মূল ধারণা

  • Image — read-only blueprint (recipe)।
  • Container — image-এর running instance।
  • Dockerfile — image তৈরির instruction।
  • Registry — Docker Hub, GHCR, ECR-এ image share।

CV API-র জন্য Dockerfile (CPU)

dockerfile
Dockerfile
FROM python:3.11-slim

# system deps for opencv
RUN apt-get update && apt-get install -y --no-install-recommends \
    libgl1 libglib2.0-0 && rm -rf /var/lib/apt/lists/*

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
bash
docker build -t cv-api:1.0 .
docker run -p 8000:8000 cv-api:1.0

GPU container (NVIDIA)

dockerfile
FROM nvidia/cuda:12.4.1-cudnn-runtime-ubuntu22.04

RUN apt-get update && apt-get install -y python3.11 python3-pip \
    libgl1 libglib2.0-0 && rm -rf /var/lib/apt/lists/*

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
bash
# host-এ NVIDIA Container Toolkit install করতে হবে
docker run --gpus all -p 8000:8000 cv-api:gpu

Multi-stage build — image ছোট করা

dockerfile
FROM python:3.11 AS build
WORKDIR /app
COPY requirements.txt .
RUN pip install --target=/deps --no-cache-dir -r requirements.txt

FROM python:3.11-slim
COPY --from=build /deps /usr/local/lib/python3.11/site-packages
COPY . /app
WORKDIR /app
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Size
2.5 GB → ~600 MB এ নেমে আসে — pull-time ও cold start দুটোই দ্রুত।

docker-compose — multi-service stack

yaml
docker-compose.yml
services:
  api:
    build: .
    ports: ["8000:8000"]
    environment:
      - MODEL_PATH=/models/yolov8n.pt
    volumes:
      - ./models:/models
    deploy:
      resources:
        reservations:
          devices:
            - capabilities: [gpu]
  redis:
    image: redis:7-alpine
  worker:
    build: .
    command: celery -A tasks worker -l info
    depends_on: [redis]

Best practices

  • .dockerignore — __pycache__, .git, dataset বাদ দিন।
  • Layer caching — requirements.txt আগে COPY, code পরে।
  • Pinned versions (python:3.11.9, not :latest)।
  • Non-root user (USER appuser) — security।
  • Healthcheck — HEALTHCHECK CMD curl -f http://localhost:8000/health।
  • Tag with git SHA — registry-তে immutable version।
প্র্যাকটিস টাস্ক
  1. Phase 7.1 API-কে Dockerize করে container-এ run করুন।
  2. GPU image বানিয়ে nvidia-smi container ভেতরে verify করুন।
  3. Multi-stage build দিয়ে image size ৪০%-এর বেশি কমান।