
"Lekin ye toh mere laptop par bilkul sahi chal raha tha!"
Ye line har developer kabhi na kabhi bolta hai jab uska code server par deploy karne ke baad fail ho jaata hai. Machine Learning mein ye problem aur badi ho jaati hai:
- Python 3.9 vs 3.11 ka conflict
- TensorFlow 2.1 vs 2.15 compatibility issues
- CUDA version mismatch
- OS-specific library dependencies
Agar aap seriously AI projects deploy karna chahte ho โ Docker sikhna zaroori hai.
Docker Kya Hai? (Shipping Container Analogy)
1960s se pehle, shipping bahut messy tha. Har ship ke liye alag-alag packing. Load/unload karna slow aur risky.
Phir standardized shipping containers aaye โ same size, same interface. Kisi bhi ship mein fit ho jaate. Ye revolution tha.
Docker computers ke liye wahi revolution hai.
Docker tumhara code, libraries, aur poora environment ek "container" mein band kar deta hai jo kisi bhi machine par exactly same tarike se chalega.
Core Concepts
Image
Ek Image ek frozen, read-only blueprint hai aapke application ka. Isme ye sab hota hai:
- Operating system (usually slim Linux)
- Python version
- Aapki libraries (TensorFlow, Flask, etc.)
- Aapka code
Image ek recipe ki tarah hai. Aap isse build karte ho ek baar, phir kahin bhi use kar sakte ho.
Container
Container ek running instance hai image ka. Jab aap docker run karte ho, image se ek container ban jaata hai โ ek isolated mini-computer jiske andar aapka app chal raha hota hai.
Image = Recipe (static)
Container = Bani hui dish (running)
Ek hi image se multiple containers run ho sakte hain simultaneously.
Dockerfile
Dockerfile ek text file hai jisme likha hota hai ki image kaise build karein. Step-by-step instructions โ Docker ye read karke image banata hai.
Pehla Dockerfile: Flask ML API
# 1. Base Image โ Python 3.9 slim (chhoti size)
FROM python:3.9-slim
# 2. Working directory set karo container ke andar
WORKDIR /app
# 3. Requirements file copy karo
COPY requirements.txt .
# 4. Dependencies install karo
RUN pip install --no-cache-dir -r requirements.txt
# 5. Baaki code copy karo
COPY . .
# 6. Port expose karo (Flask 5000 par run karta hai)
EXPOSE 5000
# 7. App start karo
CMD ["python", "app.py"]
requirements.txt:
flask==2.3.0
scikit-learn==1.3.0
pandas==2.0.0
joblib==1.3.0
Docker Commands โ Essential Ones
Image Build Karna
# Dockerfile se image build karo
# '.' matlab current directory
docker build -t my-ml-app:v1 .
# Build ke baad images dekhna
docker images
Container Run Karna
# Image se container start karo
docker run -p 5000:5000 my-ml-app:v1
# -p 5000:5000 = host:container port mapping
# Background mein run karo (detached mode)
docker run -d -p 5000:5000 my-ml-app:v1
# Running containers dekhna
docker ps
# Container stop karna
docker stop <container_id>
Container mein Jaana (Debugging ke liye)
# Running container ke andar bash open karo
docker exec -it <container_id> bash
# Ab aap container ke andar ho
# ls, python, pip โ sab kuch try kar sakte ho
Complete ML Project Docker Setup
Project Structure
my_ml_project/
โโโ app.py # Flask API
โโโ model.pkl # Trained model
โโโ train.py # Training script
โโโ requirements.txt # Dependencies
โโโ Dockerfile # Docker config
โโโ docker-compose.yml # Optional: multi-container
app.py (Flask API)
from flask import Flask, request, jsonify
import joblib
import numpy as np
app = Flask(__name__)
model = joblib.load('model.pkl')
@app.route('/predict', methods=['POST'])
def predict():
data = request.get_json()
features = np.array(data['features']).reshape(1, -1)
prediction = model.predict(features)
probability = model.predict_proba(features)[0].tolist()
return jsonify({
'prediction': int(prediction[0]),
'probability': probability
})
@app.route('/health')
def health():
return jsonify({'status': 'healthy'})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Build aur Test
# Build
docker build -t ml-api:latest .
# Run
docker run -p 5000:5000 ml-api:latest
# Test karo (new terminal mein)
curl -X POST http://localhost:5000/predict \
-H "Content-Type: application/json" \
-d '{"features": [1.2, 3.4, 5.6, 7.8]}'
Docker Compose: Multiple Services
Real projects mein aksar multiple services hote hain:
- ML API container
- Database container
- Nginx (web server) container
docker-compose.yml:
version: '3.8'
services:
ml-api:
build: .
ports:
- "5000:5000"
environment:
- MODEL_PATH=/app/models/model.pkl
volumes:
- ./models:/app/models # Models bahar se mount karo
redis: # Caching ke liye
image: redis:alpine
ports:
- "6379:6379"
nginx: # Load balancer
image: nginx:alpine
ports:
- "80:80"
depends_on:
- ml-api
# Sab services ek saath start karo
docker-compose up -d
# Sab stop karo
docker-compose down
GPU ke Saath Docker (Deep Learning)
NVIDIA GPU use karne ke liye special setup:
# NVIDIA Container Toolkit install karo
# (NVIDIA GPU wali machines par)
# GPU-enabled container run karo
docker run --gpus all \
--ipc=host \
-v /data:/data \
tensorflow/tensorflow:2.13.0-gpu \
python train.py
NVIDIA official PyTorch image:
FROM pytorch/pytorch:2.0.0-cuda11.7-cudnn8-runtime
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "train.py"]
Docker Hub: Images Share Karo
Docker Hub (hub.docker.com) GitHub jaisa hai โ images ke liye.
# Docker Hub par login
docker login
# Image tag karo apne username ke saath
docker tag ml-api:latest yourusername/ml-api:v1
# Push karo
docker push yourusername/ml-api:v1
# Kisi bhi machine par pull karo
docker pull yourusername/ml-api:v1
AI mein Docker Kyon Important Hai?
| Problem | Docker Solution |
|---|---|
| "Works on my machine" | Identical environment everywhere |
| Python version conflicts | Each container has its own Python |
| Library version issues | requirements.txt locks versions |
| Scaling | 1 container โ 100 containers easily |
| Rollback | Old image wapas run karo |
| CI/CD | Docker images automatically build hoti hain |
FAQs
1. Docker Virtual Machine (VM) se kaise alag hai? VM poora OS virtualize karta hai โ heavy (GBs, slow start). Docker OS kernel share karta hai โ lightweight (MBs, seconds to start). AI workloads ke liye Docker preferred hai.
2. Docker Desktop free hai? Personal use ke liye haan. Large companies ke liye paid subscription. Docker Engine (Linux) always free.
3. Kubernetes kya hai? Docker se kaise alag? Docker single container manage karta hai. Kubernetes (K8s) hazaron containers orchestrate karta hai across multiple servers. Docker seekhne ke baad Kubernetes seekhna natural next step hai.
4. Meri ML model files bahut badi hain โ Docker image huge ho jaati hai? Model files ko container ke baahan rakhne ka tarika use karo:
- Volume mounting (
-v /models:/app/models) - S3/GCS se runtime par download karna
- Multi-stage builds se base image size kam karo
5. Docker mein data permanent kaise save karein?
Containers stateless hote hain โ restart hone par data lost ho jaata hai. Volumes use karo permanent data ke liye: docker run -v /host/path:/container/path.
Docker try kiya? Koi problem aayi? Comment mein batayein โ help karunga! ๐ณ
Tarun ke baare mein: Tarun ek AI educator aur developer hain jo ML deployment aur MLOps ko beginners ke liye accessible banana chahte hain. AI-Gyani par theory se production tak โ sab cover hai.