1. Überblick
In diesem Artikel schauen wir uns an wie wir mit dem Maven Plugin docker-maven-plugin unsere Spring Boot Anwendung in den Docker Container verpacken und diesen dann ausführen. Mit dem Maven Plugin von fabric8 ist es ganz einfach aus der Spring Boot Anwendung ein Docker Image zu bauen, testen und über eine Continuous Delivery Pipeline zu deployen.
2. Maven Dependency
Als erstes fügen wir in unserer pom.xml
das Maven Plugin docker-maven-plugin hinzu:
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<configuration>
<images>
<image>
<name>sample/dockerjava</name>
<build>
<contextDir>${project.basedir}</contextDir>
<assembly>
<descriptorRef>artifact</descriptorRef>
</assembly>
</build>
</image>
</images>
</configuration>
</plugin>
Wir konfigurieren das Plugin mit einer externen Dockerfile um den Container zu beschreiben. Dafür definieren wir im Element contextDir
den Pfad zu der externen Dockerfile. In unserem Fall liegt die Dockerfile direkt neben der pom.xml
, hierfür setzen wir den contextDir
auf ${project.basedir}
. Über das Element assembly
wird gesteuert, was gebaut werden soll und welche Dateien hinzugefügt sollen.
Vordefinierte Assembly Deskriptoren
- artifact-with-dependencies fügt das Artefakt mit allen Dependencies hinzu.
- artifact fügt das Artefakt ohne Dependencies hinzu.
- project fügt das ganze Maven Projekt ohne
/target
Verzeichnis hinzu. - rootWar fügt das Artefakt als ROOT.war hinzu.
Das Beispiel zeigt ausschließlich wie ein Docker Image gebaut wird, es ist aber auch möglich ein automatisches Ausführen des Containers im configuration
Element zu konfigurieren um es zum Beispiel in Integration Tests einzubinden.
3. Dockerfile
Im nächsten Schritt erstellen wir die Dockerfile und legen diese neben der pom.xml
ab:
FROM openjdk:8-jre-alpine
COPY maven/*.jar /app.jar
EXPOSE 8080
CMD ["/usr/bin/java", "-jar", "-Dspring.profiles.active=default", "/app.jar"]
Für den Docker Containern verwenden wir das openjdk:8-jre-alpine
Image, es enthält alles was wir benötigen um Java Anwendungen im Docker Container auszuführen. Unser Artefakt der Spring Boot Anwendung wird in den maven/
Ordner des Docker Containers hinzugefügt. Wir kopieren die Anwendung auf die Root Ebene und veranlassen in der letzten Zeile das Starten der Anwendung. Damit wir auch Zugriff von Außen auf die Anwendung haben, muss der Port 8080 exposed werden.
4. Docker Container ausführen
Mit mvn docker:build wird der Container gebaut, hierbei wird in diesem Schritt unter target/docker/sample/dockerjava
ein build/
Ordner generiert wo zum einen das Dockerfile zu finden ist und zum anderen das Artefakt der Spring Boot Anwendung. In dem tmp/
Ordner liegt das gebaute Docker Image mit unserer Spring Boot Anwendung.
Nach dem Bauen findet ihr über den Befehl docker images das fertige Image im Repository, anschließend könnt ihr es im Docker starten:
docker run -p 8080:8080 sample/dockerjava
5. Fazit
Mit dem Maven Plugin von fabric8 lässt sich aus einer Spring Boot Anwendung ganz einfach ein Docker Container bauen, testen und ausführen. In diesem Artikel haben wir uns auf das Bauen konzentriert. Wie ihr den gebauten Docker Container auf OpenShift deployen könnt, erfahrt ihr im nächsten Artikel.
> Eine Spring Boot Anwendung im Docker-Container nach OpenShift deployen
Source Code auf GitHub: https://github.com/softwarehandwerk/sample-docker-java-app