Praxis und Analyse der geschichteten Verpackung von Docker-Images für Spring Boot (empfohlen)

Praxis und Analyse der geschichteten Verpackung von Docker-Images für Spring Boot (empfohlen)

1. Bereiten Sie das Spring Boot-Projekt vor

Einfach, überspringen
Spring Boot-Version > 2.3.x kann einfach ein „Hallo Welt“ schreiben

2. Relevante Konfiguration durchführen

Viele Blogs im Internet betonen, dass Sie die pom.xml manuell konfigurieren müssen, um die geschichtete Verpackung zu aktivieren:

<Bauen>
    <Plugins>
        <Plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>Spring-Boot-Maven-Plugin</artifactId>
            <Konfiguration>
                <!--Unterstützung für abgestufte Kompilierung aktivieren-->
                <Ebenen>
                    <aktiviert>wahr</aktiviert>
                </Ebenen>
            </Konfiguration>
        </plugin>
    </plugins>
</bauen>

In Version 2.3.x ist es eine neue Funktion und muss manuell konfiguriert und aktiviert werden. Die aktuelle Spring Boot-Version (verwendet Version 2.6.1) erfordert jedoch keine manuelle Konfiguration und unterstützt diese Funktion standardmäßig. (Laut einigen Blogs ist es ab Version 2.4.x standardmäßig aktiviert)

In der aktuellen offiziellen Dokumentation (Version 2.6.0) heißt es auch, dass es standardmäßig unterstützt wird, eine manuelle Konfiguration jedoch nur erforderlich ist, wenn diese Funktion nicht benötigt wird:

Das neu gepackte Archiv enthält standardmäßig die Datei layers.idx . Um diese Funktion zu deaktivieren, können Sie dies folgendermaßen tun:

<Projekt>
   <Bauen>
       <Plugins>
           <Plugin>
               <groupId>org.springframework.boot</groupId>
               <artifactId>Spring-Boot-Maven-Plugin</artifactId>
               <Konfiguration>
                   <Ebenen>
                       <aktiviert>falsch</aktiviert>
                   </Ebenen>
               </Konfiguration>
           </plugin>
       </plugins>
   </bauen>
</Projekt>

3. Paket

Führen Sie mvn package aus, um die JAR-Paketdatei zu packen und abzurufen.

Tatsächlich besteht das Wesentliche darin, das Neupaket des Spring-Boot-Maven-Plugins zu verwenden, um das vollständige JAR-Paket mit Abhängigkeiten und das ursprüngliche JAR-Paket zu erhalten (das Suffix .original wird automatisch hinzugefügt).
Öffnen Sie das JAR-Paket und Sie finden die Dateien classpath.idx und layers.idx im Ordner BOOT-INF. Öffnen Sie sie und sehen Sie sie sich an:

Klassenpfad.idx

– „BOOT-INF/lib/logback-classic-1.2.7.jar“

– „BOOT-INF/lib/logback-core-1.2.7.jar“

– „BOOT-INF/lib/log4j-to-slf4j-2.14.1.jar“

– „BOOT-INF/lib/log4j-api-2.14.1.jar“

– „BOOT-INF/lib/jul-to-slf4j-1.7.32.jar“

– „BOOT-INF/lib/jakarta.annotation-api-1.3.5.jar“

– „BOOT-INF/lib/snakeyaml-1.29.jar“

– „BOOT-INF/lib/jackson-databind-2.13.0.jar“

– „BOOT-INF/lib/jackson-annotations-2.13.0.jar“

– „BOOT-INF/lib/jackson-core-2.13.0.jar“

– „BOOT-INF/lib/jackson-datatype-jdk8-2.13.0.jar“

– „BOOT-INF/lib/jackson-datatype-jsr310-2.13.0.jar“

– „BOOT-INF/lib/jackson-module-parameter-names-2.13.0.jar“

– „BOOT-INF/lib/tomcat-embed-core-9.0.55.jar“

– „BOOT-INF/lib/tomcat-embed-el-9.0.55.jar“

– „BOOT-INF/lib/tomcat-embed-websocket-9.0.55.jar“

– „BOOT-INF/lib/spring-web-5.3.13.jar“

– „BOOT-INF/lib/spring-beans-5.3.13.jar“

– „BOOT-INF/lib/spring-webmvc-5.3.13.jar“

– „BOOT-INF/lib/spring-aop-5.3.13.jar“

– „BOOT-INF/lib/spring-context-5.3.13.jar“

– „BOOT-INF/lib/spring-expression-5.3.13.jar“

– „BOOT-INF/lib/spring-boot-2.6.1.jar“

– „BOOT-INF/lib/spring-boot-autoconfigure-2.6.1.jar“

– „BOOT-INF/lib/slf4j-api-1.7.32.jar“

– „BOOT-INF/lib/spring-core-5.3.13.jar“

– „BOOT-INF/lib/spring-jcl-5.3.13.jar“

– „BOOT-INF/lib/spring-boot-jarmode-layertools-2.6.1.jar“

Schichten.idx

- "Abhängigkeiten":

– „BOOT-INF/lib/“

- "Spring-Bootloader":

- "org/"

- „Snapshot-Abhängigkeiten“:

- "Anwendung":

– „BOOT-INF/Klassen/“

– „BOOT-INF/classpath.idx“

– „BOOT-INF/layers.idx“

- "META-INF/"

Überprüfen Sie noch einmal:

Mehrschichtige Informationen ok

4. Docker-Datei

Auch die Dockerfile-Datei ist relativ konventionell. Sie verwendet lediglich den Befehl „jarmode“, um das JAR-Paket zu dekomprimieren, bevor das Image gepackt wird. Während des Packvorgangs werden dann verschiedene Ebenen nacheinander kopiert, und die Anwendungsebene mit der größten Änderungsmöglichkeit wird am Ende platziert. Auf diese Weise können die vorherigen Ebenen, die keine Änderungen aufweisen, den Docker-Cache direkt verwenden, um die Packeffizienz zu verbessern.

VON eclipse-temurin:8-jre-focal als Builder

WORKDIR-Anwendung

ARG JAR_FILE=Ziel/*.jar

KOPIEREN SIE ${JAR_FILE} application.jar

RUN java -Djarmode=layertools -jar application.jar extract

VON eclipse-temurin:8-jre-focal

WORKDIR-Anwendung

KOPIEREN --from=Builder-Anwendung/Abhängigkeiten/ ./

KOPIEREN --from=Builder-Anwendung/Spring-Boot-Loader/ ./

KOPIEREN --from=Builder-Anwendung/Snapshot-Abhängigkeiten/ ./

KOPIEREN --from=Builder-Anwendung/Anwendung/ ./

ENV TZ="Asien/Shanghai"

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

ENV JVM_OPTS=""

ENV JAVA_OPTS=""

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

5. Anwendungsmodifikation und Tauchanalyse

Wenn Sie das Bild nur einmal verpacken, kommen die Vorteile der Schichtung tatsächlich nicht zum Tragen. Sie müssen also einige Inhalte ändern und sie dann erneut verpacken (oder mehrmals, aber das Wesentliche ist dasselbe, also ändern Sie sie hier nur einmal).
Ändern Sie einige Anwendungscodes:

Packen Sie das JAR-Paket neu und erstellen Sie ein neues Image, sodass Sie zwei Images erhalten:

Verwenden Sie „dive“, um die beiden Bilder zu analysieren:

Es kann festgestellt werden, dass bis zur Änderung der Anwendungsebene (Anwendung/Anwendung/) die ID und der Digest der Ebenen auf beiden Seiten genau gleich sind, sodass diese Ebenen wiederverwendet werden können und dieselbe Ebene nur einzeln im Docker-Verzeichnis gespeichert wird, wodurch die zum Kompilieren und Pushen des Containers erforderliche Zeit erheblich verkürzt werden kann.
(Das Verständnis der spezifischen Schichtung von Docker-Images ist noch begrenzt, und ich werde später mehr darüber erfahren.)

Dies ist das Ende dieses Artikels über die Praxis und Analyse des Docker-Image mit Spring Boot-Schichtverpackung. Weitere relevante Inhalte zum Docker-Image mit Spring Boot-Schichtverpackung finden Sie in den vorherigen Artikeln von 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:
  • Verstehen Sie die Implementierung der Docker-Image-Schichtung gründlich
  • Kenntnisse im Bereich Docker-Image-Layering und Dockerfile-Schreiben
  • Detaillierte Erklärung des Prinzips der Docker-Image-Schichtung
  • Eine kurze Analyse der Überlegungen zur Docker-Image-Schichtung
  • Tiefgreifendes Verständnis der Schichtung von Docker-Images (ein Muss für Anfänger)

<<:  Wie gestaltet man eine responsive Website? Vor- und Nachteile von Responsive Webdesign

>>:  HTML verwendet reguläre Ausdrücke zum Testen von Tabellenbeispielen

Artikel empfehlen

JavaScript-Canvas zum Erzielen eines Regentropfeneffekts

In diesem Artikelbeispiel wird der spezifische Co...

Ubuntu 19.04 Installationstutorial (Schritte in Bild und Text)

1. Vorbereitung 1.1 Laden Sie VMware 15 herunter ...

Hinweise zum Upgrade auf mysql-connector-java8.0.27

Kürzlich wurde bei einem Online-Sicherheitsscan e...

So zeigen Sie den Typ des gemounteten Dateisystems in Linux an

Vorwort Wie Sie wissen, unterstützt Linux viele D...

Kleine Details der Web-Frontend-Entwicklung

1 Das Select-Tag muss geschlossen sein <select&...

So erstellen Sie einen Trigger in MySQL

In diesem Artikelbeispiel wird der spezifische Co...

Node.js erstellt ein einfaches Crawler-Case-Tutorial

Vorbereitung Zuerst müssen Sie nodejs herunterlad...

Methoden und Schritte zum Bereitstellen mehrerer War-Pakete in Tomcat

1 Hintergrund JDK1.8-u181 und Tomcat8.5.53 wurden...

Beispiele für die Interaktion zwischen MySQL und Python

Inhaltsverzeichnis 1. Daten vorbereiten Erstellen...

Auszeichnungssprache - Phrasenelemente

Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...

Verwendung von Docker-Image-Speicher-Overlays

1. Übersicht Das Image in Docker ist in Schichten...

Beispielcode zum Konfigurieren von Nginx zur Unterstützung von https

1. Einleitung Lassen Sie Ihre Website immer noch ...