How to deploy a Spring Boot application with Docker

Dockerfile
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:
spring-boot:repackage
<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 spring-boot-maven-plugin
.
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.