Detaillierte Erklärung zum Bereitstellen von SpringBoot in Docker und zum Ersetzen von JAR-Paketen

Detaillierte Erklärung zum Bereitstellen von SpringBoot in Docker und zum Ersetzen von JAR-Paketen

Informationen zur Installation und Verwendung von Docker finden Sie in den beiden vorherigen Artikeln. Details zur Installation und Bereitstellung des Docker Kubernetes-Dashboards und wie Docker Links verwendet, um Verbindungen zwischen Containern herzustellen. Dieser Artikel stellt hauptsächlich vor, wie das Springboot-Projekt auf Docker bereitgestellt wird. Weitere Informationen zum Erstellen eines Springboot-Projekts finden Sie in diesem Artikel: Probleme beim Erstellen eines SpringBoot-Web-MVC-Projekts auf IDEA

In diesem Artikel werden hauptsächlich drei Möglichkeiten zum Bereitstellen von Springboot mit Docker vorgestellt, nämlich: Erste Schritte, Bereitstellung durch Ersetzen von JAR-Paketen und Skriptbereitstellung, Schritt-für-Schritt-Anleitung. Bitte beachten Sie, dass die Namen dieser drei Methoden meine eigenen und inoffiziell sind.

Projektverzeichnis

Docker-Datei

Erstellen Sie eine Dockerfile-Datei, die später verwendet wird.

# Docker-Image für Springboot-Datei ausführen
# VERSION 0.0.1
# Autor: toutou
# Das Basis-Image verwendet Java
VON java:8
# VOLUME gibt das temporäre Dateiverzeichnis als /tmp an.
# Der Effekt besteht darin, eine temporäre Datei im Verzeichnis /var/lib/docker des Hosts zu erstellen und sie mit dem Verzeichnis /tmp des Containers zu verknüpfen.
# VOLUMEN /tmp
# Fügen Sie das JAR-Paket zum Container hinzu und benennen Sie es in app.jar um
ADD learn-web-0.0.1-SNAPSHOT.jar app.jar
# Führen Sie das JAR-Paket aus. RUN bash -c 'touch /app.jar'
EINSTIEGSPUNKT ["java","-jar","/app.jar"]
###Geben Sie die Start-Portnummer an#EXPOSE 8301

Dateibereitstellung

Erstellen Sie auf dem Server einen neuen Ordner /data/docker/hellolearn (der Dateipfad kann angepasst werden) und kopieren Sie das von Maven gepackte JAR und die oben erstellte Dockerfile-Datei in den neuen Ordner auf dem Server (/data/docker/hellolearn).

Bild generieren

docker build -t hallo lernen.

docker build -t Imagename: Die relative Position des Dockerfile-Tags. Der Punkt stellt das aktuelle Verzeichnis dar. Wenn das Tag nicht geschrieben ist, wird standardmäßig „latest“ verwendet.

Starten des Containers

docker run -d -p 8301:8301 --name hallo lernen hallo lernen

Docker starten Hallo lernen

Der Parameter -d dient zum Ausführen des Containers im Hintergrund; --name ist der Name des angegebenen Containers; -p dient zum Port-Mapping. In diesem Fall wird der Port 8301 im Server (der Port vor dem Doppelpunkt) dem Port 8301 im Container (der Port nach dem Doppelpunkt) zugeordnet (application.properties ist mit 8301 konfiguriert).

Besuchen Sie die Website

Bereitstellung der JAR-Paketzuordnung

Wenn Sie die oben genannten Schritte befolgen, können Sie den gesamten Prozess der Docker-Bereitstellung im Springboot problemlos durchführen. Allerdings müssen Sie nach dem Starten des Containers jedes Mal, wenn Sie das JAR-Paket aktualisieren müssen, das Image und dann den Container neu erstellen. Der Prozess ist äußerst umständlich und ineffizient. Wie können wir also das JAR-Paket direkt aktualisieren, um die Bereitstellung abzuschließen, ohne das Image oder den Container zu aktualisieren?

5.1 Dockerfile aktualisieren

# Docker-Image für Springboot-Datei ausführen
# VERSION 0.0.1
# Autor: toutou
# Das Basis-Image verwendet Java
VON java:8
EXPOSE 8301
EINSTIEGSPUNKT ["java","-jar","/data/learn-web-0.0.1-SNAPSHOT.jar"]

Die letzte Zeile ENTRYPOINT ["java","-jar","/data/learn-web-0.0.1-SNAPSHOT.jar"] führt die Datei learn-web-0.0.1-SNAPSHOT.jar im Verzeichnis /data des Containers aus.

5.2 Erstellen Sie ein Image mit dem Befehl „Docker Build“

docker build -t hallo lernen.

5.3 Container erstellen & starten

docker run --name hellolearn -it -v /data/docker/newhellolearn/package:/data -d -p 8301:8301 hellolearn

-v Verknüpfen Sie das Hostverzeichnis mit dem Containerverzeichnis. Auf diese Weise wird das Verzeichnis /data/docker/newhellolearn/package des Hosts dem Verzeichnis /data des Dockers zugeordnet.

In diesem Fall können Sie bei einer Änderung des JAR-Pakets das JAR-Paket direkt im Verzeichnis /data/docker/newhellolearn/package des Hosts aktualisieren. Nach der Aktualisierung des JAR-Pakets müssen Sie den Container neu starten.

Skriptbereitstellung

Bei der Bereitstellung über die JAR-Paketmethode tritt ein Problem auf, wenn sich der Name des JAR-Pakets ändert, beispielsweise wenn sich die Versionsnummer ändert (learn-web-0.0.1-SNAPSHOT.jar-->>learn-web-1.0.1-SNAPSHOT.jar). Was ist zu tun? Im Folgenden wird die dritte Bereitstellungsmethode über Skripte vorgestellt.

6.1 Datei „hellolearn.sh“ erstellen

java -jar /data/learn-web-0.0.1-SNAPSHOT.jar

Laden Sie hellolearn.sh nach /data/docker/hellolearn/scriptdeploy/package hoch. Dieser Ordnerpfad kann angepasst werden. Merken Sie sich diesen Ordnerpfad, da er später verwendet wird.

6.2 Berechtigungen zur Skriptausführung hinzufügen

chmod +x hellolearn.sh

6.3 Dockerfile erstellen

# Docker-Image für Springboot-Datei ausführen
# VERSION 0.0.1
# Autor: toutou
# Das Basis-Image verwendet Java
VON java:8
EXPOSE 8301
CMD ["sh","-c","/data/hellolearn.sh"]

CMD ["sh","-c","/data/hellolearn.sh"] bedeutet, dass beim Starten des Containers das in 6.1 erstellte Skript hellolearn.sh gestartet wird.

Beachten Sie, dass der letzte Befehl im obigen Text ENTRYPOINT ist, der bei der Skriptbereitstellung in CMD geändert wird. Wenn Sie an den spezifischen Unterschieden zwischen ENTRYPOINT und CMD interessiert sind, können Sie sich darüber informieren.

6.4 JAR-Paket hochladen

Legen Sie das JAR-Paket in dasselbe Ordnerverzeichnis wie hellolearn.sh, also /data/docker/hellolearn/scriptdeploy/package. Ordnen Sie beim Erstellen eines Containers das Verzeichnis (Hostverzeichnis) dem /data-Verzeichnis des Containers zu. .

6.5 Dateiverzeichnisstrukturdiagramm

Ich weiß nicht, ob Sie die Verzeichnisstruktur hier verwirrt. Ich habe ein Verzeichnisstrukturdiagramm meiner Hostmaschine hochgeladen, das auf einen Blick klar ist.

6.6 Erstellen eines Images

Docker-Build -t HelloLearn-Skript.

Der Punkt am Ende stellt das aktuelle Verzeichnis dar, daher muss der Befehl zum Generieren des Images in dem Verzeichnis ausgeführt werden, in dem sich die Docker-Datei befindet.

6.7 Container erstellen und starten

docker run --name hellolearn-script -it -v /data/docker/hellolearn/scriptdeploy/package:/data -d -p 8302:8301 hellolearn-script

Docker startet Hellolearn-Skript

Ordnen Sie das Verzeichnis /data/docker/hellolearn/scriptdeploy/package des Hosts dem Verzeichnis /data des Containers zu. Auf diese Weise können Sie bei Änderungen des JAR-Pakets das JAR-Paket direkt im Hostverzeichnis aktualisieren. Auch wenn sich der Name des JAR-Pakets ändert, müssen Sie das Skript hellolearn.sh aktualisieren. Starten Sie den Container nach dem Update neu.

6.8 Web-Testergebnisse

Docker-Protokolle anzeigen

Docker-Protokolle [OPTIONEN] CONTAINER-ID

OPTIONS-Beschreibung:

-f: Trace-Protokollausgabe
--since : Alle Logs ab einem bestimmten Startzeitpunkt anzeigen
-t: Zeitstempel anzeigen
--tail: listet nur die letzten N Containerprotokolle auf

7.1 Zeigen Sie die Protokolle nach der angegebenen Zeit an und zeigen Sie nur die letzten 100 Zeilen an:

Docker-Protokolle -f -t --since="2020-10-01" --tail=100 CONTAINER-ID

7.2 Überprüfen Sie die Protokolle eines bestimmten Zeitraums

docker logs -t --since="2020-10-01T19:00:00" --until "2020-10-01T19:00:00" CONTAINER-ID

7.3 Zeigen Sie die Protokolle nach der angegebenen Zeit an:

docker logs -t --since="2020-10-01T19:00:00" CONTAINER-ID

7.4 Zeigen Sie die Protokolle der letzten 5 Minuten an:

Docker-Protokolle – seit 5 Min. CONTAINER-ID

7.5 Führen Sie Bash auf dem angegebenen Container über den Befehl „exec“ aus:

docker exec hellolearn -it /bin/bash oder docker exec -it hellolearn bash

7.6 Docker-IP anzeigen

Docker-Inspektion --Format = '{{.NetworkSettings.IPAddress}}' Hallo lernen

Aufgetretene Probleme

Problembeschreibung: Fehlerantwort vom Daemon: Treiber konnte externe Konnektivität am Endpunkt flamboyant_leavitt nicht programmieren (iptables ist fehlgeschlagen: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8301 -j DNAT --to-destination 172.17.0.2:8301 ! -i docker0: iptables: Keine Kette/Ziel/Übereinstimmung mit diesem Namen.

Lösung: Starten Sie Docker neu. systemctl restart docker

Weitere Informationen zu diesem spezifischen Problem finden Sie unter Fehlerantwort vom Daemon: Treiber konnte externe Konnektivität auf Endpunkt mysql3308 nicht programmieren (

Quellcodeadresse

https://github.com/toutouge/javademosecond/tree/master/hellolearn

Dies ist das Ende dieses Artikels zum Bereitstellen von SpringBoot in Docker und Ersetzen von JAR-Paketen. Weitere Informationen zum Bereitstellen von SpringBoot in Docker und Ersetzen von JAR-Paketen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Implementierung der Springboot-Verpackung als Docker-Image und Deployment
  • So installieren Sie Tomcat in Docker und stellen das Springboot-Projekt-War-Paket bereit
  • Eine kurze Analyse der SpringBoot-Verpackung und des Hochladens in Docker sowie der Implementierung der Bereitstellung mehrerer Instanzen (IDEA-Version)
  • Tutorial zum Bereitstellen eines Springboot-Pakets in einer Linux-Umgebung mithilfe von Docker

<<:  WeChat-Applet implementiert SMS-Login in Aktion

>>:  Tutorial zur HTML-Tabellenauszeichnung (5): Farbattribut für helle Rahmen BORDERCOLORLIGHT

Artikel empfehlen

Die Vorteile von Div+CSS und Web-Standardseiten

Das Div-Element wird verwendet, um Struktur und Hi...

Detaillierte Erklärung der Box-Größe in CSS3 (Content-Box und Border-Box)

Box-Größe in CSS3 (Inhaltsbox und Rahmenbox) Mit ...

MySql-Wissenspunkte: Transaktion, Index, Sperrprinzip und Nutzungsanalyse

Dieser Artikel erläutert anhand von Beispielen di...

Detaillierter Prozess der NTP-Serverkonfiguration unter Linux

Inhaltsverzeichnis 1. Umgebungskonfiguration 1.NT...

Lösung zum Ändern des Datenspeicherorts der Datenbank in MySQL 5.7

Da die in der MySQL-Datenbank gespeicherten Daten...

So zeigen Sie den Speicherort von MySQL-Datendateien an

Wir haben möglicherweise eine Frage: Nachdem wir ...

Über Zabbix Admin-Login vergessen Passwort zurücksetzen

Das Problem beim Zurücksetzen des Passworts für d...

Zwei Verwendungen von iFrame-Tags in HTML

Ich habe kürzlich an einem Projekt gearbeitet – B...

So fügen Sie Konfigurationsoptionen zum Discuz!-Forum hinzu

Discuz! Forum verfügt über zahlreiche Konfiguratio...

30 kostenlose hochwertige englische Ribbon-Schriftarten

30 kostenlose englische Ribbon-Schriftarten in hoh...

So lösen Sie das Problem der Groß-/Kleinschreibung bei MySQL-Abfragen

Frage Als ich kürzlich ein praktisches Projekt mi...

Spezifische Verwendung von pthread_create in Linux zum Erstellen von Threads

pthread_create-Funktion Funktionseinführung pthre...