my-flask-app/
│── app.py
│── requirements.txt
│── Dockerfile
│── Dockerfile.multistage
│── .dockerignore
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello from Docker!"
@app.route('/health')
def health():
return "OK"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Flask==2.3.3
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py .
EXPOSE 5000
CMD ["python", "app.py"]
__pycache__/
*.pyc
.env
.venv
.vscode/
.idea/
.git/
*.log
tests/
docker build -t my-flask-app .
docker images
docker run -d -p 5000:5000 --name flask-container my-flask-app
docker ps
docker logs flask-container
curl http://localhost:5000
docker build -t my-flask-app:1.0 .
docker build -t my-flask-app:latest -t my-flask-app:1.0 .
docker tag my-flask-app:latest my-flask-app:v1.0
docker tag my-flask-app:latest username/my-flask-app:1.0
docker history my-flask-app
docker inspect my-flask-app
# STAGE 1
FROM python:3.9-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
RUN pip install --no-cache-dir -r requirements.txt
# STAGE 2
FROM python:3.9-slim
WORKDIR /app
COPY --from=builder /opt/venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
COPY app.py .
RUN useradd -m -u 1000 appuser
USER appuser
EXPOSE 5000
CMD ["python", "app.py"]
docker build -f Dockerfile.multistage -t flask-multistage .
docker images | grep flask
Expected:
docker login
docker tag my-flask-app:latest username/my-flask-app:latest
docker push username/my-flask-app:latest
docker pull username/my-flask-app:latest
docker run -d -p 5000:5000 username/my-flask-app:latest
my-node-app/
│── app.js
│── package.json
│── Dockerfile
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello from Node.js Docker!');
});
app.get('/health', (req, res) => {
res.json({ status: 'healthy' });
});
app.listen(port, () => {
console.log(`Server running on port ${port}`);
});
{
"name": "node-docker-app",
"version": "1.0.0",
"main": "app.js",
"dependencies": {
"express": "^4.18.2"
}
}
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --only=production
COPY app.js .
EXPOSE 3000
CMD ["node", "app.js"]
docker build -t my-node-app .
docker run -d -p 3000:3000 --name node-container my-node-app
curl http://localhost:3000
docker build -t myapp:latest -t myapp:v2.0 -t username/myapp:production .
docker build -t myapp .
docker run -p 3000:3000 myapp
docker ps
docker ps -a
docker images
docker tag myapp:latest myapp:v1
docker push username/myapp
docker pull username/myapp
docker rm container-name
docker rmi image-name
docker exec -it container-name bash
docker container prune
docker image prune
docker system prune -a














This project demonstrates: