Unit 4: Dockerizing Real Applications & Labs
Part F: Dockerizing Real Applications
1. Pattern & Node.js Example
Pattern: Base image → WORKDIR → requirements copy/install → source copy → EXPOSE → CMD.
FROM node:22
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
EXPOSE 3000
CMD ["npm","start"]
Hinglish:
npm ci use karo package-lock.json ke liye taaki reproducible installs ho.2. Databases (MongoDB, PostgreSQL, MySQL, Redis)
Use a separate database service in Compose, persist data with a named volume, and connect using the Compose service name (e.g. mongodb://mongo:27017, not localhost).
Part Q: Complete Python/Flask Lab
Follow this step-by-step to dockerize a simple Python API.
1. Create Files
app.py:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def home():
return "Hello from Docker!"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8000)
requirements.txt:
Flask
Dockerfile:
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py .
EXPOSE 8000
CMD ["python", "app.py"]
.dockerignore:
__pycache__
*.pyc
.venv
2. Build, Run & Test
docker build -t my-python-app:1.0 .
docker run -d --name python-demo -p 8000:8000 my-python-app:1.0
docker logs python-demo
Open http://localhost:8000. Expect "Hello from Docker!".
Part R: Complete Compose + Postgres Lab
This lab demonstrates running an app and a database together using Docker Compose.
1. compose.yaml
services:
app:
build: .
ports:
- "8000:8000"
environment:
DB_HOST: db
depends_on:
- db
db:
image: postgres:16
environment:
POSTGRES_DB: appdb
POSTGRES_USER: appuser
POSTGRES_PASSWORD: change-me
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
2. Manage Stack
docker compose up -d --build
docker compose ps
docker compose logs -f
docker compose down
Hinglish:
docker compose down -v mat chalana unless aap sach me database data delete karna chahte ho. -v named volume ko hamesha ke liye uda dega.