1. Creating a Docker Compose File (YAML) for a Spring Boot Project and PostgreSQL
Note: If you are not familiar with YAML, you can refer to YAML Ain't Markup Language
In this document, we will create a docker-compose setup using both Spring Boot application and PostgreSQL database. Note that PostgreSQL is already available as a Docker image in Docker hub, so we just need to pull it from there, you just need to select the version you need from there, I have chosen 14.
We assume you have already completed all the steps in 1. Creating a Dockerfile for a Spring Boot project, i.e., you have already created the image of the Spring Boot project.
In what follows, we will create the docker-compose.yml file which allows us to combine Spring Boot application and PostgreSQL database in this document.
1. Create a file named docker-compose.yml in the project root directory
2. Copy the following content into that file. Note. replace week3-docker2 with the name of your service.
# the version of the Docker compose
version: '3.8'
services:
# our first service
week3-docker2:
build: . #the location where it can find the Dockerfile to build this service
# using the already built image of the Spring Boot project
image: 'docker-week3:latest'
# if we want to build an image, we can use "build"
# restarts the container if it stops.
restart: always
# mapping local machine port along with port inside a docker container
ports:
- 8080:8080
# Express dependency between services.
depends_on:
- postgre_db
# Allows adding environment variables
environment:
- spring.datasource.url=jdbc:postgresql://postgre_db:5432/esi2023
# note that we have replaced the localhost with the name of the database service
- spring.datasource.username=postgres
- spring.datasource.password=postgres
# our second service
postgre_db:
# we do not need a build command here because we will pull an already built image from docker hub
image: "postgres:14"
restart: always
ports:
- 5432:5432
environment:
- POSTGRES_PASSWORD=postgres
- POSTGRES_ROOT_PASSWORD=postgres
- POSTGRES_USER=postgres
- POSTGRES_DB=esi2023
#volumes:
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"] #checking the connection status of a PostgreSQL database server
interval: 10s
timeout: 5s
retries: 5
Running Spring Boot Application and PostgreSQL Database Using Docker Compose
Now we have our docker-compose setup for this application.
1. Clean up your project by deleting /target folder. In the explorer bar of VSCode, expand Maven, expand the project, under lifecycle, run clean.
2. Converts our .java source code into a .jar and puts it into the /target folder. In the explorer bar of VSCode, expand Maven, expand the project, under lifecycle, run package.
3. Use the following command to build images in the docker-compose. yml file.
$ docker-compose build
4. Check how many containers are running now by using the following command
$ docker ps
5. Use the following command to run the whole setup using docker-compose, which will capture the docker-compose.yml and start running using the instructions given on that file.
$ docker-compose up
6. Check how many images there are (there should be 2 images) by using the following command
$ docker image ls
7. Check again how many containers are running now by using the following command
$ docker ps
8. Test your application by sending some HTTP requests, everything should be working as expected
7. You can use the following command to stop docker-compose.
$ docker-compose down