mkdir my-flask-app
cd my-flask-app
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.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]
Create .dockerignore
__pycache__/
*.pyc
*.pyo
*.pyd
.env
.venv
env/
venv/
.vscode/
.idea/
.git/
.gitignore
.DS_Store
Thumbs.db
*.log
logs/
tests/
test_*.py
docker build -t my-flask-app .
Check images:
docker images
Tag with version:
docker build -t my-flask-app:1.0 .
Multiple tags:
docker build -t my-flask-app:latest -t my-flask-app:1.0 .
Custom registry:
docker build -t ss1234ss1234/my-flask-app:1.0 .
Tag existing image:
docker tag my-flask-app:latest my-flask-app:v1
docker images
docker history my-flask-app
docker inspect my-flask-app
docker run -d -p 5000:5000 --name flask-container my-flask-app
Test:
curl http://localhost:5000
Check:
docker ps
docker logs flask-container
docker stop flask-container
docker start flask-container
docker rm flask-container
docker rm -f flask-container
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
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 -t flask-regular .
docker build -f Dockerfile.multistage -t flask-multistage .
docker images | grep flask-
docker login
docker tag my-flask-app:latest ss1234ss1234/my-flask-app:1.0
docker tag my-flask-app:latest ss1234ss1234/my-flask-app:latest
Push:
docker push ss1234ss1234/my-flask-app:1.0
docker push ss1234ss1234/my-flask-app:latest
docker pull ss1234ss1234/my-flask-app:latest
docker run -d -p 5000:5000 ss1234ss1234/my-flask-app:latest
mkdir my-node-app
cd my-node-app
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
Test:
curl http://localhost:3000
This experiment covered: