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

Wesentliche bedingte Abfrageanweisungen für MySQL-Datenbanken

Inhaltsverzeichnis 1. Grundlegende Grammatik 2. F...

Super detaillierte Schritte zur Installation von Zabbix3.0 auf Centos7

Vorwort Vor Kurzem wurde ein Teil der Geschäftstä...

Unterschied zwischen var und let in JavaScript

Inhaltsverzeichnis 1. Bereiche werden in verschie...

Einführung in Sublime Text 2, ein Web-Frontend-Tool

Sublime Text 2 ist ein leichter, einfacher, effiz...

So verwalten Sie zwischengespeicherte Seiten in Vue

Inhaltsverzeichnis Problem 1: Zerstörung 1. Wie m...

Sortierung und Paginierung von MySQL-Abfragen

Überblick Da wir die Daten normalerweise nicht di...

Wie gut wissen Sie über die Vererbung in JavaScript?

Inhaltsverzeichnis Vorwort Die Beziehung zwischen...

jQuery Canvas generiert ein Poster mit einem QR-Code

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

W3C Tutorial (2): W3C Programme

Der W3C-Standardisierungsprozess ist in 7 verschi...

Eine kurze Analyse der Verwendung von USING und HAVING in MySQL

Dieser Artikel veranschaulicht anhand von Beispie...

Installieren Sie Percona Server+MySQL auf CentOS 7

1. Umgebungsbeschreibung (1) CentOS-7-x86_64, Ker...