In den letzten Tagen habe ich gelernt, wie man Spring Boot-Anwendungen in Docker ausführt. Früher gab es ein Maven-Plugin, mit dem man direkt einen Docker-Ordner in src/main und eine neue Dockerfile-Datei erstellen konnte. Nach dem Kompilieren und Verpacken kann man das Docker-Plugin direkt ausführen, was dem Ausführen Als ich die Spring Boot-Anwendung später in einen Spiegel eingebaut habe, habe ich daher nicht mehr das bereitgestellte Docker Maven-Plugin verwendet, sondern eine neue Dockerfile-Datei im Stammverzeichnis des aktuellen Projekts erstellt. Nachdem die Anwendung geschrieben war, habe ich den Befehl zum Einbau der Anwendung in einen Spiegel wie folgt manuell ausgeführt. Springboot-Anwendung pom.xml In der Datei pom.xml müssen Sie hier mehrere Repositories angeben und mehrere Plug-Ins bereitstellen, und zwar wie folgt: <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"> <modelVersion>4.0.0</modelVersion> <groupId>cn.com</groupId> <artifactId>springbootweb</artifactId> <version>1.0-SNAPSHOT</version> <packaging>Glas</packaging> <Name>Spring :: Boot :: Web</Name> <übergeordnetes Element> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.1.RELEASE</version> <relativerPfad/> </übergeordnet> <Eigenschaften> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <docker.image.prefix>springio</docker.image.prefix> <docker.version>0.3.8</docker.version> <java.version>1.8</java.version> </Eigenschaften> <Abhängigkeiten> <Abhängigkeit> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </Abhängigkeit> </Abhängigkeiten> <Repositorys> <Repository> <id>Frühlings-Schnappschüsse</id> <url>http://repo.spring.io/snapshot</url> <Schnappschüsse> <aktiviert>wahr</aktiviert> </Schnappschüsse> </Repository> <Repository> <id>Meilensteine des Frühlings</id> <url>http://repo.spring.io/milestone</url> <Schnappschüsse> <aktiviert>wahr</aktiviert> </Schnappschüsse> </Repository> </Repositorys> <pluginRepositories> <pluginRepository> <id>Frühlings-Schnappschüsse</id> <url>http://repo.spring.io/snapshot</url> </pluginRepository> <pluginRepository> <id>Meilensteine des Frühlings</id> <url>http://repo.spring.io/milestone</url> </pluginRepository> </pluginRepositories> <Bauen> <Plugins> <Plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>Maven-Compiler-Plugin</artifactId> <version>3.2</version> <Konfiguration> <compilerArgument>-Parameter</compilerArgument> <Quelle>1.8</Quelle> <target>1,8</target> <Kodierung>UTF-8</Kodierung> </Konfiguration> </plugin> <Plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.18.1</version> <Konfiguration> <skipTests>wahr</skipTests> </Konfiguration> </plugin> <Plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>Maven-Ressourcen-Plugin</artifactId> <version>2.6</version> <Konfiguration> <Kodierung>UTF-8</Kodierung> </Konfiguration> </plugin> <Plugin> <groupId>org.springframework.boot</groupId> <artifactId>Spring-Boot-Maven-Plugin</artifactId> <!--<version>${spring.boot.version}</version>--> <Konfiguration> <mainClass>cn.com.SpringBootWebApplication</mainClass> <layout>ZIP</layout> </Konfiguration> <Hinrichtungen> <Ausführung> <Ziele> <Ziel> neu verpacken </Ziel> </Ziele> </Ausführung> </Ausführungen> </plugin> </plugins> </bauen> <Profile> <Profil> <id>JDK1.8</id> <Aktivierung> <activeByDefault>wahr</activeByDefault> </Aktivierung> <Eigenschaften> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <Kodierung>UTF-8</Kodierung> </Eigenschaften> </Profil> </profile> </Projekt> Hier werden mehrere Warehouse-Adressen bereitgestellt. Der Grund dafür ist, dass, wenn die Springboot-Anwendung in diesem Artikel in Docker eingefügt wird, der Quellcode direkt eingefügt und dann zum Ausführen darin kompiliert und verpackt wird. Wenn die Warehouse-Adresse zum Herunterladen des JAR-Pakets nicht angegeben wird, werden die Abhängigkeiten aus dem zentralen Warehouse abgerufen, was sehr langsam ist und zu einem Pull-Timeout führt, wodurch die Anwendung unbrauchbar wird. Daher werden mehrere andere Warehouse-Adressen zum Herunterladen von Abhängigkeiten bereitgestellt. Darüber hinaus gibt es hier ein Plug-In. Nachdem Sie dieses Plug-In verwendet haben, können Sie die Anwendung direkt in Form von mvn spring-boot:run ausführen. Daher habe ich mich nicht entschieden, java -jar xxx.jar zum Ausführen der Anwendung zu verwenden. Anwendung und Verantwortlicher Diese SpringBoot-Anwendung ist recht einfach und bietet einen einfachen Controller mit einer Schnittstelle ähnlich „Hello World“ wie folgt: Paket cn.com.controllers; importiere org.springframework.web.bind.annotation.RequestMapping; importiere org.springframework.web.bind.annotation.RestController; importiere java.util.HashMap; importiere java.util.Map; /** * Erstellt von xiaxuan am 16.11.27. */ @RestController öffentliche Klasse IndexController { @RequestMapping(Wert = "/index", ergibt = "Anwendung/json;Zeichensatz=utf-8") öffentlicher Objektindex() { Map<String, Objekt> Ergebnis = neue HashMap<String, Objekt>(); result.put("msg", "hallo Welt"); Ergebnis zurückgeben; } } Stellen Sie eine einfache Helloworld-Methode bereit. Folgendes ist die Startklasse der Anwendung: paketcn.com; importiere org.springframework.boot.SpringApplication; importiere org.springframework.boot.autoconfigure.SpringBootApplication; /** * Erstellt von xiaxuan am 16.11.27. */ @SpringBootAnwendung öffentliche Klasse SpringBootWebApplication { öffentliche statische void main(String[] args) { SpringApplication.run(SpringBootWebApplication.class, args); } } Bei einem normalen Spring Boot-Start ist es ganz einfach. Starten Sie einfach die Startklasse SpringBootWebApplication. Wenn Sie es jedoch in einem Docker-Container ausführen, ist es nicht so einfach. Sehen Sie sich die Dockerfile-Datei unten an. Docker-Datei Auch die Dockerfile-Datei ist relativ einfach aufgebaut und sieht wie folgt aus: # Basisbild VON java:8 # Betreuer WARTUNGSBEDIENER bingwenwuhen [email protected] # Pakete aktualisieren und Maven installieren LAUFEN \ export DEBIAN_FRONTEND=nichtinteraktiv && \ sed -i 's/# \(.*multiverse$\)/\1/g' /etc/apt/sources.list && \ apt-get update && \ apt-get -y Upgrade && \ apt-get install -y vim wget curl maven # Datenträger anhängen VOLUME /vol/Entwicklung # Arbeitsverzeichnis erstellen RUN mkdir -p /vol/entwicklung RUN mkdir -p /vol/development/src ARBEITSVERZEICHNIS /vol/entwicklung KOPIEREN ./src /vol/development/src/ KOPIEREN ./pom.xml /vol/development/ # Maven-Exec CMD ["mvn", "sauber", "installieren", "spring-boot:run"] Das Dockerfile verwendet Java8 als Basisimage und Maven muss separat im Basisimage installiert werden. Denn in unserem Dockerfile wird der gesamte Quellcode in das Image eingegeben und hier wird nur das generierte JAR nicht in das Image eingegeben. Das ist also das, was ich zuvor gesagt habe, nämlich dass das Warehouse in pom.xml angegeben werden muss. Wenn das Warehouse nicht angegeben ist, werden beim Abrufen von Abhängigkeiten im Image die Abhängigkeiten aus dem zentralen Warehouse abgerufen, was sehr langsam sein wird. Ich habe es zuvor mehrmals versucht und der grundlegende Abrufvorgang ist abgelaufen und fehlgeschlagen. Geben Sie daher hier das Warehouse an, um die Abhängigkeiten abzurufen. Erstellen des Images Führen Sie nun den Befehl im Verzeichnis Nach dem Spiegeln führen Sie Jetzt läuft der Container. Anforderungsschnittstelle Bevor Sie die Schnittstelle anfordern, müssen Sie die IP-Adresse der virtuellen Docker-Maschine überprüfen. Die IP-Adresse dieser Maschine lautet 192.168.99.100. Der Befehl zum Anfordern der Schnittstelle lautet: Locken http://192.168.99.100:8080/index Die Antwort lautet: { "msg":"hallo Welt" } Die Anforderung ist erfolgreich. Die Springboot-Anwendung wird erfolgreich im Docker ausgeführt. Frage
Quellcode Ich habe den Quellcode auf GitHub hochgeladen. Sie können ihn bei Bedarf herunterladen. Quellcode herunterladen Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Beispielcode zur Implementierung des Verlaufs in Vuex
>>: Beispiel für die Konvertierung von Spark RDD in einen Dataframe und das Schreiben in MySQL
Vorwort Das Dateisystem ist für die Organisation ...
Wenn Sie Eingabe und Bild in dieselbe Zeile setzen...
Später habe ich auch hinzugefügt, wie man Jupyter...
1. BIOS überprüfen Überprüfen Sie zunächst, in we...
Inhaltsverzeichnis 1. Vorbereitung 1. Bereiten Si...
Ob es sich nun um das Hintergrundbild oder die Tex...
undefined Wenn wir in JavaScript feststellen möch...
In diesem Artikelbeispiel wird der spezifische Co...
Die EXPLAIN-Anweisung wird im MySQL-Abfrageanweis...
1. Laden Sie das RPM-Paket für Linux herunter htt...
Wenn Benutzer MySQL-Datenbanken zum ersten Mal in...
mysql5.5.28 Installations-Tutorial zu Ihrer Infor...
In diesem Artikel wird der spezifische Code von j...
Bei der tatsächlichen Entwicklung kann der Primär...
Wenn Sie zum Starten der Seite das Plugin „html-w...