A complete Docker-based application with Express.js frontend and Flask backend, orchestrated using Docker Compose.
docker-projects-assignment/
├── frontend/ # Express.js Node application
│ ├── views/ # EJS templates
│ │ ├── index.ejs # Main form page
│ │ ├── success.ejs # Success page
│ │ └── submissions.ejs # Submissions list
│ ├── public/
│ │ └── style.css # Styling
│ ├── server.js # Express server
│ ├── package.json # Node dependencies
│ └── Dockerfile # Frontend Docker configuration
├── backend/ # Flask application
│ ├── app.py # Flask API
│ ├── requirements.txt # Python dependencies
│ └── Dockerfile # Backend Docker configuration
├── docker-compose.yml # Docker Compose configuration
├── .gitignore # Git ignore rules
└── README.md # This file
- Frontend: Express.js with EJS templating engine
- Backend: Flask REST API with CORS support
- Form Submission: Full-stack form handling with validation
- Submissions View: Display all form submissions
- Docker: Containerized services with health checks
- Docker Compose: Orchestrated networking between services
- Docker & Docker Compose installed
- Node.js 18+ (for local development)
- Python 3.9+ (for local development)
- Open Docker Desktop application
- Wait until it's fully running (check system tray icon)
cd docker-projects-assignment
docker-compose up --build- Frontend: http://localhost:3000
- Backend API: http://localhost:5000/api/health
Press Ctrl+C, then:
docker-compose down-
POST /api/submit - Submit form data
curl -X POST http://localhost:5000/api/submit \ -H "Content-Type: application/json" \ -d '{"name":"John","email":"john@example.com","message":"Hello"}'
-
GET /api/submissions - Get all submissions
curl http://localhost:5000/api/submissions
-
GET /api/health - Health check
curl http://localhost:5000/api/health
- GET / - Main form page
- POST /submit - Submit form and redirect
- GET /submissions - View all submissions
cd backend
python -m venv venv
source venv/bin/activate # or `venv\Scripts\activate` on Windows
pip install -r requirements.txt
python app.pycd frontend
npm install
npm startbuild-and-push.batThe script will prompt for your Docker Hub username and handle everything.
# Login to Docker Hub
docker login
# Build images
docker-compose build
# Tag images (replace YOUR_USERNAME)
docker tag docker-projects-assignment-backend:latest YOUR_USERNAME/form-submission-backend:latest
docker tag docker-projects-assignment-frontend:latest YOUR_USERNAME/form-submission-frontend:latest
# Push to Docker Hub
docker push YOUR_USERNAME/form-submission-backend:latest
docker push YOUR_USERNAME/form-submission-frontend:latestdocker pull YOUR_USERNAME/form-submission-backend:latest
docker pull YOUR_USERNAME/form-submission-frontend:latest-
Frontend:
BACKEND_URL- Backend API URL (default: http://localhost:5000)NODE_ENV- Environment (production/development)
-
Backend:
FLASK_ENV- Flask environmentPYTHONUNBUFFERED- Unbuffered Python output
- Frontend: Express.js, EJS, Node.js
- Backend: Flask, Python, Flask-CORS
- Containerization: Docker, Docker Compose
- Networking: Docker bridge network
✅ Full-stack form submission
✅ Data validation
✅ Persistent storage (in-memory for demo)
✅ Error handling
✅ Responsive UI
✅ Docker containerization
✅ Health checks
✅ CORS enabled
✅ Service networking
✅ Volume mounting for development
GitHub: https://github.com/nomanqadri34/docker-projects-assignment
MIT
Your Name
For more information, visit the GitHub repository.