Heim  >  Artikel  >  Java  >  Wie Docker SpringBoot bereitstellt und JAR-Pakete ersetzt

Wie Docker SpringBoot bereitstellt und JAR-Pakete ersetzt

PHPz
PHPznach vorne
2023-05-12 14:16:142312Durchsuche

Projektverzeichnis

Wie Docker SpringBoot bereitstellt und JAR-Pakete ersetzt

dockerfile

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

Dateibereitstellung

Erstellen Sie einen neuen Ordner /data/docker/hellolearn auf dem Server (der Dateipfad kann angepasst werden), legen Sie das mit Maven gepackte JAR-Paket ab und erstellen Sie die Docker-Datei oben Kopieren Sie die Datei in den neu erstellten Ordner auf dem Server (/data/docker/hellolearn).

Wie Docker SpringBoot bereitstellt und JAR-Pakete ersetzt

Bild generieren

docker build -t hellolearn .

#🎜 🎜#docker build -t Bildname: Die relative Position der Docker-Datei. Der Punkt stellt das aktuelle Verzeichnis dar. Wenn kein Tag geschrieben ist, ist der Standardwert „latest“.

Wie Docker SpringBoot bereitstellt und JAR-Pakete ersetzt

Container starten

docker run -d -p 8301:8301 --name hellolearn hellolearn#🎜 🎜#

docker start hellolearn

Der Parameter -d dient dazu, den Container im Hintergrund laufen zu lassen; --name ist der Name des angegebenen Containers; Führen Sie zu diesem Zeitpunkt eine Portzuordnung durch. Der 8301-Port (Port vor dem Doppelpunkt) im Container wird dem 8301-Port (Port nach dem Doppelpunkt) im Container zugeordnet (application.properties ist mit 8301 konfiguriert)

Web besuchen

Wie Docker SpringBoot bereitstellt und JAR-Pakete ersetztJAR-Paketzuordnungsbereitstellung

Das Befolgen der oben genannten Schritte reicht aus, um den gesamten Prozess problemlos abzuwickeln der Docker-Bereitstellung von Springboot. Aber nach dem Starten des Containers muss jedes Mal, wenn das JAR-Paket aktualisiert werden muss, das Image neu erstellt werden, und dann muss der Container neu erstellt werden. Der Prozess ist äußerst umständlich und äußerst ineffizient. Wie kann man also das JAR-Paket direkt aktualisieren, um die Bereitstellung abzuschließen, ohne das Image oder den Container zu aktualisieren?

5.1 Docker-Datei aktualisieren

Letzte Zeile Einstiegspunkt ["Java","-jar","/data/learn-web-0.0.1-snapshot.jar "] führt die Datei learn-web-0.0.1-snapshot.jar im Verzeichnis /data im Container aus.

5.2 Verwenden Sie den Docker-Build-Befehl, um das Image zu erstellen  entrypoint ["java","-jar","/data/learn-web-0.0.1-snapshot.jar"] 会运行容器里/data目录下的learn-web-0.0.1-snapshot.jar文件。

5.2 使用docker build命令构建镜像

docker build -t hellolearn .

5.3 创建&启动容器

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

-v 宿主机目录关联容器目录。这样宿主机的/data/docker/newhellolearn/package目录就与docker的/data目录进行映射。

这样的话,当jar包发生变动时,直接更新宿主机的/data/docker/newhellolearn/package目录下的jar包即可,更新jar包之后需要将容器重启一下。

脚本部署

通过jar包部署方式引起一个问题,若jar包名字发生变化,比如版本号变化(learn-web-0.0.1-snapshot.jar-->>learn-web-1.0.1-snapshot.jar)。需要怎么处理呢?下面就介绍第三种通过脚本部署的方式。

6.1 创建hellolearn.sh文件

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

将hellolearn.sh上传到/data/docker/hellolearn/scriptdeploy/package,这个文件夹路径可以自定义,记住这个文件夹路径,后面还会用到。

6.2 添加脚本执行权限

chmod +x hellolearn.sh

6.3 创建dockerfile

cmd ["sh","-c","/data/hellolearn.sh"] 

docker build -t hellolearn .

5.3 Erstellen & den Container starten

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

# 🎜🎜## 🎜🎜#-v Das Hostverzeichnis ist dem Containerverzeichnis zugeordnet. Auf diese Weise wird das Verzeichnis /data/docker/newhellolearn/package des Hosts dem Verzeichnis /data des Dockers zugeordnet.

Wie Docker SpringBoot bereitstellt und JAR-Pakete ersetztWenn sich in diesem Fall das JAR-Paket ändert, aktualisieren Sie einfach das JAR-Paket im Verzeichnis /data/docker/newhellolearn/package direkt nach dem Aktualisieren des JAR-Pakets Der Behälter.

Skriptbereitstellung

Die Bereitstellungsmethode des JAR-Pakets verursacht ein Problem, wenn sich der Name des JAR-Pakets ändert, z. B. die Versionsnummer (learn-web -0.0 .1-snapshot.jar-->>learn-web-1.0.1-snapshot.jar). Was muss getan werden? Im Folgenden wird die dritte Methode der Bereitstellung über Skripte vorgestellt.

6.1 hellolearn.sh-Datei erstellen

java -jar /data/learn-web-0.0.1-snapshot.jar
#🎜🎜 #

Laden Sie hellolearn.sh nach /data/docker/hellolearn/scriptdeploy/package hoch. Merken Sie sich diesen Ordnerpfad, der später verwendet wird.

6.2 Skriptausführungsberechtigung hinzufügen

chmod +x hellolearn.sh

6.3 Docker-Datei erstellen#🎜🎜# #🎜🎜#cmd ["sh","-c","/data/hellolearn.sh"] bedeutet, das in 6.1 erstellte hellolearn.sh-Skript zu starten, wenn der Container gestartet wird. #🎜🎜##🎜🎜#Beachten Sie, dass der letzte oben erwähnte Befehl „entrypoint“ ist, der in der Skriptbereitstellung in „cmd“ geändert wurde. Wenn Sie sich für den spezifischen Unterschied zwischen „entrypoint“ und „cmd“ interessieren, können Sie mehr erfahren. #🎜🎜##🎜🎜#6.4 Laden Sie das JAR-Paket hoch. #🎜🎜##🎜🎜#Legen Sie das JAR-Paket in dasselbe Ordnerverzeichnis wie hellolearn.sh, d. h. /data/docker/hellolearn/scriptdeploy/package, wann Erstellen des Containers Ordnen Sie dann dieses Verzeichnis (Hostverzeichnis) dem Verzeichnis /data des Containers zu. . #🎜🎜##🎜🎜#6.5 Dateiverzeichnisstrukturdiagramm#🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#Ich weiß nicht, ob Sie über die Verzeichnisstruktur hier verwirrt sind, laden Sie eines hoch Hier ist das Verzeichnisstrukturdiagramm des Hosts auf einen Blick klar. #🎜🎜##🎜🎜#6.6 Bild erstellen #🎜🎜##🎜🎜##🎜🎜#docker build -t hellolearn-script .#🎜🎜##🎜🎜##🎜🎜#Der Punkt am Ende stellt das dar aktuelles Verzeichnis, daher muss der Befehl zum Generieren des Bildes 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 start hellolearn-script#🎜🎜#

Verknüpfen Sie das /data/docker/hellolearn/scriptdeploy/package-Verzeichnis des Hosts mit der /data-Verzeichniszuordnung des Containers. Wenn sich in diesem Fall das JAR-Paket ändert, aktualisieren Sie einfach das JAR-Paket direkt im Hostverzeichnis. 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 Webtesteffekt

Wie Docker SpringBoot bereitstellt und JAR-Pakete ersetzt

Docker-Protokolle anzeigen

Docker-Protokolle [ Optionen] Container-ID

Optionsbeschreibung:

-f: Protokollausgabe verfolgen
--since: Zeigt eine bestimmte Startzeit an Alle Protokolle
-t: Zeitstempel anzeigen
--tail: Nur die neuesten n Containerprotokolle auflisten

7.1 Protokolle nach der angegebenen Zeit anzeigen, nur das letzte anzeigen 100 Zeilen:

docker logs -f -t --since="2020-10-01" --tail=100 Container-ID

# 🎜🎜 #7.2 Überprüfen Sie die Protokolle des angegebenen Zeitraums :00:00" Container-ID

7.3 Protokolle nach der angegebenen Zeit anzeigen:

docker logs -t --since=" 2020- 10-01t19:00:00" Container-ID

7.4 Sehen Sie sich die Protokolle der letzten 5 Minuten an:

docker logs --since 5m Container-ID

7.5 Bash für den angegebenen Container über den exec-Befehl ausführen:

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

7.6 View docker ip

docker exec hellolearn -it /bin/bash 或者 docker exec -it hellolearn bash

7.6 查看docker ip

docker inspect --format='{{.networksettings.ipaddress}}' hellolearn

遇到的问题

问题描述:error response from daemon: driver failed programming external connectivity on endpoint flamboyant_leavitt (iptables failed: 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: no chain/target/match by that name.

解决方案:重启docker。 systemctl restart dockerdocker inspect --format='{{.networksettings. ipaddress }}' hellolearn

#🎜🎜#

Aufgetretene Probleme#🎜🎜##🎜🎜#Problembeschreibung: Fehlerantwort vom Daemon: Treiber konnte keine externe Konnektivität auf dem Endpunkt programmieren flamboyant_leavitt ( iptables 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: no chain/target / Übereinstimmung mit diesem Namen.#🎜🎜##🎜🎜#Lösung: Starten Sie Docker neu. systemctl docker neu starten#🎜🎜#

Das obige ist der detaillierte Inhalt vonWie Docker SpringBoot bereitstellt und JAR-Pakete ersetzt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen