Von Philipp Kürsten auf Donnerstag, 28. November 2019
Kategorie: Application Development

Dockerfiles mit Maven bauen

In der Vergangenheit wurde unter dem Deployment-Artefakt eines Entwicklungszyklus meist eine JAVA-Archive (JAR), eine Web-Archive (WAR) oder ein Enterprise-Archive (EAR) verstanden. Diese konnten in Verbindung mit Maven sehr einfach erzeugt und in ein zentrales Repository, wie einem Nexus oder Artifactory, abgelegt werden.

Während sich die Laufzeit-Umgebung immer mehr in Richtung Container-Systemen wie Docker und Kubernetes wandelt, müssen sich auch die notwendigen Deployment-Artefakte verändern.

Damit die gesamten Release- und Deployment Pipelines, welche in vielen Unternehmen bereits bestehen, nicht vollständig umgestellt werden müssen, eignet sich ein Blick auf das Dockerfile-Maven-Plugin. 

Das Dockerfile-Maven-Plugin 

Das Dockerfile-Maven-Plugin lässt sich mühelos in bestehende Maven-Pipelines einbinden und eignet sich für folgende Aufgaben:

Die aktuelle Version des Maven-Plugins ist 1.4.13 und kann wie folgt in Maven integriert werden:

Voraussetzung 

Damit das Plugin einwandfrei verwendet werden kann, müssen folgende Voraussetzungen erfüllt werden:

Einstieg in die Konfiguration 

Nachfolgend wird die grundsätzliche Konfiguration anhand eines kleinem Beispiels erläutert. Die verschiedenen Konfigurationsmöglichkeiten werden daraufhin genauer erläutert. 

Zunächst einmal wird definiert, dass die Goals Build (Bauen eines Dockerfiles) und Push (Veröffentlichen eines Dockerfiles) verwendet werden. Standmäßig werden diese Goals an die Phasen Package respektive Deploy des Maven Prozesses angefügt.

Darüber hinaus müssen weitere Information dem Plugin übermittelt werden:

Das dazugehörige Dockerfile sieht in diesem Beispiel wie folgt aus und bezieht sich auf eine Spring-Boot Anwendung: 

Einen Container mehrfach Taggen

In vielen Fällen wird ein Docker-Container mit mehr als nur einem Tag versehen. Damit allerdings für jeden Tag nicht der gesamte Docker- Container neugebaut werden muss, empfiehlt es sich die beiden Prozesse (Build und Taggen) voneinander zu trennen.

Die nachfolgende Konfiguration veranschaulicht dieses Vorgehen noch einmal: 

Während im ersten Beispiel der Standard Prozess vom Dockerfile-Maven-Plugin verwendet wurden, müssen hier nun die verschiedenen Goals  den jeweiligen Maven-Phasen selbstständig zugeordnet werden. Aus obiger Konfiguration ergibt sich somit folgender Prozess:

1. Bauen des Docker-Container
2. Taggen des Container (Projekt-Version und Latest)
3. Jeden Tag veröffentlichen (Projekt-Version und Latest)

Für weitere Informationen bezüglich dieses Plugins eignet sich auch ein Blick auf die Dokumentation auf GitHub. Hier wird beispielsweise auch erläutert, wie eine eigene Registry angegeben werden kann und  die Authentifizierung gegenüber dieser stattfindet sollte. 

Kommentare hinterlassen