VMs (Virtual Machines) kyun nahi use karte?
Ek VM poori hardware + ek full guest OS ko virtualize karta hai (gigabytes, slow boot). Ek container host ka Linux kernel share karta hai aur sirf userspace ko virtualize karta hai (megabytes, milliseconds mein boot). Bahut kam cost mein isolation milti hai.
FROM python:3.12-slim # base image (ek chhota Debian + Python)WORKDIR /app # /app mein cd (agar na ho toh create hota hai)COPY requirements.txt . # sirf manifest copy karo (cache-friendly)RUN pip install -r requirements.txt # deps install karo -> cached layerCOPY . . # ab source code copy karoEXPOSE 8000 # port document karta hai (publish NAHI karta)CMD ["python", "app.py"] # container start hone par default process
# docker-compose.ymlservices: web: build: . # local Dockerfile se build karo ports: - "8080:8000" depends_on: - db # pehle db start karo environment: - DATABASE_URL=postgres://db:5432/mydb db: image: postgres:16 volumes: - pgdata:/var/lib/postgresql/data # restarts ke baad bhi DB persist karovolumes: pgdata: # named volume container deletion ke baad bhi survive karta hai
Recall Feynman: ek 12-saal ke bache ko samjhao
Socho tum ek cake bana rahe ho ek recipe card se. Recipe cardimage hai — yeh kabhi nahi badlti aur tum isse dost ko copy kar sakte ho. Jab tum actually bake karte ho aur cake table par hota hai, woh container hai — tum use kha sakte ho (use kar sakte ho) aur usse mess bhi kar sakte ho. Dockerfile woh hai jab tum recipe step by step likhte ho. docker-compose ek party menu hai: woh kehta hai "cake, juice, aur pizza saath banao, aur unhe ek hi table par rakhو taaki woh ek doosre ko cheezein pass kar sakein." Agar tum cake phenko, recipe card phir bhi safe hai — isliye tum hamesha ek aur identical cake bana sakte ho.
Expensive dependency-install layer ko cached rakhne ke liye; pehle code copy karna har code change par us cache ko invalidate kar deta.
Dockerfile mein RUN aur CMD mein kya fark hai?
RUN build time par execute hota hai aur image mein bake hota hai; CMD container start par run hone wala default command set karta hai.
CMD aur ENTRYPOINT mein kya fark hai?
ENTRYPOINT fixed executable hai; CMD default arguments deta hai jo user docker run par override kar sakta hai.
docker-compose mein web service db service tak kaise pahunchti hai?
Compose ek shared network create karta hai aur har service ka naam ek DNS hostname ke roop mein register karta hai, isliye web naam se db se connect karta hai.
Container delete hone par uske filesystem ke andar likhe data ka kya hota hai?
Woh lost ho jaata hai, kyunki woh ephemeral writable layer mein rehta hai; data persist karne ke liye volume use karo.
EXPOSE 8000 actually kya karta hai?
Yeh sirf port document karta hai; yeh usse publish NAHI karta — reach karne ke liye run time par phir bhi -p chahiye.
OOP mein image container ki tarah ___ se ___ jaisi relationship rakhta hai?