Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Microservices mit Spring Boot

Dockerfiles für Microservices schreiben

Testen Sie unsere 2018 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Machen Sie sich damit vertraut, wie Sie Frontend- und Backend-Applikationen des Gästebuchs Docker-fähig gestalten und über Docker in Betrieb setzen können.

Transkript

Nachdem Sie Docker installiert haben, können Sie ihre eigentlichen Applikationen Docker-fähig gestalten. In diesem Video werden wir uns damit auseinandersetzen, wie wir die beiden Applikationen des Gästebuchs, die Fronted- und die Backend-Applikationen Docker-fähig gestalten können und wie wir sie über Docker in Betrieb setzen können. Der erste Schritt besteht zunächst einmal darin Eclipse ein wenig Docker-fähiger zu gestalten. Zu diesem Zweck öffnen wir den "Eclipse Marketplace" und suchen dort einmal nach "Docker". Wir installieren die "Eclipse Docker Tooling-Komponente". Dies wird ein paar Sekunden dauern. Sobald das abgeschlossen ist, haben Sie im Eclipse eine Unterstützung für Docker-Files, mit deren Hilfe Sie diese Docker-Files um einiges einfacher erstellen und bearbeiten können. Nachdem die Installation abgeschlossen ist und ihr Eclipsefenster wieder offen ist, öffnen Sie zunächst einmal die Guestbook-Frontend-Applikationen und öffnen Sie hier den Ordner "SRC/ main". Wir legen innerhalb von "Main" einen neuen Ordner an. Dieser Ordner heißt "Docker". In diesem Ordner legen wir dann per "New File" eine Datei mit dem Namen "Docker-File" an. Achten Sie bitte auf Groß- und Kleinschreibung. Und fügen Sie in dieser Datei folgende Inhalte ein. "From:java8" damit sagen wir an, dass das Image Java in Version 8 verwendet werden soll. Das heißt, wir bekommen auf Docker-Ebene eine Umgebung in der ein JDK 8 installiert ist. Wir legen einen speziellen Ordner an namens "TMP". Das benötigt "Spring-Boot", weil er dort seine temporären Dateien ablegt. Dann teilen wir Docker mit, dass es das "Jar-Archiv-guestbook-frontend-0.0.1 -snapshot.jar" unter dem Namen "App.jar" zu diesem Image hinzufügen soll. Wir sorgen dafür, dass das hinzugefügte Jar-Archiv immer das aktuelle Datum bekommt und wir legen dann den sogenannten Entrypoint fest. Nämlich Java soll ausgeführt werden. Das Jar-Archiv was auszuführen ist, ist "app.jar" und mit dieser etwas kryptischen Java-Security-Anweisung sorgen wir dafür, dass auch die Sicherheit in der virtuellen Maschine auf Java-Ebene initialisiert ist. Das reicht aus, um unsere Applikation für Docker fit zu machen. Wir müssen jetzt allerdings noch dafür sorgen, dass wir automatisch sowohl die Applikation bauen können, als auch dass in diesem Docker-File definierte Image angelegt bekommen. Zu diesem Zweck müssen wir einmal in die Datei "Pom.xml" hineinwechseln und hier den Reiter "Pom" aufmachen und müssen nun hier einige zusätzliche Informationen hinterlegen, um den Build-Prozess entsprechend auch ansteuern zu können. Um dies zu ermöglichen müssen wir ein weiteres Build-Plugin hinzufügen. Das Build-Plugin, was wir hinzufügen müssen, hat die Group-ID "com.spotify" und die Artifact-ID "Docker-Maven-plugin". Die Version ist 0.2.3. Konfiguration für dieses Plugin ist wie folgt, der Imagename ist die Artifact ID, also das ist letztlich der Name dessen, was genau werden soll auf Docker-Ebene. Das heißt, das Image wird "Guestbook-frontend" heißen. Das Verzeichnis, in dem sich das Docker-File befindet, ist "src/main/docker". Das ist das, was wir gerade angelegt haben und als Resourcen geben wir an, dass das Build-Directory, das Jar-Archiv beinhalten wird und dass das Jar-Archiv als solches dem Image mit hinzugefügt werden soll. Nachdem wir das einmal hinzugefügt haben und die pom.xml-Datei gespeichert haben, können wir nun auf die Kommandozeile wechseln und auf Ebene der Kommandozeile dann das Docker-Image bauen lassen. Es empfiehlt sich hier als Kommandozeile tatsächlich die Docker-Eingabeaufforderung zu verwenden, denn hier sind schon alle benötigten Umgebungsvariablen und Informationen gesetzt. Wir wechseln in das Verzeichnis, in dem sich unsere Applikation befindet. Das ist bei mir "boot_app/guestbook-frontend" Und jetzt können wir hier per "Maven-package-docker-build" den eigentlichen Vorgang anstoßen. Dieser Build-Vorgang wird einige Minuten dauern. Sobald er abgeschlossen ist, sind wir hier auf Ebene der Kommandozeile in der Lage und das Ergebnis einmal anzuschauen. Wenn Sie die Erfolgsmeldung sehen, können sich mit Hilfe von "Docker-Images" vergewissern, dass zwei neue Images im Repository befindlich sind. Das eine ist das Java-Image, was die Basis für unsere Guestbook-frontend-Applikation darstellt und eben das Image selber, in dem die Guestbook-frontend-Applikation sich befindet. Wir können nun einen Docker-Container auf Basis der Guestbook-frontend-Applikation starten. Dies machen wir mit Hilfe von Docker-run. Hier geben wir jetzt mit Hilfe von "-p8081:8081" ein sogenanntes "Port-mapping" an. Dieses Port-mapping sagt aus, dass der interne Port im Container 8081, das ist der zweite Parameter, auf den externen Port 8081, gemappt wird. Ansonsten könnten wir nämlich die Applikation im Browser nicht aufrufen. Der zweite zusätzliche Parameter, den wir hier angeben ist "- - Name-frontend". Damit stellen wir sicher, dass die Applikation, wenn sie läuft einen sprechenden Namen hat. Wir lassen sie als dimen laufen und wir starten sie mit dem "Guestbook-Forntend-Image". Das Ergebnis dieser Operation können wir dann mit "Docker-ps" uns anschauen und wir sehen die Applikation läuft. Nun können wir einen Browser öffnen und uns vergewissern, dass diese Applikation tatsächlich läuft. Wenn Sie die Docker-Toolbox einsetzen, dann können Sie die Applikation leider nicht über die Adresse "http://localhost" erreichen, sondern Sie müssen die Adresse, die Ihnen Docker anzeigt verwenden. Das ist in meinem Fall die IP-Adresse "192.168.99.100" und der Port ist 8081. Die Applikation läuft und ist bereitgestellt und wir können uns nun dem Backend widmen. Auf Ebene des Backends machen wir es und ganz einfach. Wir kopieren zunächst aus der pon.xml der Forntend-Applikation die benötigten Informationen, um im Backend den Build-Prozess für Docker ebenfalls anstoßen zu können. Das können wir unverändert einfügen. Hier sind keine weiteren Anpassungen notwendig und wir kopieren auch den Inhalt des Docker-Files. Am besten kopieren wir gleich den gesamten Ordner, in dem sich das Docker-File befindet, indem wir ihn markieren und "Steuerung C" drücken und fügen ihn dann auf Ebene des Main-Ordners in der anderen Applikation wieder ein. Wir öffnen das Docker-File der Backend-Applikation und die einzige Änderung, die wir jetzt hier noch vornehmen müssen, ist dass wir Frontend in Backend umbenennen. Der Rest der Aufrufe kann identisch bleiben. Nun können wir zurückwechseln in die Docker-Eingabeaufforderung und auch dieses Image erstellen lassen. Wir wechseln also in den entsprechenden Ordner und rufen hier ebenfalls "Maven-package-docker-build" auf und können nun beobachten, wie unsere Applikation gebaut wird und wie das Image für Docker erzeugt wird. Dieser Vorgang dauert wieder einige Sekunden. Sobald er abgeschlossen ist, können wir auf Basis dieses Images dann einen Container starten. Da hier bereits alle Komponenten vorhanden waren, ist es nun sehr, sehr simpel geworden. Wir starten den Container über das Docker- run- Kommando, wieder unter Angabe eines Port-mappings. Diesmal 8080 auf 8080. Das Ganze soll wieder im Hintergrund laufen, bekommt den Namen "Backend" und das Image, dass wir starten wollen heißt "Guestbook-Backend". Damit ist der Container, basierend auf dem Image bereits in Betrieb genommen. Wir können uns mit Hilfe von "Docker-ps" davon vergewissern und wir können nun im Browser einmal direkt das Backend aufrufen. Mit Hilfe des Browsers können wir nun davon überzeugen, dass das tatsächlich alles funktioniert hat. Wir öffnen ein neues Tab und geben als Adresse "192.186.99.100:8080" und den virtuellen Pfad "Guestbook" ein und werden nun sehen, dass wir ein leeres Re als Rückgabe erhalten haben. Das bedeutet die Applikation funktioniert ordnungsgemäß und ist auch bereitgestellt worden. Lassen Sie uns nun ins Frontend zurückwechseln und hier einmal versuchen einen neunen Eintrag hinzuzufügen. [typing] [typing] Ein Klick auf "Speichern" wird uns allerdings eine unangenehme Überraschung bescheren. Es hat nämlich nicht funktioniert. Hintergrund ist, dass wir auf Ebene der Frontend-Applikation fest verdrahtet mit der Adresse "http://localhost" arbeiten und "http://localhost" zeigt auf eine andere IP-Adresse, als es die "192.168.99.100" ist. Auf Ebene von Docker for Windows dürfte das reibungslos funktioniert haben, aber wenn Sie die Docker-Toolbox einsetzen, müssen Sie jetzt eine Änderung noch am Frontend vornehmen. Und die werden wir jetzt noch vornehmen, damit die Applikation tatsächlich im Docker-Umfeld ordnungsgemäß funktioniert. Die Änderungen, die wir umsetzen müssen, befinden sich in den Dateien "add.js" und "index.js" der Frontend-Applikation. Und hier müssen wir die korrekte IP-Adresse eingetragen, nämlich die "198.168.99.100" und dasselbe dann auch nochmal bei der anderen Datei. Sobald dies geschehen ist, können wir die Applikation noch einmal erzeugen und noch einmal bereitstellen lassen. Wir führen also auf Ebene des Docker-Terminals erneut den "Maven-build" aus. Das machen wir, indem wir das Kommando "Maven-package-docker-build" ausführen. Nun gilt es sich einige wenige Sekunden zu gedulden. Der Build-Prozess wird jetzt deutlich schneller laufen, als beim ersten Mal. Da sämtliche benötigte Komponenten bereits heruntergeladen worden sind und auch das Bauen des eigentlichen Images jetzt sehr, sehr schnell geht. Der Prozess ist inzwischen schon abgeschlossen und jetzt müssen wir zunächst einmal den laufenden Docker-Container mit dem Namen "Frontend" beenden. Anschließend entfernen wir ihn. Das machen wir mit Hilfe von "Docker-rm", um ihn dann neu anlegen zu lassen. Das machen wir wieder mit"Docker-run-p8081" auf " 8081-d", damit er im Hintergrund läuft. Der Name ist "Frontend" und das Ganze basiert auf dem "Guestbook-Frontend-Image". Damit ist die neue Version der Applikation in Betrieb gesetzt worden und wir können uns nun im Browser anschauen, ob wir jetzt in der Lage sind Datensätze anzulegen. Ich klicke also auf Ebene der Gästebuch-Applikation auf "Neuen Eintrag hinzufügen" und gebe einen Titel an, [typing] einen Text [typing] und meinen Namen [typing] und klicke auf "Speichern". Und siehe da, diesmal hat alles funktioniert. Die Daten werden gespeichert und werden auch geladen und unsere Applikation läuft auf Ebene von Docker. Und damit haben wir einmal einen ganz typischen Docker-Workflow abgebildet. Wir haben unsere Applikation nämlich Docker-fähig gemacht, indem wir die Maven-Konfigurationsdatei "pom.xml" angepasst haben, wir haben Docker-Files den Applikationen hinzugefügt, die Auskunft darüber geben, wie denn die Umgebung für die Applikation aussehen soll, wir haben das Ganze auch gebaut, wir haben Docker-Images erzeugt, wir haben diese Docker-Images in Betrieb gesetzt und wir haben sogar eines dieser Docker-Images wieder aus dem Betrieb genommen, neu erstellt und dann wieder in Betrieb genommen. Das ist eine ganze Menge und das ist auch der ganz typische Fluss, den man bei der Arbeit mit Docker hat. Was Sie auch gesehen haben könnten ist, dass wir in der Lage sind diese Vorgänge weitestgehend zu automatisieren, denn es handelt sich in aller Regel lediglich um Kommandozeilenaufrufe und die lassen sich wie gesagt über Tools automatisieren und damit können wir uns das Leben natürlich zukünftig noch deutlich mehr erleichtern.

Microservices mit Spring Boot

Sehen Sie, wie moderne Applikationen für Cloud-Umgebungen entstehen.

2 Std. 14 min (12 Videos)
Solides Training
A. K.

Moin, soweit so gut, danke dafür. was ich mir hier gewünscht hätte: - Bessere Struktur der Beispielapplikation, z.B. nach DDD-Methodik / hexagonaler Architektur. Die Codestruktur wirkt für mich wie "mal eben zu Anschauungszwecken zusammengeklatscht" und funktioniert zwar, wird aber sehr schnell unschön. Klar ist das hier ein Tutorial, aber wo wenn nicht in solchen Videos sollte man 150% geben? Man muss das ja auch nicht unbedingt erklären und soviel Overhead gäbe es da nicht.. was nicht lief (osx): - im vorletzten Kapitel nutze ich das native docker for mac anstatt der toolbox (vorteil: kein virtualbox) und musste dadurch das maven-plugin in Version 0.4.13 statt 0.2.3 nutzen und die DOCKER_HOST Variable auf den Standard-unixhost setzen via 'export DOCKER_HOST=unix:///private/var/tmp/docker.sock' im Terminal - dann lief der mvn package docker:host - befehl. Hat mich auch nur 1,5 Stunden googlen gekostet ;) Aber wie gesagt, ansonsten gutes Training. Vielen Dank. Viele Grüße, Dominik Guhr

 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!