Drücke „Enter”, um zum Inhalt zu springen.

Eine 3-Schicht Webanwendung mit Containern

Christoph Hirte 0

Die Anwendung besteht aus drei Containern:

  • MySQL Datenbank Container
  • Springboot Backend Container
  • Angular Frontend Container

MySQL Datenbank

Dockerfile für Datenbank Container

Hier wird einfach ein „mysqldump“ aus einer existierenden Datenbank nach „docker-entrypoint-initdb.d“ kopiert. Wenn der resultierende Container und damit die Datenbank das allererste Mal hochfährt, werden die Befehle aus dem Dump „data.sql“ ausgeführt (CREATEs, INSERTs etc…)

Passwörter werden von außen zugesteuert (siehe später).
Und natürlich sind die Daten weg, wenn der Container geschlöscht wird. Das gebt besser mit VOLUMES und dem Mount von Daten-Verzeichnissen aus dem Host des Containers.

Springboot Backend

Dockerfile für SpringBoot Backend Container

Das bootJAR wurde hier blöderweise vorher gebaut und nicht während der Erzeugung des OCI Images.

Spannend ist aber das „wait-for-it.sh“ Script. Dieses versucht mittels des Linux Befehls Netcat („nc“) eine Verbindung mit dem Socket „database:3306“ herzustellen – in einer Schleife, 15 Mal mit 1 sekündiger Pause. Erst wenn Netcat erfolgreich eine TCP/IP Verbindung zu „database:3306“ aufgebaut hat, wird die Java Anwendung (springboot) gestartet. Kann Netcat nicht erfolgreich verbinden, startet auch Java nicht und der Start des Containers schlägt ebenfalls fehlt (Container ist im Zustand „STOPPED“).

Das Skript „wait-for-it.sh“ stammt aus dem github repository von Giles Hall: https://github.com/vishnubob/wait-for-it

Angular Frontend

Dockerfile für Angular Frontend Container

Der Source Code muss lokal vorhanden sein, bevor das OCI Image gebaut wird – das kann man besser machen. Z.B. im Dockerfile mittels git pullen und dann bauen – aber je nachdem.

Gut ist, dass in Phase 1 der Source Code kompiliert und anschließend in Phase 2 mittels ngix zur Verfügung gestellt wird.

Die drei Container gemeinsam starten

So geht es mit Docker-Compose

Und so geht es mit Podman (rootless)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert