So richten Sie Spring Boot mithilfe der Docker-Schichtenverpackung ein

So richten Sie Spring Boot mithilfe der Docker-Schichtenverpackung ein

Das Spring Boot-Projekt verwendet Docker-Container, JAR und War-Layer-Verpackungen.

Spring Boot unterstützt jetzt die Layered-Packaging-Technologie. Lassen Sie uns diese nutzen, um die Docker-Verpackung zu beschleunigen und sehr schnell zu erstellen.

Layer-Einstellungen

Zunächst sollten in pom ähnliche Einstellungen vorgenommen werden:

<Plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>Spring-Boot-Maven-Plugin</artifactId>
                    <version>${spring-boot.version}</version>
                    <Konfiguration>
                        <!-- Unterstützung für geschichtete Verpackung aktivieren -->
                        <Ebenen>
                            <aktiviert>wahr</aktiviert>
                        </Ebenen>
                    </Konfiguration>
                    <Hinrichtungen>
                        <Ausführung>
                            <Ziele>
                                <goal>neu verpacken</goal>
                            </Ziele>
                        </Ausführung>
                    </Ausführungen>
                </plugin>

Deklarieren Sie das Plugin spring-boot-maven-plugin , legen Sie die Ebenenkonfiguration fest und aktivieren Sie die Ebenenunterstützung.

Nach dem Verpacken überprüfen wir das JAR-Paket oder War-Paket und finden eine zusätzliche Datei layers.idx, die eine Liste der geschichteten Dateien enthält.

- "Abhängigkeiten":
  - "WEB-INF/lib-bereitgestellt/"
  – „WEB-INF/lib/HikariCP-4.0.3.jar“
  – „WEB-INF/lib/aspectjweaver-1.9.5.jar“
  ...
  ...
- "Spring-Bootloader":
  - "org/"
- „Snapshot-Abhängigkeiten“:
  – „WEB-INF/lib/ms-fundmain-base-1.0-SNAPSHOT.jar“
  – „WEB-INF/lib/xpower-main-1.0.3-SNAPSHOT.jar“
  – „WEB-INF/lib/xpower-utils-1.0.3-SNAPSHOT.jar“
- "Anwendung":
  - "META-INF/"
  - "WEB-INF/Klassen/"
  – „WEB-INF/jetty-web.xml“
  - "WEB-INF/layers.idx"
  - "Seiten/"
  - "statisch/"

Diese Datei ist die Grundlage für die folgenden Ebeneneinstellungen.

Wenn es sich um ein JAR handelt, gibt es auch eine Datei classpath.idx , die alle abhängigen JAR-Pakete auflistet.

Beim Verpacken können wir Docker Build oder docker-maven-plugin verwenden, um dies zu erreichen.

Hinweis: Spring-Boot-Maven-Plugin

Es verfügt über eine Docker-Verpackungsfunktion, aber die Download- und Verpackungsgeschwindigkeit ist zu langsam, was sehr ärgerlich ist, deshalb empfehle ich es hier nicht. --- Der Vorteil ist, dass Sie keine Docker-Datei schreiben müssen, was einfach und praktisch ist. Der Nachteil ist, dass Sie die Docker-Datei nicht anpassen können.
Die Konfiguration ähnelt der folgenden:

<Plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>Spring-Boot-Maven-Plugin</artifactId>
    <Konfiguration>
        <Bild>
            <!--Bildnamen konfigurieren-->
            <name>127.0.0.1:5000/springcnscud/${Projekt.name}:${Projekt.version}</name>
            <!--Nachdem das Image gepackt wurde, wird es automatisch in das Image Warehouse übertragen-->
            <veröffentlichen>wahr</veröffentlichen>
        </image>
        <Docker>
            <!--Docker-Remoteverwaltungsadresse-->
            <host>http://127.0.0.1:2375</host>
            <!-- Zugriff ohne TLS -->
            <tlsVerify>falsch</tlsVerify>
            <!-- Konfiguration des Docker-Push-Image-Repository-->
            <Registrierung veröffentlichen>
                <!--Benutzername des Push-Mirror-Repositorys-->
                <Benutzername>cnscud</Benutzername>
                <!--Passwort für Image-Repository übertragen-->
                <Passwort>123456</Passwort>
                <!--Adresse des Push-Spiegel-Repositorys-->
                <url>http://127.0.0.1:5000</url>
            </publishRegistry>
        </docker>
    </Konfiguration>
</plugin>

Wenn Sie Docker-Maven-Plugin + benutzerdefiniertes Dockerfile verwenden:

POM-Konfiguration:

    <Plugin>
                    <groupId>io.fabric8</groupId>
                    <artifactId>Docker-Maven-Plugin</artifactId>
                    <version>${docker.plugin.version}</version>
                    <Konfiguration>
                        <!-- Docker Remote API -->
                        <!-- Diese Maschine kann auskommentiert werden, wenn sie nicht auf Port 2375 lauscht -->
                        <dockerHost>${docker.host}</dockerHost>
                        <!-- Privater Docker-Image-Server-->
                        <registry>${docker.registry}</registry>

                        <Bilder>
                            <Bild>
                                <name>${docker.registry}/${docker.namespace}/${project.name}:${project.version}</name>
                                <Bauen>
                                    <dockerFileDir>${project.basedir}</dockerFileDir>
                                </bauen>
                            </image>
                        </Bilder>
                    </Konfiguration>
                </plugin>

Werfen wir einen Blick auf das Dockerfile-Format im JAR-Modus von Spring Boot:

# Schichtaufbau, beschleunigter inkrementeller Aufbau VON adoptopenjdk/openjdk8:centos-slim als Builder

WORKDIR-Anwendung
ARG JAR_FILE=Ziel/*.jar
KOPIEREN SIE ${JAR_FILE} app.jar
RUN java -Djarmode=layertools -jar app.jar extract && rm app.jar

VON adoptopenjdk/openjdk8:centos-slim

LABEL-Betreuer="[email protected]"

ENV TZ=Asien/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ENV JAVA_OPTS="-Xms128m -Xmx256m"

WORKDIR-Anwendung

KOPIEREN --from=builder /application/dependencies/ ./
KOPIEREN --from=builder /application/snapshot-dependencies/ ./
KOPIEREN --from=builder /anwendung/spring-boot-loader/ ./
KOPIEREN --from=builder /Anwendung/Anwendung/ ./

EXPOSE 9001

EINSTIEGSPUNKT ["sh", "-c", "java $JAVA_OPTS org.springframework.boot.loader.JarLauncher"]

Bitte ändern Sie das JDK entsprechend Ihrer eigenen Situation und verwenden Sie JarLauncher für Jar.

Wenn Krieg ist, wie soll er ausgelöst werden?

Wenn Sie es zunächst unabhängig ausführen möchten, können Sie eingebetteten Tomcat oder Jetty verwenden und den Provider nicht in POM festlegen.

 <Abhängigkeit>
            <groupId>org.springframework.boot</groupId>
            <artifactId>Spring-Boot-Starter-Tomcat</artifactId>
        </Abhängigkeit>

Auf diese Weise wird der eingebettete Tomcat beim Verpacken einbezogen.

Das Dockerfile ist wie folgt aufgebaut:

# Schichtaufbau, beschleunigter inkrementeller Aufbau VON adoptopenjdk/openjdk8:centos-slim als Builder

WORKDIR-Anwendung
ARG JAR_FILE=Ziel/*.war
KOPIEREN SIE ${JAR_FILE} app.war
RUN java -Djarmode=layertools -jar app.war extract && rm app.war

VON adoptopenjdk/openjdk8:centos-slim
LABEL-Betreuer="[email protected]"

ENV TZ=Asien/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ENV JAVA_OPTS="-Xms128m -Xmx256m"

WORKDIR-Anwendung

KOPIEREN --from=builder /application/dependencies/ ./
KOPIEREN --from=builder /application/snapshot-dependencies/ ./
KOPIEREN --from=builder /anwendung/spring-boot-loader/ ./
KOPIEREN --from=builder /Anwendung/Anwendung/ ./

EXPOSE 8000

EINSTIEGSPUNKT ["sh", "-c", "java $JAVA_OPTS org.springframework.boot.loader.WarLauncher"]

Notieren Sie sich den Dateinamen und führen Sie ihn mit WarLauncher aus.

Externen Tomcat verwenden

Ohne Experimente kann das Erstellen von Ebenen problematisch sein ... Theoretisch ist es jedoch auch möglich, das entpackte War-Paket zu verwenden, anstatt es von Tomcat selbst entpacken zu lassen

Ich werde es hier nicht versuchen. Der Hauptpunkt besteht darin, das Basispaket in Tomcat zu ändern, den laufenden ENTRYPOINT in Tomcat zu ändern und die Datei in den Container in der Mitte zu kopieren.

VON Tomcat:9.0

#Kopieren Sie die Datei xx.war unter Ziel nach /usr/local/tomcat/webapps/ ADD ./target/xx.war /usr/local/tomcat/webapps/

#EXPOSE-Anschluss 8080

#Setzen Sie den Startbefehl ENTRYPOINT ["/usr/local/tomcat/bin/catalina.sh","run"]

Dies ist das Ende dieses Artikels über Spring Boot mit Docker-Schichtverpackung. Weitere verwandte Inhalte zu Docker-Schichtverpackung finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Implementierung der Springboot-Verpackung als Docker-Image und Deployment
  • Die einfachste Implementierung eines Docker-Images zum Verpacken von Spring Boot
  • Analyse des Docker-Image-Prozesses für die Verpackung von Springboot-Mikroservices
  • Praxis und Analyse der geschichteten Verpackung von Docker-Images für Spring Boot (empfohlen)

<<:  Lösen Sie das Problem der Selbstinkrementierung des int-Primärschlüssels von MySQL

>>:  Implementierung langer Textschatten in Less in CSS3

Artikel empfehlen

Details zum Überschreiben von Prototypmethoden in JavaScript-Instanzobjekten

Inhaltsverzeichnis In JavaScript können wir norma...

CSS implementiert problemlos Container auf Blockebene mit festem Verhältnis

Beim Entwerfen eines H5-Layouts werden Sie normal...

Vue echarts realisiert die dynamische Anzeige von Balkendiagrammen

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

Lösung für das Verschwinden des MySql-Dienstes aus unbekannten Gründen

Lösung für das Verschwinden des MySql-Dienstes au...

Zusammenfassung der verschiedenen Verwendungsmöglichkeiten von JSON.stringify

Vorwort Jeder, der schon einmal JSON verwendet ha...

js canvas realisiert Bilder mit abgerundeten Ecken

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

Umfassende Website-Bewertungslösung

<br />Manchmal werden Ihnen möglicherweise F...

Detaillierte Erläuterung der MySQL-Indexprinzipien und -Optimierung

Vorwort Dieser Artikel wurde von einem hohen Tier...

Beispielcode für nahtloses Scrollen mit Flex-Layout

In diesem Artikel wird hauptsächlich der Beispiel...

Verwenden Sie Docker, um ein verteiltes lnmp-Image zu erstellen

Inhaltsverzeichnis 1. Verteilte LNMP-Image-Produk...

MySQL fängt die SQL-Anweisung der String-Funktion ab

1. left(name,4) fängt die 4 Zeichen auf der linke...

Lassen Sie uns ausführlich über die gemeinsame MySQL-Abfrage sprechen

Inhaltsverzeichnis Union-Abfrage 1. Fragen Sie di...