Hello Everyone, Today we are going to talk one of the most important features in latest version of spring boot 3 and spring 6. Spring Boot has introduced inbuilt support for docker compose via a module called spring-boot-docker-compose.
We will first talk about what docker compose is and then we will start diving into spring boot support for the same.
Docker Compose:
As per the official docker compose documentation, "Docker Compose is a tool for defining and running multi-container Docker applications."
Generally when you are building any kind of software, you interact with lot of different applications. for e.g if you are building a e-commerce web application using spring-boot or any popular java framework, you will need front-end application code, backend application with application server, an database, probably a caching service like redis/EHcache. Without docker compose for each one of these applications configuration you will have to define Dockerfile and then build those docker images and container.
So, In a nutshell, If you have more than one Dockerfile use docker compose. It provides a single configuration file for all the services (i.e one service per applications like your backend app, database) and with a single command you can create docker containers for these services and wire them up together.
Sample Docker compose file:
version: '3.1' services: backend: build: backend ports: - "7790:8080" networks: - spring-mysql db: image: mysql restart: always ports: - "7791:3306" environment: MYSQL_USER: root MYSQL_PASSWORD: password MYSQL_DATABASE: blogs networks: - spring-mysql networks: spring-mysql:
How to run docker file:
docker compose up
How does Spring Boot 3 helps here
With the new module called spring-boot-docker-compose, you don't need to execute above command to create the containers.May be some of you will say what is the use of this single line work?
But with this new support if you have the spring-boot-docker-compose dependency in class-path, spring boot will automatically take care of creating all the required docker containers for you and its easy in automated deployment pipelines.
Dependency to add in your maven configuration of spring boot project.
<dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-docker-compose</artifactid> <version>3.1.0-RC1</version> </dependency>
How does spring boot finds out the docker compose:
Spring boot will look for the below files in class-path:
- compose.yaml or compose.yml
- docker-compose.yaml or docker-compose.yml
if you want to refer custom file name add below property in application.properties.
spring.docker.compose.file = custom.yaml
where custom.yaml is your file name.