Flask App with MySQL Docker Setup

Flask App with MySQL Docker Setup

This is a simple Flask app that interacts with a MySQL database. The app allows users to submit messages, which are then stored in the database and displayed on the frontend.

Prerequisites:

Before you begin, make sure you have the following installed:

  • Docker

  • Git (optional, for cloning the repository)

Setup:

  1. Clone this repository (if you haven't already):
git clone https://github.com/your-username/your-repo-name.git
  1. Navigate to the project directory:
cd your-repo-name
  1. Create a .env file in the project directory to store your MySQL environment variables:
touch .env

Open the .env file and add your MySQL configuration:

MYSQL_HOST=mysql
MYSQL_USER=your_username
MYSQL_PASSWORD=your_password
MYSQL_DB=your_database

Usage:

  1. Start the containers using Docker Compose:
docker-compose up --build
  1. Access the Flask app in your web browser:
  1. Create the messages table in your MySQL database:

    Use a MySQL client or tool (e.g., phpMyAdmin) to execute the following SQL commands:

CREATE TABLE messages (
    id INT AUTO_INCREMENT PRIMARY KEY,
    message TEXT
);
  1. Interact with the app:

Cleaning Up

To stop and remove the Docker containers, press Ctrl+C in the terminal where the containers are running, or use the following command:

docker-compose down

To run this two-tier application using without docker-compose

  • First create a docker image from Dockerfile
docker build -t flaskapp .
  • Now, make sure that you have created a network using following command
docker network create twotier
  • Attach both the containers in the same network, so that they can communicate with each other

i) MySQL container

docker run -d --name mysql -v mysql-data:/var/lib/mysql -v ./message.sql:/docker-entrypoint-initdb.d/message.sql --network=twotier -e MYSQL_DATABASE=mydb -e MYSQL_USER=root -e MYSQL_ROOT_PASSWORD="admin" -p 3360:3360 mysql:5.7

ii) Backend container

docker run -d --name flaskapp -v mysql-data:/var/lib/mysql -v ./message.sql:/docker-entrypoint-initdb.d/message.sql --network=twotier -e MYSQL_HOST=mysql -e MYSQL_USER=root -e MYSQL_PASSWORD=admin -e MYSQL_DB=mydb -p 5000:5000 flaskapp:latest

Notes:

  • Make sure to replace placeholders (e.g., your_username, your_password, your_database) with your actual MySQL configuration.

  • This is a basic setup for demonstration purposes. In a production environment, you should follow best practices for security and performance.

  • Be cautious when executing SQL queries directly. Validate and sanitize user inputs to prevent vulnerabilities like SQL injection.

  • If you encounter issues, check Docker logs and error messages for troubleshooting.