Run Spring Boot Application in Docker with Profile

Running a Spring Boot application in a Docker container is a great way to package and deploy your application. By packaging your application in a Docker container, you can easily distribute it to other machines and ensure that it runs in the same environment on each machine. In this blog post, I will show you how to run a Spring Boot application in a Docker container for a specific Spring Boot profile.

Create Spring Boot Application

First, let’s start by creating a Spring Boot application. You can use the Spring Initializr to generate a new Spring Boot project with the dependencies that you need. For this example, we will use the web and actuator dependencies.

Once you have generated your Spring Boot project, open it in your favorite editor and navigate to the src/main/resources directory. In this directory, create a new file called application-prod.properties and add the following content to it:

spring.profiles.active=prod

This file contains the configuration for the prod profile of your Spring Boot application. You can use this file to specify any additional configuration for your prod profile, such as the database connection details or the location of your logs.

Create Dockerfile

Now that we have our Spring Boot application and the configuration for the prod profile, we can create a Dockerfile to package our application in a Docker container. Create a new file called Dockerfile in the root directory of your Spring Boot project and add the following content to it:

FROM openjdk:8-jdk-alpine

COPY target/your-application-name.jar /app/your-application-name.jar

CMD java -jar /app/your-application-name.jar --spring.profiles.active=prod

This Dockerfile uses the openjdk:8-jdk-alpine image as the base image for the container. It then copies the jar file containing your Spring Boot application to the /app directory in the container and sets the java command to run the jar file with the prod profile.

The last line in a Dockerfile, will run your Java application and will pass Spring Boot Profile name as a command-line argument.

Build Docker Image

Once you have created the Dockerfile, you can build the Docker image for your Spring Boot application by running the following command:

$ docker build -t your-application-name .

This command will build the Docker image for your Spring Boot application and tag it with the name your-application-name.

Run Application in Docker Container

You can then run the Docker image by using the docker run command:

$ docker run -p 8080:8080 your-application-name

This command will run the Docker image and map the container’s 8080 port to the host’s 8080 port. You can then access your Spring Boot application by visiting http://localhost:8080 in your web browser.

Pass Different Spring Boot Profile Name at Runtime

In conclusion, running a Spring Boot application in a Docker container is a great way to package and deploy your application. By using the --spring.profiles.active command line argument, you can easily run your Spring Boot application with a specific Spring Boot profile. This can be useful for running different versions of your application, such as a development version and a production version.

You can pass a different Spring Boot profile name to your application in Docker container using command-line argument:

$ docker run -p 8080:8080 -e spring.profiles.active=dev your-application-name

I hope this tutorial was helpful to you! To learn more about building Spring Boot applications, check other Spring Boot tutorials.

Happy learning!