DEV Community

Anh Trần Tuấn
Anh Trần Tuấn

Posted on • Originally published at tuanh.net on

1

Spring Boot Applications with Docker and Kubernetes

1. Introduction

Spring Boot is a popular framework for building microservices and standalone applications. Docker provides containerization for consistent environments, while Kubernetes offers orchestration and management at scale.

2. Setting Up Your Spring Boot Application

2.1 Creating a Sample Spring Boot Application

Let's create a simple Spring Boot application to demonstrate the deployment process.

Use Spring Initializr (https://start.spring.io) to create a new project with dependencies for Spring Web and Spring Boot DevTools. Name the project demo.

2.2 Define the Application

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
Enter fullscreen mode Exit fullscreen mode

2.3 Create a Simple REST Controller

package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public class GreetingController {

    @GetMapping("/greet")
    public String greet() {
        return "Hello, World!";
    }
}
Enter fullscreen mode Exit fullscreen mode

2.4 Build the Application

Run the following command to build the application:

./mvnw clean package
Enter fullscreen mode Exit fullscreen mode

3. Dockerizing the Spring Boot Application

3.1 Create a Dockerfile

Create a file named Dockerfile in the root of your project:

# Use the official OpenJDK image
FROM openjdk:17-jdk-slim

# Set the working directory
WORKDIR /app
# Copy the JAR file into the container
COPY target/demo-0.0.1-SNAPSHOT.jar app.jar

# Run the JAR file
ENTRYPOINT ["java", "-jar", "/app/app.jar"]
Enter fullscreen mode Exit fullscreen mode

3.2 Build the Docker Image

docker build -t demo-app .
Enter fullscreen mode Exit fullscreen mode

3.3 Run the Docker Container

Run the Docker container with the following command:

docker run -p 8080:8080 demo-app
Enter fullscreen mode Exit fullscreen mode

3.4 Verify the Application

Open your browser or use curl to check if the application is running:

curl http://localhost:8080/api/greet
Enter fullscreen mode Exit fullscreen mode

You should see the response: Hello, World!.

4. Deploying on Kubernetes

4.1 Create Kubernetes Deployment and Service Files

Create a deployment.yaml file:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: demo-app
  template:
    metadata:
      labels:
        app: demo-app
    spec:
      containers:
        - name: demo-app
          image: demo-app:latest
          ports:
            - containerPort: 8080
Enter fullscreen mode Exit fullscreen mode

Create a service.yaml file:

apiVersion: v1
kind: Service
metadata:
  name: demo-app-service
spec:
  selector:
    app: demo-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: LoadBalancer
Enter fullscreen mode Exit fullscreen mode

4.2 Deploy to Kubernetes

Apply the Deployment and Service:

Read more at : Spring Boot Applications with Docker and Kubernetes

AWS Q Developer image

Your AI Code Assistant

Generate and update README files, create data-flow diagrams, and keep your project fully documented. Built to handle large projects, Amazon Q Developer works alongside you from idea to production code.

Get started free in your IDE

Top comments (0)

AWS GenAI LIVE image

Real challenges. Real solutions. Real talk.

From technical discussions to philosophical debates, AWS and AWS Partners examine the impact and evolution of gen AI.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay