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 kopieren Sie eine MySQL-Tabelle

Inhaltsverzeichnis 1.mysqldump Ausführungsprozess...

Einführung in MyCat, die Datenbank-Middleware

1. Mycat-Anwendungsszenarien Mycat wurde für eine...

Util-Modul im node.js-Tutorial-Beispiel – detaillierte Erklärung

Inhaltsverzeichnis Ausgehend von der Typbeurteilu...

Syntax-Alias-Problem basierend auf Löschen in MySQL

Inhaltsverzeichnis MySQL-Löschsyntax-Aliasproblem...

Führen Sie die Schritte aus, um den Fehler 403 Forbidden in Nginx zu beheben.

Die Webseite zeigt 403 Forbidden an Nginx (Yum-In...

Was macht die MySQL-Datenbank?

MySQL ist ein relationales Datenbankverwaltungssy...

Funktionsüberladung in TypeScript

Inhaltsverzeichnis 1. Funktionssignatur 2. Funkti...

Nginx tp3.2.3 404 Problemlösung

Vor Kurzem habe ich Apache auf nginx umgestellt. ...

Was ist em? Einführung und Konvertierungsmethode von em und px

Was ist sie? „em“ bezieht sich auf die Schrifthöhe...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.22

Installation und Konfiguration von MySQL8.0.22 (s...

Reduzieren Sie die Speicher- und CPU-Auslastung durch die Optimierung von Webseiten

Manche Webseiten erscheinen möglicherweise nicht g...

So benennen Sie die Tabelle in MySQL um und worauf Sie achten müssen

Inhaltsverzeichnis 1. Tabellenmethode umbenennen ...