| z1 | ||
| app.py | ||
| docker-compose.yaml | ||
| Dockerfile | ||
| index.html | ||
| nginx.conf | ||
| prepare-app.sh | ||
| README.md | ||
| remove-app.sh | ||
| requirements.txt | ||
| start-app.sh | ||
| stop-app.sh | ||
Assignment 1 – Docker Notes App
Overview
This project is a simple Notes Application built using Docker.
It demonstrates how to run a multi-container application composed of:
- Frontend (Nginx)
- Backend (Flask REST API)
- Database (PostgreSQL)
The application allows users to:
- Add notes
- View saved notes
- Delete notes
All data is stored persistently using a Docker volume.
Architecture
The application consists of three services:
1. Frontend
- Technology: Nginx
- Serves static HTML page
- Proxies API requests to backend
- Accessible via browser
2. Backend
- Technology: Python (Flask)
- Provides REST API:
GET /api/notesPOST /api/notesDELETE /api/notes/{id}
- Connects to PostgreSQL database
3. Database
- Technology: PostgreSQL 16
- Stores notes data
- Uses persistent Docker volume
Networking
All containers are connected via a Docker virtual network:
- Network name:
zkt_net
This allows communication between:
- frontend → backend
- backend → database
Persistent Storage
- Volume name:
zkt_db_data - Purpose: store PostgreSQL data
- Ensures data is not lost after stopping containers
Containers Used
| Container Name | Description |
|---|---|
| zkt_frontend | Nginx web server |
| zkt_backend | Flask API |
| zkt_db | PostgreSQL database |
Requirements
- Docker
- Docker Compose (plugin)
- Linux / WSL / Docker Desktop
- Web browser
How to Run the Application
1. Prepare the application
./prepare-app.sh
### 2. Start the application
./start-app.sh
### Then open your browser:
http://localhost:8080
### 3. Stop the application
./stop-app.sh
### 4. Remove the application
./remove-app.sh
## Testing the Application
-Open the web interface
-Add a note
-Verify it appears in the list
-Stop and restart the app:
./stop-app.sh
./start-app.sh
-Refresh the page
## If the note is still there → persistence works correctly
## Key Concepts Demonstrated
-Multi-container Docker application
-Docker Compose usage
-Container networking
-Persistent storage with volumes
-REST API communication
-Reverse proxy with Nginx
## Use of Artificial Intelligence
Artificial intelligence was used to:
-Design application architecture
-Generate initial code (frontend, backend, Docker config)
-Explain Docker concepts
-Assist with debugging and troubleshooting
-Prepare documentation
## Tool used:
-ChatGPT
-Gemini
## Pablo Pérez Arcas