How to deploy a Spring Boot application with Docker
For our image we use the alpine linux listribution. This is a minimalistic distribution ideal for our deployment.
We copy the jar file to the /opt directory as suggested by the FHS
## alpine linux with JRE FROM openjdk:8-jre-alpine ## copy the spring jar COPY target/*.jar /opt/myApp.jar CMD ["/usr/bin/java", "-jar", "/opt/myApp.jar"]
To have a runnable jar you need to repackage the default jar.
Here you can find the official documentation:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
Build and run
You can build your Dockerfile with e.g.:
docker build -t spring-example .
and run it with:
docker run -it -p 8080:8080 spring-example
Error without repackaging
If you get this error
no main manifest attribute, in [name of your app] something went wrong with the
Verifiy that it is correctly configured.
Alpine image size
The alpine image size is smaller compared to other distributions.
The version with JRE (8-jre-alpine) is 82MB, the JDK's version is 102MB.