Analyse des Prozesses zum Veröffentlichen und Bereitstellen von Spring Boot-Anwendungen über Docker

Analyse des Prozesses zum Veröffentlichen und Bereitstellen von Spring Boot-Anwendungen über Docker

Es gibt zwei Möglichkeiten, Spring Boot-Projekte in Docker bereitzustellen: manuelle Bereitstellung und Plug-In-Bereitstellung

Manuelle Bereitstellung

1. Erstellen Sie ein Spring-Boot-Projekt mit Idee

pom.xml-Datei

<?xml version="1.0" encoding="UTF-8"?>
<Projekt xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <übergeordnetes Element>
        <artifactId>Spring-Cloud-Beispiele</artifactId>
        <groupId>org.beispiel</groupId>
        <version>1.0-SNAPSHOT</version>
    </übergeordnet>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>DockerDemo</artifactId>

    <Abhängigkeiten>
        <Abhängigkeit>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </Abhängigkeit>
    </Abhängigkeiten>

    <Bauen>
        <Plugins>
            <Plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>Spring-Boot-Maven-Plugin</artifactId>
            </plugin>
        </plugins>
    </bauen>

</Projekt>

spring-boot-maven-plugin muss hinzugefügt werden. Die Funktion dieses Plug-Ins besteht darin, beim Verpacken des Jar-Pakets abhängige Pakete einzuführen. Wenn zum Verpacken „mvn package“ ausgeführt wird, wird es in eine JAR-Datei gepackt, die direkt ausgeführt werden kann. Es kann direkt mit dem Befehl „java -jar“ ausgeführt werden.

Startup-Klasse

Paket Dockerdemo;

importiere org.springframework.boot.SpringApplication;
importiere org.springframework.boot.autoconfigure.SpringBootApplication;
importiere org.springframework.web.bind.annotation.RequestMapping;
importiere org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootAnwendung
öffentliche Klasse Anwendung {
    öffentliche statische void main(String[] args) {
        SpringApplication.run(Anwendung.Klasse, Argumente);
    }

    @RequestMapping("/hallo")
    öffentliche Zeichenfolge hallo(){
        returniere "Hallo Docker-Welt!";
    }
}

2. Verpacken Sie das Projekt in ein Jar

Führen Sie dann den Maven-Befehl in dem Verzeichnis aus, in dem sich die Projektdatei pom.xml befindet, um das Projekt in ein Jar-Paket zu packen.

$ mvn-Paket

Aus dem Ausgabeprotokoll können wir ersehen, dass sich das Jar im Zielverzeichnis befindet. Führen Sie das Jar-Paket direkt aus.

$ java -jar DockerDemo-1.0-SNAPSHOT.jar

Geben Sie anschließend zum Testen http://localhost:8080/hello in den Browser ein.

Bildbeschreibung hier einfügen

3. Docker-Image erstellen

Erstellen einer Docker-Datei

VON java:8
VOLUMEN /tmp
HINZUFÜGEN DockerDemo-1.0-SNAPSHOT.jar DockerDemo.jar
Führen Sie den Befehl bash -c "touch /DockerDemo.jar" aus.
EINSTIEGSPUNKT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/DockerDemo.jar"]

Parametererklärung:

  • FROM: Gibt an, dass das Docker-Image basierend auf JDK8 erstellt wird
  • VOLUME: bedeutet, einen Einhängepunkt zu erstellen, das Containerverzeichnis ist /tmp und das Hostverzeichnis wird automatisch generiert. /tmp wird erstellt, weil der in Spring Boot eingebettete Tomcat-Container standardmäßig /tmp als Arbeitsverzeichnis verwendet.
  • HINZUFÜGEN: Kopieren Sie DockerDemo-1.0-SNAPSHOT.jar außerhalb des Containers in den Container und benennen Sie es in DockerDemo.jar um
  • RUN: Auf RUN folgt ein Bash-Befehl, und -c bedeutet, dass der String dahinter als Befehl ausgeführt wird, also touch /DockerDemo.jar ausgeführt wird. Dieser Befehl ändert die Zugriffszeit und Änderungszeit der Datei DockerDemo.jar auf die aktuelle Zeit.
  • ENTRYPOINT: Der Befehl, der ausgeführt wird, wenn der Container gestartet wird. Dies entspricht der Eingabe von java -jar xxxx.jar in der Befehlszeile. Um die Startzeit von Tomcat zu verkürzen, fügen Sie die Systemeigenschaft von java.security.egd hinzu, um als ENTRYPOINT auf /dev/urandom zu verweisen.

Nachdem Sie das Dockerfile erstellt haben, legen Sie das gepackte Spring Boot-Projekt-JAR-Paket und die Dockerfile-Datei in ein beliebiges Verzeichnis und verwenden Sie den Docker-Befehl, um die Image-Datei zu erstellen:

$ Docker-Image-Build -t DockerDemo:1.

Parametererklärung:

  • bauen: bedeutet, einen Spiegel zu machen
  • -t: bedeutet, das Image zu beschriften, was der Docker-Tag-Image-ID entspricht. Neuer Image-Name: Versionsnummer
  • .: gibt den Speicherort der Dockerfile-Datei an, und . gibt das aktuelle Verzeichnis an

4. Anzeigen und Ausführen des Images

#Bild anzeigen:
$ Docker-Bilder
#Führen Sie das Image aus:
$ Docker-Container ausführen --name DockerDemo -d -p 80:8080 DockerDemo:1

Parametererklärung:

  • Docker-Container ausführen: bedeutet, den Container auszuführen
  • –name: Geben Sie dem Container einen Alias. Beim Betrieb des Containers können Sie den Alias ​​anstelle der Container-ID verwenden, um die Containerverwaltung zu erleichtern
  • -d: Gibt an, dass der Container nach dem Start im Hintergrund ausgeführt wird
  • -p: Portzuordnung. Ordnen Sie Port 8080 im Container dem Port 80 auf dem Host zu.

Bildbeschreibung hier einfügen

Plugin-Bereitstellung

Um das Plugin bereitzustellen, fügen Sie dockerfile-maven-plugin zur Datei pom.xml des Projekts hinzu.

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<Projekt xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <übergeordnetes Element>
        <artifactId>Spring-Cloud-Docker</artifactId>
        <groupId>org.beispiel</groupId>
        <version>1.0-SNAPSHOT</version>
    </übergeordnet>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>Spring-Cloud-Eureka</artifactId>

    <Eigenschaften>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <!-- Bildpräfix, erforderlich beim Übertragen von Bildern in Remote-Bibliotheken. Hier wird eine private Alibaba Cloud-Bibliothek konfiguriert. -->
        <docker.image.präfix>
            registry.cn-huhehaote.aliyuncs.com/monkeybrain
        </docker.image.prefix>
        <!-- Docker-Image-Tag -->
        <docker.tag>neueste</docker.tag>

        <!-- Aktiviertes Profil -->
        <!--<aktivierteEigenschaften></aktivierteEigenschaften>-->
    </Eigenschaften>

    <Abhängigkeiten>
        <Abhängigkeit>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>Spring-Cloud-Starter-Eureka-Server</artifactId>
        </Abhängigkeit>
    </Abhängigkeiten>

    <Profile>
        <!-- Docker-Umgebung -->
        <!--<Profil>
            <id>Docker</id>

            <Eigenschaften>
                <activatedProperties>Docker</activatedProperties>
                <docker.tag>docker-demo-${project.version}</docker.tag>
            </Eigenschaften>
        </profile>-->
    </profile>

    <Bauen>
        <!--Standard-Maven-Befehl-->
        <defaultGoal>installieren</defaultGoal>
        <finalName>${Projekt.ArtifactId}</finalName>

        <Ressourcen>
            <Ressource>
                <Verzeichnis>src/main/ressourcen</Verzeichnis>
                <filtering>wahr</filtering>
            </Ressource>
        </Ressourcen>


        <Plugins>
            <!-- Konfigurieren Sie das Spring Boot Maven-Plugin, um das Projekt in ein ausführbares JAR-Paket zu packen-->
            <Plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>Spring-Boot-Maven-Plugin</artifactId>
                <Konfiguration>
                    <ausführbar>wahr</ausführbar>
                </Konfiguration>
            </plugin>

            <!-- Unit-Tests beim Verpacken überspringen -->
            <Plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <Konfiguration>
                    <skipTests>wahr</skipTests>
                </Konfiguration>
            </plugin>

            <!-- Konfigurieren Sie das Docker-Maven-Plugin, binden Sie den Installationslebenszyklus und generieren Sie ein Docker-Image, wenn Sie die Maven-Installation ausführen -->
            <Plugin>
                <groupId>com.spotify</groupId>
                <artifactId>Docker-Maven-Plugin</artifactId>
                <version>0.4.13</version>
                <!--<Ausführungen>
                    <Ausführung>
                        <phase>installieren</phase>
                        <Ziele>
                            <goal>bauen</goal>
                            <goal>Tag</goal>
                        </Ziele>
                    </Ausführung>
                </Ausführungen>-->
                <Konfiguration>
                    <!-- Um die Docker-Knoten-IP hier zu ändern, müssen Sie den Remote-Verwaltungsport 2375 des Docker-Knotens öffnen.
                    Informationen zur spezifischen Konfiguration finden Sie im vorherigen Artikel zur Docker-Installation und -Konfiguration ->
                    <dockerHost>http://localhost:2375</dockerHost>
                    <imageName>${docker.image.prefix}/${project.build.finalName}</imageName>
                    <serverId>aliyun-docker-registry</serverId>
                    <registryUrl>registry.cn-huhehaote.aliyuncs.com</registryUrl>
                    <pushImage>wahr</pushImage>
                    <!--Spiegel-Tag-->
                    <BildTags>
                        <imageTag>neueste</imageTag>
                    </imageTags>
                    <!--Basisbild-->
                    <baseImage>java:8</baseImage>
                    <!-- Der Einstiegspunkt definiert hier den Befehl, der ausgeführt werden soll, wenn der Container gestartet wird. Wenn der Container gestartet wird, führt er java -jar Paketname--> aus.
                    <Einstiegspunkt>
                        ["java","-jar","/${project.build.finalName}.jar"]
                    </Einstiegspunkt>
                    <Ressourcen>
                        <Ressource>
                            <Zielpfad>/</Zielpfad>
                            <Verzeichnis>${project.build.directory}</Verzeichnis>
                            <include>${project.build.finalName}.jar</include>
                        </Ressource>
                    </Ressourcen>

                    <!--<image>${docker.image.prefix}/${project.build.finalName}</image>
                    <neuerName>${docker.image.prefix}/${project.build.finalName}:${docker.tag}</neuerName>
                    <forceTags>wahr</forceTags>-->
                    <!-- Wenn Sie beim Generieren des Images in die Remote-Bibliothek pushen müssen, setzen Sie pushImage auf true -->
                    <!--<pushImage>falsch</pushImage>-->
                </Konfiguration>
            </plugin>
        </plugins>
    </bauen>


</Projekt>

Ausführen des Push-Befehls

$ mvn sauberes Paket Docker:build -DpushImage

Damit ist dieser Artikel zur Prozessanalyse der Veröffentlichung und Bereitstellung von Spring Boot-Anwendungen über Docker abgeschlossen. Weitere relevante Inhalte zur Bereitstellung von Spring Boot-Anwendungen über Docker 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:
  • Docker Compose stellt ein SpringBoot-Projekt bereit, um eine Verbindung zu MySQL herzustellen, und die dabei auftretenden Fallstricke
  • Mehrere Datenquellen von Springboot arbeiten mit Docker zusammen, um MySQL-Master/Slave bereitzustellen und so einen Lese-/Schreibtrennungseffekt zu erzielen
  • Implementierungsschritte für die Docker-Bereitstellung von Springboot- und Vue-Projekten
  • So implementieren Sie die automatische Bereitstellung des Springboot-Dienstes Docker
  • Implementierung der Springboot-Verpackung als Docker-Image und Deployment

<<:  6 Tipps für Webdesign

>>:  Wie wird die Transaktionsisolation von MySQL erreicht?

Artikel empfehlen

So wählen Sie alle untergeordneten Elemente aus und fügen ihnen in CSS Stile hinzu

Verfahren: Nehmen wir „less“ im tatsächlichen Pro...

Lernen Sie, wie Sie mit vscode eine React-Native-Entwicklungsumgebung erstellen

Frage Der Code hat keine Eingabeaufforderung: Vie...

Zusammenfassung und Beispiele der Kommunikationsmethoden für Vue3-Komponenten

Die Kommunikationsmodi der Vue3-Komponenten sind ...

Detaillierte Erläuterung des virtuellen DOM in der Vue-Quellcodeanalyse

Warum brauchen wir virtuellen Dom? Virtual DOM wu...

Zusammenfassung der Überlegungen zum Schreiben von Web-Frontend-Code

1. Am besten fügen Sie vor dem HTML-Tag einen Satz...

Hinweise zur IE8-Kompatibilität, die mir aufgefallen sind

1. getElementById von IE8 unterstützt nur IDs, nic...

So verwenden Sie Lottie-Animationen in React Native-Projekten

Lottie ist eine von Airbnb entwickelte Open-Sourc...

Vue-Vorlagenkonfiguration und Webstorm-Codeformatspezifikationseinstellungen

Inhaltsverzeichnis 1. Einstellungen für die Spezi...

MySQL-Fremdschlüsseleinschränkung (FOREIGN KEY) Fallerklärung

Die MySQL-Fremdschlüsseleinschränkung (FOREIGN KE...

Detaillierte Erläuterung der Wissenspunkte der Linux-DMA-Schnittstelle

1. Zwei Arten der DMA-Zuordnung 1.1. Konsistente ...

Mehrere spezifische Methoden zur MySQL-Speicherplatzbereinigung

Inhaltsverzeichnis Vorwort 1. Überprüfen Sie die ...