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

Detaillierte Erläuterung der 6 Möglichkeiten der JS-Vererbung

Vererbung von Prototypketten Die Prototypenvererb...

Drei häufig verwendete MySQL-Datentypen

Das Definieren des Datenfeldtyps in MySQL ist für...

Mysql Workbench - Abfragemethode für MySQL-Datenbanken

Mysql Workbench ist ein Open-Source-Datenbankclie...

Detaillierte Erläuterung der persistenten MySQL-Statistiken

1. Die Bedeutung persistenter statistischer Infor...

HTML-Tabellen-Markup-Tutorial (43): VALIGN-Attribut der Tabellenüberschrift

In vertikaler Richtung können Sie die Ausrichtung...

Verwendung von MySQL-Triggern

Trigger können dazu führen, dass vor oder nach de...

Javascript-Bereich und Abschlussdetails

Inhaltsverzeichnis 1. Geltungsbereich 2. Geltungs...

Tutorial zur Installation von mysql5.7.23 auf Ubuntu 18.04

In diesem Artikel erfahren Sie, wie Sie mysql5.7....

Grundlegende Referenztypen der erweiterten JavaScript-Programmierung

Inhaltsverzeichnis 1. Datum 2. RegExp 3. Original...

Implementierung der Parametersprungfunktion im Vue-Projekt

Seitenbeschreibung:​ Hauptseite: Name —> shish...

Lösen Sie das Docker.Socket-Berechtigungsproblem des VSCode-Docker-Plugins

Lösung: Beenden Sie alle mit .vscode in Zusammenh...

Vue+echarts realisiert gestapelte Balkendiagramme

In diesem Artikel wird der spezifische Code von V...

Webinterview: Benutzerdefinierte Vue-Komponenten und Aufrufmethoden

Import: Aufgrund der Projektanforderungen werden ...

Navicat importiert CSV-Daten in MySQL

In diesem Artikel erfahren Sie, wie Sie mit Navic...