Skip to main content

Command Palette

Search for a command to run...

Dockerizing React, Spring Boot, and MySQL: A Practical Guide

Published
3 min read
Dockerizing React, Spring Boot, and MySQL: A Practical Guide
S

I am a versatile professional with expertise in multiple domains, including DevSecOps, AWS Cloud Solutions, AI/ML, and Cyber Security. With over 5 years of experience in the field, I have honed my skills and dedicated myself to various roles and responsibilities.

If you're looking for opportunities for collaboration, insights, or exciting ventures in these domains, I'm open to connecting. Please don't hesitate to reach out – I'm excited to engage with professionals, learners, and enthusiasts who share my passion for these fields!

Scenario:

You are tasked with dockerizing a full-stack web application that consists of a React frontend, a Spring Boot backend, and a MySQL database. The goal is to containerize each component of the application and utilize Docker Compose for seamless orchestration. This approach ensures consistency across different environments and simplifies deployment.

Objectives:

  1. Containerize the React frontend, Spring Boot backend, and MySQL database.

  2. Use Docker Compose to manage the multi-container setup.

  3. Ensure communication between the frontend, backend, and database within the Docker network.

  4. Allow for easy deployment and scalability of the application.

Step-by-Step Guide:

Step 1: Dockerize the React Frontend

1.1. Create a Dockerfile in the root of the React project.

# Use an official Node runtime as a parent image
FROM node:14

# Set the working directory in the container
WORKDIR /usr/src/app

# Copy package.json and package-lock.json to the working directory
COPY package*.json ./

# Install app dependencies
RUN npm install

# Copy the app source code
COPY . .

# Expose port 3000 to the outside world
EXPOSE 3000

# Command to run the application
CMD ["npm", "start"]

Step 2: Dockerize the Spring Boot Backend

2.1. Create a Dockerfile in the root of the Spring Boot project.

# Use an official OpenJDK runtime as a parent image
FROM openjdk:11-jre-slim

# Set the working directory in the container
WORKDIR /usr/src/app

# Copy the JAR file into the container at the specified working directory
COPY target/your-spring-boot-app.jar .

# Expose port 8080 to the outside world
EXPOSE 8080

# Command to run the application
CMD ["java", "-jar", "your-spring-boot-app.jar"]

Step 3: Dockerize the MySQL Database

3.1. Use the official MySQL Docker image. Create a docker-compose.yml file in the project root.

version: '3'
services:
  mysql:
    image: mysql:latest
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_DATABASE: your_database
      MYSQL_USER: your_user
      MYSQL_PASSWORD: your_password

Step 4: Docker Compose Setup

4.1. Create a docker-compose.yml file in the project root.

version: '3'

services:
  mysql:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_DATABASE: your_database
      MYSQL_USER: mysql_user
      MYSQL_PASSWORD: mysql_password
    ports:
      - "3306:3306"
    networks:
      - sms_network

  sms-server:
    build:
      context: ./sms-server
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    networks:
      - sms_network
    depends_on:
      - mysql
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/your_database
      SPRING_DATASOURCE_USERNAME: user_name
      SPRING_DATASOURCE_PASSWORD: user_password
    links:
      - mysql

  sms-client:
    build:
      context: ./sms-client
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    networks:
      - sms_network
    depends_on:
      - sms-server

networks:
  sms_network:
    driver: bridge

Step 5: Build and Run the Containers

5.1. In the project root, run the following command:

docker-compose up --build

Conclusion:

You have successfully dockerized your React-Spring Boot-MySQL project. The application is now ready for deployment in a containerized environment, offering better scalability and consistency across different platforms. The use of Docker Compose simplifies the management of multiple containers, making the deployment process more efficient.

More from this blog

Siddhant Academy

72 posts