অধ্যায়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.0GPU 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:gpuMulti-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।
প্র্যাকটিস টাস্ক
- Phase 7.1 API-কে Dockerize করে container-এ run করুন।
- GPU image বানিয়ে nvidia-smi container ভেতরে verify করুন।
- Multi-stage build দিয়ে image size ৪০%-এর বেশি কমান।