Chapter 51

AI-এর জন্য Docker

Docker for AI
🐳 'আমার মেশিনে চলে' সমস্যার শেষ
Docker AI model-কে dependency সহ container-এ pack করে — যেকোনো সার্ভারে identical চালানো যায়। GPU access-এর জন্য NVIDIA Container Toolkit।

Minimal Dockerfile (CPU)

# Dockerfile
FROM python:3.11-slim

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"]
docker build -t iris-api .
docker run -p 8000:8000 iris-api

GPU Image (CUDA)

FROM nvidia/cuda:12.1.0-cudnn8-runtime-ubuntu22.04

RUN apt-get update && apt-get install -y python3.11 python3-pip
WORKDIR /app
COPY requirements.txt .
RUN pip install torch --index-url https://download.pytorch.org/whl/cu121
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
docker run --gpus all -p 8000:8000 my-llm

Multi-stage Build — slim image

FROM python:3.11 AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txt

FROM python:3.11-slim
COPY --from=builder /root/.local /root/.local
ENV PATH=/root/.local/bin:$PATH
COPY . /app
WORKDIR /app
CMD ["uvicorn","main:app","--host","0.0.0.0","--port","8000"]

.dockerignore

__pycache__
*.pyc
.git
.venv
data/
checkpoints/
*.ipynb

docker-compose — API + Redis + Postgres

version: "3.9"
services:
  api:
    build: .
    ports: ["8000:8000"]
    environment:
      - REDIS_URL=redis://redis:6379
    depends_on: [redis, db]
    deploy:
      resources:
        reservations:
          devices: [{ capabilities: [gpu] }]
  redis: { image: redis:7 }
  db:    { image: postgres:16, environment: { POSTGRES_PASSWORD: pw } }

Best Practices

  • Base image যত slim তত ভালো (alpine ছাড়া PyTorch-এ)।
  • Layer cache কাজে লাগান — requirements.txt আগে copy।
  • Model weights image-এ না রেখে volume/S3 থেকে load করুন।
  • Non-root user দিয়ে run।
  • Healthcheck define করুন।
  • Image scan (Trivy) দিয়ে CVE check।
💡 Registry
Docker Hub, GHCR, ECR — CI/CD থেকে push, Kubernetes/Cloud Run pull করে deploy।

সারসংক্ষেপ

✨ এই অধ্যায়ে যা শিখলাম
  • Dockerfile, GPU image, multi-stage build।
  • docker-compose দিয়ে multi-service stack।
  • Slim, cached, secure image-এর best practice।