Wie sieht bei Euch das Deployment einer Spring Boot Anwendung aus?

Avalon

Bekanntes Mitglied
Meine Anwendung habe ich in Eclipse mit Spring, Spring Boot und Maven erstellt. Aktuell muss ich folgendes machen um sie auf meinem Server mit Plesk in einem Docker Container laufen zu lassen.

Auf der Windows Commandzeile im Projektordner:
Code:
mvnw clean package
mvnw spring-boot:build-image
docker save -o nameselbstvergeben.tar.gz vd:0.0.5-SNAPSHOT
Die nameselbstvergeben.tar.gz kopiere ich dann mit WinSCP in einen Ordner auf meinen Server. (ca. 300 MB bei 8 Mbit/s Upload, das dauert).
Ich wechsle danach mit Putty auf meinen Server und lade die nameselbstvergeben.tar.gz Datei.
Code:
docker load -i selbstvergebenername.tar.gz
Danach start ich den Container mit
Code:
docker run -d --rm -p127.0.0.1:80:8080 --name nameselbstvergeben vd:0.0.5-SNAPSHOT
Das klappt auch alles ganz gut. Aber wenn ich nur eine einzige Codezeile ändere, muss ich das alles nochmal machen. Wieder und wieder und wieder. Gibt es da eine geschmeidigere Lösung? Ich hab da noch nicht so die Ahnung.
 

httpdigest

Top Contributor
Da gibt es sehr viele verschiedene Lösungen. Statt deinem aktuell "Push-getriebenen" Deployment-Prozess (du musst halt das Image auf die Zielmaschine hinpushen/kopieren und dort dann auch "push-getrieben" ausführen (indem du selber dich einloggst und docker aufrust)),
könntest du einen "pull-getriebenen" Ansatz fahren. Zuersteinmal solltest du aber Docker Images in einer Docker Registry ablegen (die kannst du selber hosten mit z.B. "Nexus"). Wenn du bei deinem aktuellen Docker-Setup bleiben willst, kannst du z.B. für einen "pull-getriebenen" Ansatz "watchtower" verwenden (Google mal "Docker Watchtower"). Das pollt ab und zu ein Docker Registry und guckt, ob es eine neue Version eines Images gibt und startet das dann (bzw. ersetzt einen aktuellen Container damit).
Die Pandora-Box "Kubernetes" brauchen wir hier erstmal noch nicht aufzumachen.
Darüberhinaus kannst du natürlich den gesamten Prozess (also auch den Build-Prozess) automatisieren und mehr in Richtung "Continuous" bekommen. Hier eignen sich kostenlose CI/CD Lösungen wie GitHub Actions (wenn du z.B. den Sourcecode deiner Anwendung über Git verwaltest). Dann kannst du theoretisch auch die GitHub Container Registry (als Docker Registry) nutzen und deinen ganzen CI/CD Prozess in GitHub integrieren.
 

DrPils

Bekanntes Mitglied
Habe es ähnlich wie von @httpdigest beschrieben. Habe mit GitHub actions eine Pipeline laufen. Diese wird ausgeführt wenn ich was in den master Branch merge.
Nach dem build und erfolgreichen Tests wird mein Image auf dockerhub gepusht.
Auf meinem Server habe ich portainer laufen.
Da suche ich mir in der UI einfach den Container aus und lasse portainer von dockerhub die neuste Version ziehen.
 

Neue Themen


Oben