© Excellent backgrounds/Shutterstock.com
Kolumne: Docker rockt

JavaDocker mit Maven steuern


Ein bis dato sehr weit verbreitetes Vorgehen, um Java-Applikationen zu deployen, ist die Nutzung eines Java-EE-Application-Servers. Docker bietet eine simple und leichtgewichtige Alternative, Java-Applikationen zu bauen und in Produktion zu setzen: Jetzt können die Anwendungen vollständig inklusive des Servers in Docker-Containern ausgeliefert werden. Der Ausführungskontext wird dabei gleich mit verpackt, und lästige Anpassungen entfallen. Mit dieser Methode können die Container überall laufen und schon in der Entwicklung für den Betrieb zusammengestellt werden.

Video: Continuous Delivery mit Docker

Viele Java-Applikationen werden mithilfe von Maven gebaut. Eine logische Konsequenz aus diesem Vorgehen ist es, mithilfe eines Maven-Plug-ins das Zusammenstellen und Steuern der Container zu erleichtern. Dabei stehen zwei Aspekte im Vordergrund: die Erstellung von Docker-Containern aus dem Build-Prozess heraus und die Realisierung autarker Integrationstests. Anhand eines einfachen Service, der HTTP-GET-Anfragen in eine PostgreSQL-Datenbank protokolliert, wird gezeigt, wie sich Docker mithilfe eines Maven-Plug-ins in den Java-Build-Prozess einfach integrieren lässt.

Das Beispiel nutzt zwei Docker-Images: ein Standard-PostgreSQL-Image von Docker Hub und eines, das den eigentlichen Service enthält [1]. Die Aufgabe der Plug-ins ist es, das Serviceimage zu bauen und vor dem Integrationstest sowohl einen PostgreSQL-Container als auch einen Container mit der Anwendung zu starten, wobei der DB-Container in den Servicecontainer gelinkt wird [2]. Der Service erzeugt dann beim Start automatisch das Schema, falls noch nicht vorhanden, via Flyway [3].

Obwohl dieses Set-up sehr einfach ist, sind ein paar Dinge zu beachten: Der Container mit dem HTTP-Service greift bei der Initialisierung bereits auf die Datenbank zu, sodass der PostgreSQL-Container zu diesem Zeitpunkt bereits vollständig laufen muss. Der Integrationstest darf auch erst loslaufen, wenn alle Container gestartet und initialisiert sind.

Natürlich muss ein Docker-Daemon laufen, der auf einem Port horcht, da das Docker-Maven-Plug-in seine HTTP-Schnittstelle nutzt. Der Docker-Daemon kann in einer Cloud oder der lokalen virtuellen Maschine, beispielsweise durch das Projekt boot2docker [4], bereitgestellt sein. Auf dem Entwicklungsrechner muss kein Docker-CLI installiert sein. Das Docker-Maven-Plug-in spricht direkt via HTTP mit dem Daemon. Auf jeden Fall müssen die Docker-Umgebungsvariablen entsprechend gesetz...

Exklusives Abo-Special

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang