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

Details zur Verwendung von Klassenstilen in Vue

Inhaltsverzeichnis 1. Boolesche Werte 2. Ausdruck...

Schritte für Docker zum Erstellen eines eigenen lokalen Image-Repositorys

1. Umgebung und Vorbereitung 1. Ubuntu 14.04 2.Do...

JavaScript zum Erzielen eines Zeitlupenanimationseffekts

In diesem Artikel wird der spezifische Code für J...

Detaillierte Erklärung des Fischschwarm-Algorithmus im CocosCreator-Spiel

Vorwort Ich wollte vor kurzem CocosCreator lernen...

Methode zur Erstellung von Vue-Scaffolding-Lernprojekten

1. Was ist Scaffolding? 1. Vue-CLI Vue CLI ist ei...

Eine kurze Analyse der Grundkonzepte von HTML-Webseiten

Was ist eine Webseite? Die Seite, die nach dem HT...

Informationen zur Bildlaufleiste in HTML/Bildlaufleiste entfernen

1. Die Farbe der Bildlaufleiste unter xhtml Im Ori...

Podman bootet den Container automatisch und vergleicht ihn mit Docker

Inhaltsverzeichnis 1. Einführung in Podman 2. Vor...