Interview mit Roland Huß

Docker und Microservices – eine perfekte Symbiose
Kommentare

Docker revolutioniert die Art und Weise, wie Applikationen gebaut und in Produktion gesetzt werden. Bisher werden Java Enterprise WARs oder EARs in vorinstallierte Java-EE-Server deployt. Jetzt können dank Docker die Anwendungen direkt in Containern ausgeliefert werden, die den Ausführungskontext gleich mitbringen. Wie das funktioniert, wird Roland Huß in seiner Session „Docker für Java-Entwickler“ im Rahmen der DevOps Days auf der diesjährigen JAX zeigen. 

Du schreibst in deinem Abstract, Docker verändert die Art und Weise, wie Anwendungen in Produktion gesetzt werden. Wurden bisher Java-Enterprise-WARs oder EARs in vorinstallierte Java-EE-Server deployt, können mit Docker Anwendungen direkt in Containern ausgeliefert werden, die den Ausführungskontext mitbringen. Worin liegen hier deiner Meinung nach die größten Vorteile?

Roland Huß: Der wohl größte Vorteil ist, dass Entwickler mit Docker die volle Kontrolle über eben diesen Ausführungskontext erhalten. Das bedeutet, die Entwicklerin selbst entscheidet und testest auch mit der Umgebung, die letztendlich in Produktion landet. Die Wahl eines JEE-Servers, Laufzeitparameter, Heapspeicher-Setup, all das wird bereits bei der Entwicklung festgelegt. Damit lässt sich das wohlbekannte „Works-for-me“ Syndrom weitgehend verhindern. Ein weiterer Vorteil ist die nahezu perfekte Isolation, die eine Container-Technologie bietet. Natürlich sind auch WARs weitgehend isoliert deploybar, jedoch gibt es hier Grenzen. Das JMX-Subsystem z.B. teilen sich alle einem JEE Server betriebenen Webanwendungen.

JAX 2015

JAX 2015

Die JAX (20.-24. April 2015) bildet mit der W-JAX Europas führende Konferenz-Serie für Enterprise-Technologien, agile Methoden und Software-Architekturen. Gemeinsam mit den begleitenden Business Technology Days und der BigDataCon verleiht sie IT-Professionals führender Unternehmen aller Branchen die entscheidenden Impulse für digitale Wertschöpfung und Innovation – zwei Mal im Jahr. Noch bis morgen, 12. Februar profitieren Sie von den Frühbucherrabatten. Mehr Informationen unter http://jax.de.

Docker revolutioniert das Ausrollen von Software – aber ist das alles? Welche Veränderungen ergeben sich für das Entwickeln von Anwendungen?

Huß: Unabhängig davon, dass man natürlich existierende Enterprise-Anwendungen samt ihrer Server unverändert in einen Container packen kann, bietet es sich auch an, die Architektur zu überdenken. Die aktuell omnipräsenten Microservices, die im Gegensatz zu monolithischen Ansätzen viele Vorteile, aber auch Herausforderungen bieten, bilden mit dem Docker-Ökosystem eine nahezu perfekte Symbiose.

Des Weiteren werden sich Entwickler wieder mehr mit operativen Aspekten beschäftigen müssen. Auch wenn sich das zunächst erstmal nach mehr Aufwand anhört, ist das eine gute Sache, da man bei der Entwicklung einer Applikation deren finalen Betrieb zu keiner Zeit aus den Augen verlieren sollte.

Für reproduzierbare Builds ist es wichtig, nicht nur den Sourcecode zu verwalten, sondern es müssen streng genommen auch Entwicklungstools wie Compiler (javac, go) oder Buildsysteme (Maven, Gradle) versioniert werden. Mit Docker lässt sich das wunderbar realisieren indem man diese Kommandos aus Containern heraus startet. D.h. Entwickler werden in Zukunft auch immer öfters Tools aus Containern heraus starten, statt diese direkt von der Kommandozeile aufzurufen. Peter Rossbach geht darauf übrigens im Java Magazin 4.2015 ausführlich auf diese Technik ein.

Dein Vortrag heißt „Docker für Java Entwickler.“ Welche Besonderheiten gibt es bei Docker für den Einsatz im Java-Kontext zu beachten?

Huß: Wenn man seine Java-Anwendung als Docker Image ausliefern möchte, ist es zunächst einmal wichtig, welches Java-Basis-Image man wählt. Neben dem offiziellen „java“-Image, das auf OpenJDK basiert, gibt es ein Vielzahl weiterer Alternativen. Dabei ist neben lizenzrechtlichen Fragen bei der Verwendung einer Oracle JVM auch die Größe des Images ein Auswahlkriterium. Während das offizielle Image stolze 630 MB auf die Waage bringt, gibt es auch schon JRE Images die nur ein viertel so groß sind. Die Suche nach dem „perfektem“ Java Image ist aber noch längst nicht abgeschlossen.

Daneben ist es aber auch wichtig, Docker nahtlos in den Entwicklungsprozess einzubinden. In der Java-Welt haben sich die Build-Tools Ant, Maven und Gradle durchgesetzt. Für all diese Systeme gibt es verschiedene Plug-ins und Erweiterungen, um Docker aus dem Build heraus anzusprechen, sei es zur Erstellung von Applikationsimages oder zur Ausführung von Integrationstests. Hier sollte man sich die verschiedenen Alternativen ansehen, vergleichen und das am beste passende auszuwählen.

Docker steht im Kontext von DevOps als ein zentrales Tool da, um Teams mit echter End-to-End-Responsibility für das Entwickeln und den Betrieb von Software-Komponenten zu ermöglichen. Heißt das für den Entwickler nicht eigentlich, dass er sich jetzt zusätzlich auch um den Betrieb kümmern muss?

Huß: Ja, das ist tatsächlich so. Ich sehe es aber weniger als Last oder zusätzliche Bürde, vielmehr ist es ein wichtiger Schritt hin zu einem holistischeren Ansatz, der die verschiedenen Aspekte die Entwicklung und Betrieb gemeinsam betrachtet. Jedoch muss und kann der Entwickler natürlich nicht alle betrieblichen Aufgaben abdecken. Docker bietet hier eine klar gezogene Linie an: Die Admins sind für den Betrieb der Container zuständig, die Developer sind für den Betrieb innerhalb des Containers zuständig. Ob das in dieser Strenge gelebt werden kann, sei dahingestellt. Es wird sicher auch Setups geben, bei denen beispielsweise die Basis-Images von Operations bereitgestellt und gepflegt werden.

Unabhängig davon, wo man die Grenze zieht, es sind auf jeden Fall kurze Kommunikationswege zwischen Dev und Ops nötig, um Probleme innerhalb der Container schnell beheben zu können. Das gilt aber natürlich generell und unabhängig von Docker.

Docker hat jüngst seine neuen Enterprise-Services vorgestellt – und damit nicht nur Lob geerntet. „Docker entfernt sich immer mehr von der ursprünglichen Mission, einen universellen Container-Standard zu etablieren, hin zu einer umfassenden Tool-Plattform“, hatte das CoreOS-Team kritisiert und seine eigene Container-Technologie Rocket ins Rennen geschickt. Was hältst du von der Kritik?

Huß: Ich finde die Kritik nur zum Teil berechtigt. Dass sich das Docker-Universum ausdehnt und sich weiter von dem Unix-Baukastenprinzip entfernt, ist sicher richtig. Für uns Entwickler sind es aber gerade die Extra-Features wie die Docker Registry oder die Unterstützung bei der Erstellung von Images mit Dockerfiles, die für die Entwicklung von containerisierten Applikationen wichtig sind. Daher ist es meiner Meinung nach gut, dass sich dafür ein De-facto-Standard über das Containerformat hinaus gebildet hat. So wird der eigentliche Paradigmenwechsel nicht noch durch eine weitere Zerfaserung der ohnehin schon sehr umfänglichen Toollandschaft behindert.

Nichtsdestotrotz, Konkurrenz belebt das Geschäft. Ich bin auf jeden Fall schon gespannt, wohin die Reise geht und ob sich der Plug-in-Ansatz von Docker oder das Baukastenmodell von CoreOS durchsetzen wird.

Roland Huß ist ein erfahrener Softwarearchitekt und Leiter der R&D-Abteilung bei der ConSol Software GmbH, einer IT-Firma mit Fokus auf Java-Entwicklung und IT-Dienstleistungen. Roland ist ein aktiver Open-Source-Entwickler und verantwortlich für die JMX-HTTP-Bridge „Jolokia“, hat eine heiße Leidenschaft für Chilis und leidet heiß mit dem FCN.
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -