Dockerize your Spring Boot application - Useful plugins and techniques to build efficient docker image
This repository contains sample setup for building optimised docker image and shows some useful plugins and techniques.
- Efficient docker image using Layered Jars.
- Multi-stage Docker build.
- Google’s Distroless base image with healthchecks without
bashorcurl - Configuring Non-root user in docker image.
- Cloud native buildpacks - with spring boot gradle plugin.
- Jib gradle plugin.
- Using docker-compose with gradle.
- Java 11
- Docker
| Step | Custom Image | Cloud native Image | Jib Image |
|---|---|---|---|
| Build image | docker build -t spring-docker-setup-healthcheck:0.0.1-SNAPSHOT . | ./gradlew bootBuildImage | ./gradlew jibDockerBuild |
| Start docker-compose | ./gradlew healthcheckComposeUp | ./gradlew bootAppComposeUp | ./gradlew jibComposeUp |
| Stop docker-compose | ./gradlew healthcheckComposeDown | ./gradlew bootAppComposeDown | ./gradlew jibComposeUp |
-
After successful installation, check if all applications are running
docker pse.g.docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2eab466c947d spring-docker-setup-jib-plugin:0.0.1-SNAPSHOT "java -cp /app/resou…" 7 seconds ago Up 7 seconds 0.0.0.0:53637->8080/tcp spring-docker-setup-jib 9cd791a65fef spring-docker-setup-healthcheck:0.0.1-SNAPSHOT "java org.springfram…" About a minute ago Up About a minute (healthy) 0.0.0.0:53551->8080/tcp spring-docker-setup-healthcheck 0bfcde6a2f2e com.rbiedrawa.docker.app/spring-docker-setup:0.0.1-SNAPSHOT "/cnb/process/web" 2 minutes ago Up 2 minutes 0.0.0.0:8080->8080/tcp spring-docker-setup
**** Notice healthy status in our
customimage. -
Next investigate how spring packaged the jars.
cd ./build/libs # Extract jar java -Djarmode=layertools -jar spring-docker-setup-0.0.1-SNAPSHOT.jar extract
-
Analyse created directories(application, dependencies, snapshot-dependencies and spring-boot-loader)
| Command | Description |
|---|---|
./gradlew tasks | Display all available tasks |
./gradlew bootRun | Run Spring boot application |
./gradlew bootRun --args='--spring.profiles.active=docker' | Run Spring boot application with 'docker' profile |
./gradlew displayDockerImageName | Displays docker image name |
./gradlew displaySampleDockerCompose | Displays sample docker compose file |
./gradlew bootBuildImage | Build docker image using spring boot plugin |
./gradlew bootAppComposeUp | Start application using docker compose plugin |
./gradlew bootAppComposeDown | Stop application using docker compose plugin |
./gradlew jibDockerBuild | Build docker image using jib |
- Production-grade Spring Boot Docker images
- Creating Efficient Docker Images with Spring Boot 2.3
- Jib plugin
- Gradle docker-compose plugin
Distributed under the MIT License. See LICENSE for more information.