Lesson 7 — Beginner

Containers & Deployment

Tumhari service laptop par chal rahi hai — ab use public URL tak le jaana hai. Wo tabhi hoga jab environment bhi saath chale. Is lesson mein application vs environment vs machine, containers aur images, Dockerfile likhna, layers aur cache, container logs se startup debugging, FastAPI ko containerize karna, cloud deploy aur production secrets dekhoge.

⏱ 20 min• Beginner• AI-Assisted Software Development

Containers kya hain — aur kyun

WHAT

Container tumhare app ka portable box hai — code + dependencies + fixed environment ek saath. Image uska blueprint (read-only), container blueprint se bana ek chalta hua instance. Ek image se hazaaron containers chal sakte hain.

WHEN

Jab tak laptop pe chal raha hai zarurat nahi — deploy karte hi zaroori. "Mere paas chal raha hai" khatam karne ke liye, aur CI/CD mein ek hi image dev se prod tak jaane ke liye.

WHERE

Har cloud platform containers maangta hai — Render, Fly, Railway, ECS, AKS. Tumhari FastAPI service isi pack mein public URL pe jaayegi.

Teen cheezein alag hain: application (tumhara code), environment (Python version, dependencies, env vars, OS libraries) aur machine (laptop, server, cloud VM). Local pe theek chalna sirf ye prove karta hai ki tumhara laptop sahi hai — production ki machine alag hoti hai. Container isi gap ko bridge karta hai.

Core idea: Container image ke saath aati hai — OS libraries, Python version, packages. Server par sirf Docker install karo aur image chalaa do. "Mere machine pe Python 3.11 hai" wali baat hamesha ke liye khatam.

Images, layers aur cache

$ docker build -t order-service:1.0 .
 => [1/5] FROM python:3.12-slim             0.8s
 => [2/5] WORKDIR /app                      0.0s
 => [3/5] COPY pyproject.toml uv.lock ./    0.1s
 => [4/5] RUN uv sync --no-dev             12.4s
 => [5/5] COPY . .                          0.2s
 => naming to docker.io/library/order-service:1.0
Trap: COPY . . agar upar hai toh cache har baar tootegi aur build slow. Dependency layer neeche, code layer upar — ye ordering sabse common Docker performance fix hai.

Dockerfile — instruction ka instruction

FROM python:3.12-slim
WORKDIR /app

# Pehle dependency files — inke badle par hi install dobara
COPY pyproject.toml uv.lock ./
RUN pip install uv && uv sync --no-dev

# Phir baaki code
COPY . .

EXPOSE 8000
CMD ["uv", "run", "uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
Rule: Image ko ek process ke liye socho: logging stdout par, config env vars se, data bahar (volume/DB). Yehi "12-factor" habits hain jo aage har deploy mein kaam aayengi.

FastAPI service ko chalao

# Build -> chala -> smoke test (cloud se pehle, hamesha local)
docker build -t order-service:1.0 .
docker run --rm -p 8000:8000 --env-file .env order-service:1.0
# Ab: http://localhost:8000/docs

# Env vars safely — image ke andar bake nahi, run ke waqt do
docker run --rm -p 8000:8000 -e DATABASE_URL="postgres://app@db:5432/orders" -e LOG_LEVEL=info order-service:1.0

# Debug
docker ps
docker logs -f <container-id>
docker exec -it <container-id> sh
Startup failures ka order: Container chala aur exit?1) docker logs — import error, missing env var sab yahan. 2) exec se env check. 3) CMD/WORKDIR ka path. Log dekhe bina turant naya build = debugging nahi, lottery.

Logs, .dockerignore aur debugging

# .dockerignore — context chhota + secrets ke andar jaane se bachav
.git
.env
.env.*
__pycache__/
.pytest_cache/
.venv/
node_modules/

# Container ka crash dekho
docker logs <container-id>
=> Traceback (most recent call last):
=>   File "/app/app/main.py", line 3, in <module>
=>     from app.routes import orders
=> ModuleNotFoundError: No module named "app.routes"
# matlab: COPY/WORKDIR order galat — code sahi jagah nahi pahauncha
Debugging order (yaad rakho): logs -> env -> port -> path. Ye chaar cheezein container crashes ka zyadatar hissa samjha deti hain. Is order mein jao, time bachega.

Public URL pe deploy aur production secrets

# Generic flow — platform koi bhi ho, steps same hain
docker build -t registry.example.com/team/order-service:1.0 .
docker push registry.example.com/team/order-service:1.0
# Platform par: image reference + env vars -> service chalu -> public URL

# Public URL ka smoke test (docs UI nahi, curl se)
curl -sS https://order-service.example.com/health
curl -sS -X POST https://order-service.example.com/orders -H "Content-Type: application/json" -d @order.json

# Production config alag — local .env se kabhi mat uthao:
# DATABASE_URL, API_KEY, LOG_LEVEL platform ke secrets manager/dashboard se
Wahi image har jagah: Dev, staging aur prod mein same image tag — config alag, code alag nahi. Isi se "staging mein toh theek tha" wali problem khatam hoti hai.

Exercise

Question: Dockerfile ka har instruction kya banati hai? (ek shabd)

Question: Container ke andar chalne wale process ke logs dekhne wali command? (do shabd)

Question: Image ko chalane wali command kaunsi hai? (do shabd)

Question: Secrets ko image ke bajaye run/deploy ke waqt kaise dete hain? (do shabd)

Common mistakes

Desi example: Ghar ka tiffin vs cloud kitchen

Ghar ka tiffin tumhara laptop jaisa — jahan banaya, wahi waisa khaya. Restaurant chain ka standardized box = container: box (image) mein sab fixed, kisi bhi outlet pe kholo wahi khana. Recipe badalni ho toh box badlo — khana pakde jaate waqt nahi:

bash
docker build -t kitchen/paneer-box:1.0 .      # box pack hua
docker run -p 8000:8000 kitchen/paneer-box:1.0 # outlet par khola
docker push registry/kitchen/paneer-box:1.0   # dusre outlet bheja
# Wahi box, wahi khana — sirf outlet (machine) badla.
Interview angle — yahan se sawaal aate hain
  • Q: Image aur container ka farq? — Image read-only blueprint, container uska chalta hua instance.
  • Q: Docker layers ka cache kaise kaam karta hai aur order kyun matter karta hai? — Pehle dependency install (kam change), phir code COPY — warna cache toot-ti hai.
  • Q: EXPOSE aur -p port mapping mein farq? — EXPOSE documentation hai, -p host port kholta hai.
  • Q: Production secrets manage kaise karein? — Env vars platform secrets se, image/repo mein kabhi nahi; leak par rotate.
  • Q: Container start hoke exit ho raha hai toh kya karoge? — docker logs, phir env, port, path ka order.
Lesson complete?

Containers aur deployment clear. Agla lesson — Capstone — mein poora L0 ek service banakar public URL pe ship karoge.

Popular courses: Data Science Course in Lucknow · AI Course in Lucknow · Python Course in Lucknow · Power BI Course · Data Analytics Course