Generierte Anwendungen mit Docker Compose ausführen

Die Script-Datei zum Aufruf von Docker Compose

Im Unterverzeichnis dockercompose des Anwendungsprojektes befinden sich Dateien, um die Anwendung mit Docker Compose auszuführen. Neben der YML-Datei mit der Compose-Konfiguration der Anwendung und einer ENV-Datei auch Script-Dateien, zum Aufruf von Docker Compose in der Eingabeaufforderung von Windows sowie in der Linux Shell. Die Dateinamen basieren auf dem Anwendungsnamen, der bei der Generierung angegeben wurde:

compose-{anwendungsname}.cmd
compose-{anwendungsname}.sh

Im Falle der Beispielanwendung für den Getränkeautomaten mit dem Namen BeverageVending lauten die Kommandos zum Aufruf von Docker Compose folgendermaßen:

dockercompose> compose-beveragevending.cmd (1)

dockercompose$ ./compose-beveragevending.sh (2)
  1. Für Windows.

  2. Für Linux.

Wenn die Script-Datei ohne Parameter aufgerufen wird, wird eine Liste von Beispielen mit Parametern für das Starten und Stoppen der Anwendung sowie für einige andere Aktionen im Kontext von Compose ausgegeben.

dockercompose> compose-beveragevending.cmd

Missing command and option for Docker Compose.
Format: compose-beveragevending.cmd [command] [option]. (1)
For instance:
compose-beveragevending.cmd up -d
compose-beveragevending.cmd logs
compose-beveragevending.cmd logs -f
compose-beveragevending.cmd ps
compose-beveragevending.cmd stop
compose-beveragevending.cmd ps -a
compose-beveragevending.cmd start
compose-beveragevending.cmd down
  1. Werte, die für [command] und [option] angegeben werden, leitet das Script an Docker Compose weiter.

Anmerkung: Einzelheiten zur Funktionsweise von Docker Compose im Allgemeinen und zu den Kommandos und Optionen finden Sie in der Dokumentation zu Docker Compose oder in der einschlägigen Literatur. [1]

Die Anwendung in Docker Compose hochfahren, stoppen und neu starten

Folgende Beispiele für die Windows Eingabeaufforderung zeigen einen Durchlauf, bestehend aus den Schritten:

  1. Die Anwendung in Docker Compose hochfahren.

  2. Den Status der Docker-Container prüfen.

  3. Die Anwendung stoppen.

  4. Die Anwendung neu starten.

Dabei werden Kommandos und daraus folgende Ausgaben so dargestellt, wie sie im Falle der Beispielanwendung BeverageVending lauten würden, deren Erstellung im Abschnitt Ein Service-Projekt auf Basis eines DEA erstellen beschrieben wurde.

Schritt 1: Die Anwendung in Docker Compose hochfahren.

Das Docker Compose Komanndo up mit der Option -d erzeugt die Anwendung in Docker Compose und führt sie im detached Modus aus.

dockercompose> compose-beveragevending.cmd up -d

Die Option -d (die Kurzform für --detach) führt dazu, dass die Container der Anwendung im Hintergrund ausgeführt werden und die Eingabeaufforderung für die Eingabe weiterer Kommandos zur Verfügung steht.

Unmittelbar nach dem Start wird in der Konsole eine Liste der erzeugten Ressourcen ausgegeben, die über einen begrenzten Zeitraum hinweg laufend aktualisiert wird. Ein Zwischenstand kann z.B. folgender Ausgabe ähneln.

[+] Running 8/9
 ✔ Network dockercompose_default                         Created            0.1s
 ✔ Volume "dockercompose_beveragevending-mongodb-data"   Created            0.0s
 ✔ Volume "dockercompose_beveragevending-rabbitmq-data"  Created            0.0s
 ✔ Container dockercompose-beveragevending-mongodb-1     Healthy            6.6s
 - Container dockercompose-beveragevending-rabbitmq-1    Waiting            9.6s
 ✔ Container dockercompose-beveragevending-entry-1       Created            0.1s
 ✔ Container dockercompose-beveragevending-state-2-1     Created            0.1s
 ✔ Container dockercompose-beveragevending-state-3-1     Created            0.1s
 ✔ Container dockercompose-beveragevending-state-1-1     Created            0.1s

Hinter dem Namen der Ressource steht jeweils der aktuelle Status, z.B. Created, Healthy oder Waiting.

Hinweis! Bevor die Anwendung verwendet werden kann, muss der Status aller Container Healthy sein. Dies kann je nach Anzahl und Kombination der Services mehr als zwei Minuten dauern.

Die automatische Aktualisierung der Ressourcen-Liste hört möglicherweise auf, bevor alle Container den Status Healthy erreicht haben. Die Liste der Ressourcen kann dann z.B. folgender Ausgabe ähneln, bei der einige Container den Status Healthy und einige den Status Started haben. Der Cursor am Ende, in einer neuen Zeile der Eingabeaufforderung signalisiert die Bereitschaft für das nächste Kommando.

[+] Running 9/9
 ✔ Network dockercompose_default                         Created            0.1s
 ✔ Volume "dockercompose_beveragevending-mongodb-data"   Created            0.0s
 ✔ Volume "dockercompose_beveragevending-rabbitmq-data"  Created            0.0s
 ✔ Container dockercompose-beveragevending-mongodb-1     Healthy            6.6s
 ✔ Container dockercompose-beveragevending-rabbitmq-1    Healthy           19.5s
 ✔ Container dockercompose-beveragevending-entry-1       Healthy           29.4s
 ✔ Container dockercompose-beveragevending-state-2-1     Started           30.1s
 ✔ Container dockercompose-beveragevending-state-3-1     Started           30.0s
 ✔ Container dockercompose-beveragevending-state-1-1     Started           30.0s

dockercompose> |

Schritt 2: Den Status der Docker-Container prüfen.

Mit Hilfe des Docker Compose Kommandos ps kann die Liste der Container der Anwendung abgerufen werden. Das Ergebnis ähnelt folgender Ausgabe.

dockercompose> compose-beveragevending.cmd ps
NAME                                       IMAGE                                 COMMAND                  SERVICE                    CREATED              STATUS                        PORTS
dockercompose-beveragevending-entry-1      samples/beveragevending-entry:0.1.0   "sh -c 'java ${JAVA_…"   beveragevending-entry      About a minute ago   Up 51 seconds (healthy)       0.0.0.0:9997->9997/tcp
dockercompose-beveragevending-mongodb-1    mongo:6.0.15-jammy                    "docker-entrypoint.s…"   beveragevending-mongodb    About a minute ago   Up About a minute (healthy)   0.0.0.0:27017->27017/tcp
dockercompose-beveragevending-rabbitmq-1   rabbitmq:3.13.1-management-alpine     "docker-entrypoint.s…"   beveragevending-rabbitmq   About a minute ago   Up About a minute (healthy)   4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 15671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp
dockercompose-beveragevending-state-1-1    samples/beveragevending-state:0.1.0   "sh -c 'java ${JAVA_…"   beveragevending-state-1    About a minute ago   Up 40 seconds (healthy)
dockercompose-beveragevending-state-2-1    samples/beveragevending-state:0.1.0   "sh -c 'java ${JAVA_…"   beveragevending-state-2    About a minute ago   Up 40 seconds (healthy)
dockercompose-beveragevending-state-3-1    samples/beveragevending-state:0.1.0   "sh -c 'java ${JAVA_…"   beveragevending-state-3    About a minute ago   Up 40 seconds (healthy)

Wenn der Status für alle Services healthy ist, kann die Anwendung verwendet werden, wie im Abschnitt Requests über die integrierte Swagger UI senden beschrieben. (Die Spalte STATUS steht ziemlich weit rechts, an sechster Stelle.)

Schritt 3: Die Anwendung stoppen.

Durch das Docker Compose Kommando stop wird die Anwendung angehalten. D.h. die Container der Anwendung werden gestoppt. Das Ergebnis ähnelt folgender Ausgabe.

dockercompose> compose-beveragevending.cmd stop
[+] Stopping 6/6
 ✔ Container dockercompose-beveragevending-state-2-1   Stopped            0.5s
 ✔ Container dockercompose-beveragevending-state-3-1   Stopped            0.7s
 ✔ Container dockercompose-beveragevending-state-1-1   Stopped            1.3s
 ✔ Container dockercompose-beveragevending-entry-1     Stopped            1.1s
 ✔ Container dockercompose-beveragevending-mongodb-1   Stopped            0.6s
 ✔ Container dockercompose-beveragevending-rabbitmq-1  Stopped            6.5s

Anmerkung: Beim Stoppen der Anwendung in Docker Compose bleiben die Container und die Volumes mit den persistenten Daten bestehen. So bleibt der aktuelle Zustand der Anwendung erhalten, bspw. in Form von Messages beim Message-Broker und in Form von Datensätzen in der Datenbank. Beim eneuten Start der Anwendung kann die Verarbeitung auf diesem Zustand aufsetzen.

Schritt 4: Die Anwendung neu starten.

Durch das Docker Compose Kommando start werden die Container der Anwendung wieder gestartet. Das Ergebnis ähnelt folgender Ausgabe.

dockercompose> compose-beveragevending.cmd start
[+] Running 6/6
 ✔ Container dockercompose-beveragevending-mongodb-1   Healthy            6.0s
 ✔ Container dockercompose-beveragevending-rabbitmq-1  Healthy           13.4s
 ✔ Container dockercompose-beveragevending-entry-1     Healthy           10.8s
 ✔ Container dockercompose-beveragevending-state-3-1   Started            0.7s
 ✔ Container dockercompose-beveragevending-state-2-1   Started            0.6s
 ✔ Container dockercompose-beveragevending-state-1-1   Started            0.7s

Wie oben bei Schritt 1 erläutert, kann die Anwendung erst verwendet werden, wenn der Status aller Container Healthy ist. Dies kann wieder, wie bei Schritt 2 beschrieben, mit Hilfe des Kommandos ps überprüft werden.

Die Anwendung aus Docker Compose entfernen

Zur dauerhaften Entfernung der Anwendung dient das Docker Compose Kommando down. Die Volumes können dabei wahlweise beibehalten werden.

Die Awendung entfernen und Volumes beibehalten

Wenn das Kommando down ohne weitere Optionen angegeben wird, werden die Volumes der Anwendung nicht entfernt.

dockercompose> compose-beveragevending.cmd down
[+] Running 7/7
 ✔ Container dockercompose-beveragevending-state-2-1   Removed            0.1s
 ✔ Container dockercompose-beveragevending-state-3-1   Removed            0.1s
 ✔ Container dockercompose-beveragevending-state-1-1   Removed            0.2s
 ✔ Container dockercompose-beveragevending-entry-1     Removed            0.1s
 ✔ Container dockercompose-beveragevending-rabbitmq-1  Removed            0.1s
 ✔ Container dockercompose-beveragevending-mongodb-1   Removed            0.1s
 ✔ Network dockercompose_default                       Removed            0.2s

Die Awendung inklusive Volumes entfernen

Die Option -v (die Kurzform für --volumes) beim Kommando down führt dazu, dass die Volumes der Anwendung mit entfernt werden.

dockercompose> compose-beveragevending.cmd down -v
[+] Running 9/9
 ✔ Container dockercompose-beveragevending-state-3-1   Removed            0.7s
 ✔ Container dockercompose-beveragevending-state-1-1   Removed            0.6s
 ✔ Container dockercompose-beveragevending-state-2-1   Removed            1.6s
 ✔ Container dockercompose-beveragevending-entry-1     Removed            0.9s
 ✔ Container dockercompose-beveragevending-rabbitmq-1  Removed            6.6s
 ✔ Container dockercompose-beveragevending-mongodb-1   Removed            0.6s
 ✔ Volume dockercompose_beveragevending-mongodb-data   Removed            0.0s
 ✔ Volume dockercompose_beveragevending-rabbitmq-data  Removed            0.0s
 ✔ Network dockercompose_default                       Removed            0.2s


1. Auf der Docker-Website finden Sie unter folgender URL https://docs.docker.com/compose/reference/ eine Übersicht der Docker Compose Kommandos und die allgemeine allgemeine Dokumentation unter folgender URL: https://docs.docker.com/compose/