Auf der offiziellen Website von Spring gibt es einen Artikel mit dem Start von Spring, auf dem Docker verwendet wird, um Spring -Boot -Anwendungen zu veröffentlichen. Es ist ziemlich detailliert, aber einige Details werden nicht erwähnt, und das Eintragshandbuch der offiziellen Website befindet sich in der englischen Version. Lassen Sie es uns hier als Referenz für Freunde mit schlechtem Englisch neu organisieren und aufzeichnen und sich ein Memorandum hinterlassen.
Vorbereiten
Erforderliche Tools und Betriebsumgebung:
Ein Projekt erstellen
Zunächst müssen Sie ein Spring Boot -Projekt erstellen. Spring Tool Suite und Intellij IDEA sind beide mit Plug-Ins zu erstellen. Eine andere Möglichkeit besteht darin, es von http://start.spring.io/ zu erstellen. Diese Methode wird empfohlen. Nachdem Sie Group Id und Artifact Id im Formular ausgefüllt haben, klicken Sie auf die Schaltfläche Projekt Generieren, um sie zu generieren und das heruntergeladene Projekt in Ihre bevorzugte IDE zu importieren.
Ändern Sie die Datei pom.xml und fügen Sie Docker-Maven-Plugin hinzu:
<? 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- <modelVersion> 4.0.0 </modelversion> <gruppeId> org.matrixstudio.springboot </GroupId> <artifactId> Docker </artifactId> <version> 0.0.1-Snapshot </Version> </packaging> jar </packaging> <name> </name </name> </name> Demo-Projekt für Frühlingsfrüchten> </Beschreibung> </name> </name> Demo-Projeo für Spring-Start> </Beschreibung> </name> </name> Demo-Projeo für Spring-Start> <gruppe> org.springframework.boot </Groupid> <artifactId> Spring-Boot-Starter-Parent </artifactid> <version> 1.5.2 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <docker.image.prefix>springio</docker.image.prefix> </properties> <depeopcies> <depeopecy> <GroupId> org.springFramework.boot </GroupId> <artifactId> Spring-Boot-Starter-Web </artifactId> </abhängig> <Eppecing> <GroupId> org.spingFramework <scope>test</scope> </dependency> </dependencies> <build> <plugins> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!-- Docker maven plugin --> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.3</version> <configuration> <imageName>${docker.image.prefix}/${project.artifactId}</imageName> <dockerDirectory>src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <Directory> $ {project.build.directory} </directory> <closas> $ {project.build.finalName} .jar </include> </ressourcen> </configuration> </plugin> </plugins> </build> </project>Das Docker-Maven-Plugin-Plugin wird zum Erstellen von Spring-Boot-Projekten in Docker-Bilder verwendet:
Öffnen Sie die Datei DockerApplication.java und ändern Sie sie in den folgenden Inhalt:
Paket org.matrixstudio.springboot; import org.springframework.boot.springapplication; import org.springframework.boot.autoconfigure.springbootapplication; org.springframework.web.bind.annotation.restController;@SpringBootApplication@rastControllerPublic Class DockerApplication {@RequestMapPing ("/") public String home () {return "Hello Docker World"; } public static void main (String [] args) {SpringApplication.run (dockerApplication.class, args); }} Kompilieren und rennen
Führen Sie das Spring Boot -Projekt aus, indem Sie den folgenden Befehl ausführen:
MVN-Paket && Java -jar Target/Docker-0.0.1-Snapshot.jar
Öffnen Sie den Browser und geben Sie http://localhost:8080 ein. Wenn "Hallo Docker World" erscheint, bedeutet dies, dass der Lauf erfolgreich ist.
Hinweis: Beim Ausführen des obigen Befehls müssen Sie viele Abhängigkeitspakete aus dem offiziellen Maven -Repository herunterladen. Das inländische Netzwerk ist nicht stabil und die Download -Geschwindigkeit ist langsam. Sie können in Betracht ziehen, eine Spiegelstelle zu verwenden, die von einem Dritten bereitgestellt wird, z. B. Alibabas Maven Mirror Repository. Fügen Sie pom.xml die folgende Konfiguration hinzu:
<project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.matrixstudio.springboot</groupId> <artifactId>docker</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <!-- Dependencies --> ...... <!-- Build --> ...... <!-- Aliyun repository --> <repository> <id>central</id> <name>aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <releases> <enabled>true</enabled> </releases> </repository> </repository> </repository> </repository> </project>
Containerisierungsprojekt
Stellen Sie zunächst sicher, dass Docker auf Ihrem Computer installiert ist. Wenn Ihr Docker auf einem Linux -Server installiert ist, müssen Sie das obige Spring -Boot -Projekt auf den Server hochladen. In den folgenden Schritten geht davon aus, dass Sie in einer Linux -Umgebung arbeiten.
Erstellen Sie eine Dockerfile
Docker verwendet eine Datei namens Dockerfile , um die Bildebene anzugeben. Wir müssen zunächst eine Dockerfile -Datei erstellen und den folgenden Befehl ausführen, um die Dockerfile -Datei zu erstellen:
sudo tee src/main/docker/dockerfile <<-'eof'from frolvlad/alpine-oraclejdk8: Slimvolume/tmpadd docker-0.0.1-snapshot.jar App.jarrun sh -c' touch.jar'env java_opts = " $ Java_opts -djava.security.egd = Datei:/dev /./ urandom -jar /app.jar "] eof
Lassen Sie uns den obigen Befehl grob erklären:
Erstellen Sie ein Docker -Bild
Führen Sie den folgenden Befehl aus, um das Docker -Bild zu erstellen:
MVN -Paket Docker: Build
Führen Sie nach Abschluss des Builds den folgenden Befehl aus, um anzuzeigen:
Sudo Docker Bilder
Das Ergebnis ist:
Repository -Tag -Bild -ID Erstellte Größe
Springio/Docker neuest 7E2BA2F7E81E vor 2 Minuten 195 MB
FROLVLAD/ALPINE-ORACLEJDK8 SLIM 00D8610F052E vor 4 Tagen 167 MB
Sie können sehen, dass das von uns erstellte Bild erschienen ist, und der nächste Schritt besteht darin, das Bild auszuführen.
Führen Sie das Docker -Bild aus
Führen Sie den folgenden Befehl aus, um das im vorherige Schritt erstellte Docker -Bild auszuführen:
Sudo Docker Run -P 8080: 8080 -t Springio/Docker
Wenn nichts Unerwartetes passiert, sehen Sie die folgende Ausgabe:
. ____ _ __ _ /// / ___'_ __ _ (_) _ __ _ / / / / () / ___ | '_ |' _ | / / / `| / / / / / / / / / / / / / / / | | | | | | | | | | | | | | | | .__ || | _ | | _ | | _ | | _/__, | / / / / ================================================================================================================ ____ / = / _ / _ / :: fing boot :: (v1.5.2.Release) 2017-03-08 03: 34: 59.434 Info 6- DockerApplication v0.0.1-SNAPSHOT on 00eed53e6928 with PID 6 (/app.jar started by root in /)2017-03-08 03:34:59.445 INFO 6 --- [ main] omspringboot.DockerApplication : No active profile set, falling back to default profiles: default2017-03-08 03:34:59.752 Info 6 --- [Main] CationConFigembeddedWebApplicationContext: Aktualisieren org.springframework.boot.Context.Embedded.AnnotationConFigembeddedwebapplicationContext@4b9af9a9: Start-up-Datum [WED März 03:34:59 GMT 2017]; Wurzel des Kontexteshierarchy2017-03-08 03: 35: 03.755 Info 6 --- [Haupt] sbcettomcatembeddedServletContainer: Tomcat initialisiert mit Port (s): 8080 (http) 2017-03-08 03: 35: 03.807 Info 6 --- [Main] O.APACHE.CATALINA. Startdienst Tomcat2017-03-08 03: 35: 03.821 Info 6 --- [Haupt] org.apache.catalina.Core.Standardengine: Servlet Engine: Apache Tomcat/8.5.112017-03-08 03: 35: 04.042 Info 6-[Ost-Start-1]. Initialisierung von Spring-Embedded WebApplicationContext2017-03-08 03: 35: 04.043 Info 6 --- [Ost-StartStop-1] OST-Web.Context.Contextloader: Root WebApplicationContext: Initialisierung in 4303 MS2017-03-08 03: 35: 35: 04.441 Info 6- [OststOp-1] ost-bwservlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]2017-03-08 03:35:04.455 INFO 6 --- [ost-startStop-1] osbwservlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]2017-03-08 03:35:04.457 Info 6 --- [Ost-StartStop-1] OSBWServlet.FilterRegistrationBean: Mapping-Filter: 'HiddenhttpMethodFilter' an: [/*] 2017-03-08 03: 35: 04.468 Info 6-[Ost-StartStop-1] OsbwServlet.FilterregistrationBean: MACTING-FILTERTOP-1] OSBWWSERT.FILTERREGRAGE: MAPPING-FILTERTOP: MAPPING-FILTERTOP: MAPPARTING: 'httpPutFormContentFilter' to: [/*]2017-03-08 03:35:04.468 INFO 6 --- [ost-startStop-1] osbwservlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]2017-03-08 03:35:05.110 INFO 6 --- [main] swsmmarequestmapPingHandlerAdapter: Auf der Suche nach @ControllerAdvice: org.springframework.boot.context.embeded.AnnotationConFigembeddedwebapplicationContext@4b9af9a9: Start -up -Datum [Mi 08 03:34:59 GMT 2017]; root of context hierarchy2017-03-08 03:35:05.390 INFO 6 --- [ main] swsmmaRequestMappingHandlerMapping : Mapped "{[/]}" onto public java.lang.String org.matrixstudio.springboot.DockerApplication.home()2017-03-08 03: 35: 05.402 Info 6 --- [Main] SWSMMMarequestMapingHandlermaping: Zugeordnet "{[/errungen], produziert = [text/html]}" auf public org.springframework.web.Servlet.ModelandViewView. org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)2017-03-08 03:35:05.404 INFO 6 --- [ main] swsmmarequestmapingHandlermaping: zugeordnet "{[/errungen]}" auf public org.springframework.http.ResponseEntity <java.util.map <java.lang.string, java.lang.object >>> org.springframework.boot.autoconfigure.web.basicerrorController.Error (javax.servlet.http.httpServletRequest) 2017-03-08 03: 35: 05.512 Info 6 --- [Main] Oswshandler.simpleurl-Pathar/WEGHARDER.SIMPLE.SIMPLE.SIMPLE.SIMPLE.SIMPLE.SIMPLE.SIMPLE.SIMPLE.SIMPLE.SIMPLE.SIMPLE. Auf Handler des Typs [Klasse org.springframework org.springFramework.web.servlet.resource.resourcehttprequestHandler] 2017-03-08 03: 35: 05.639 Info 6 --- [Main] oswshandler.simpleurlhandlermapping: Mord-URL-Path. org.springframework.web.servlet.resource.resourcehttprequestHandler] 2017-03-08 03: 35: 06.019 Info 6 --- [Main] osjeaAntationMbeanExter: Registrierung von Bohnen für JMX Expocation On Startup2017-03-08 03: 35: 35: 35: 35: 35: 35: 35: 068. sbcetTomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)2017-03-08 03:35:06.183 INFO 6 --- [ main] omspringboot.DockerApplication : Started DockerApplication in 7.893 seconds (JVM running for 8.743)2017-03-08 03: 35: 56.728 Info 6 --- [NIO-8080-EXEC-1] OCCC [Tomcat]. [Localhost]. [/]: Initialisierung des Spring-FrameworksServlet 'DispatcherServlet'2017-03-08 03: 35: 56.Servlet 6-[NIO-8080-1] Osweblet. FrameworkServlet 'DispatcherServlet': Initialisierung gestartet2017-03-08 03: 35: 56.774 Info 6 --- [NIO-8080-EXEC-1] osweb.servletFühren Sie den folgenden Befehl aus, um den laufenden Docker -Container anzuzeigen:
Sudo Docker PS
Sie können sehen, dass ein Docker -Container ausgeführt wird:
Befehl Container -ID -Bild erstellt Statusports namens00eed53e6928 Springio/Docker "SH -C 'Java $ java ..." Vor ungefähr einer Minute 0.0.0.0:8080->8080/tcp fervent_leavitt
Geben Sie nun http: // localhost: 8080 ein, um das Ergebnis "Hello Docker World" anzuzeigen.
Wenn Sie den Container stoppen möchten, können Sie den folgenden Befehl ausführen:
sudo docker stop 00E
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.