Beispielcode zum Bereitstellen eines Spring-Boot-Projekts mit Docker

Beispielcode zum Bereitstellen eines Spring-Boot-Projekts mit Docker

1. Grundlegender Spring-Boot-Schnellstart

1.1 Schnellstart pom.xml fügt die folgenden Abhängigkeiten hinzu

<übergeordnetes Element>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>
  </übergeordnet>

  <Eigenschaften>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </Eigenschaften>

  <Abhängigkeiten>
    <Abhängigkeit>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </Abhängigkeit>
    <Abhängigkeit>
      <groupId>org.springframework.boot</groupId>
      <artifactId>Spring-Boot-Starter-Test</artifactId>
      <scope>Test</scope>
    </Abhängigkeit>
  </Abhängigkeiten>

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

Spring-Boot-Startklasse

@SpringBootAnwendung
öffentliche Klasse DockerApplication {

  öffentliche statische void main(String[] args) {
    SpringApplication.run(DockerApplication.class, args);
  }
}

Testen der API

@RestController
öffentliche Klasse DockerStarterApi {

  @GetMapping("/api/docker/hallo")
  public String hallo() {
    gib "Hallo Docker" zurück;
  }
}

Konfigurieren Sie die Startkonfigurationsdatei application.yml

Server:
 port: 9090 # Um den Effekt zu demonstrieren, wird hier der Standardport 8080 geändert

Überprüfen Sie Spring Boot

. ____ _ __ _ _
 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/ ___)| |_)| | | | | | | (_| | ) ) ) )
 ' |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|================|___/=/_/_/_/
 :: Spring Boot :: (v2.0.2.RELEASE)

...

2018-12-17 17:26:13.385 INFO 48740 --- [main] osjeaAnnotationMBeanExporter: Beans für JMX-Anzeige beim Start registrieren
2018-12-17 17:26:13.448 INFO 48740 --- [ main] osbwembedded.tomcat.TomcatWebServer : Tomcat gestartet auf Port(s): 9090 (http) mit Kontextpfad ''
2018-12-17 17:26:13.453 INFO 48740 --- [main] pers.study.docker.DockerApplication: DockerApplication in 1,982 Sekunden gestartet (JVM läuft seit 2,602)

Prüfen Sie, ob die API wirksam ist

$ curl -XGET 'http://localhost:9090/api/docker/hello'
hallo Docker

Browser-Check

http://localhost:9090/api/docker/hello

1.2 Verpackung und Inbetriebnahme

Projektverpackung

Führen Sie nach Abschluss der obigen Schritte den Verpackungsbefehl aus:

$ mvn clean -U -Dmaven.test.skip Paket kompilieren

Da finalName in der obigen POM-Datei definiert ist, können Sie hier sehen, dass spring-docker.jar nach der Kompilierung und Verpackung im target generiert wird.

<finalName>Spring-Docker</finalName>

Probelauf

$ java -jar target/spring-docker.jar

Wenn nichts schief geht (hinterlassen Sie eine Nachricht, wenn Sie Fragen haben~), sind die Laufergebnisse dieselben wie oben und prüfen Sie, ob die API effektiv ist.

2. Docker-Schnellinstallation

Als nächstes bereiten Sie Docker vor

Installieren

Von der offiziellen Website herunterladen und installieren

Installation prüfen, Hilfe anzeigen

$ docker --version
Docker-Version 18.06.0-ce, Build 0ffa825

$ Docker --Hilfe
Verwendung: Docker [OPTIONEN] BEFEHL
Eine autarke Laufzeitumgebung für Container
...

Spiegelbeschleunigung

Chinas offizieller Spiegelbeschleuniger

3. Konfigurieren Sie Spring-Boot + Docker

Docker-Plugin zu pom.xml hinzufügen

<Eigenschaften>
    <docker.image.prefix>springboot</docker.image.prefix>
  </Eigenschaften>

  <Bauen>
    <Plugins>
      <!-- Docker-Maven-Plugin -->
      <Plugin>
        <groupId>com.spotify</groupId>
        <artifactId>Docker-Maven-Plugin</artifactId>
        <version>1.0.0</version>
        <Konfiguration>
          <imageName>${docker.image.prefix}/${project.build.finalName}</imageName>
          <dockerDirectory>src/main/docker</dockerDirectory>
          <Ressourcen>
            <Ressource>
              <Zielpfad>/</Zielpfad>
              <Verzeichnis>${project.build.directory}</Verzeichnis>
              <include>${project.build.finalName}.jar</include>
            </Ressource>
          </Ressourcen>
        </Konfiguration>
      </plugin>
    </plugins>
  </bauen>

Erstellen einer Dockerfile

Gemäß der Konfiguration der obigen Datei pom.xml , <dockerDirectory>src/main/docker</dockerDirectory> , wird hier das Verzeichnis der Docker-Konfigurationsdatei konfiguriert. Sie müssen daher unter src/main einen Docker-Ordner erstellen und gleichzeitig eine Dockerfile Datei erstellen.

Die Verzeichnisstruktur ist wie folgt:

Docker-Konfigurationsdateistruktur.png

Dockerfile bearbeiten

VON openjdk:8-jdk-alpine
VOLUMEN /tmp
ADD spring-docker.jar app.jar
EINSTIEGSPUNKT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

FROM gibt an, dass das Bild auf Java 8 basiert

VOLUME gibt das Mount-Verzeichnis an

ADD kopiert die gepackte Datei und benennt sie in app.jar

Laut der offiziellen Dokumentation unten ist ENTRYPOINT eine Systemeigenschaft, die hinzugefügt wird, um die Startzeit von Tomcat zu verkürzen.

Wir haben ein VOLUME hinzugefügt, das auf /tmp verweist, da eine Spring Boot-Anwendung dort standardmäßig Arbeitsverzeichnisse für Tomcat erstellt. Dies hat zur Folge, dass auf Ihrem Host unter /var/lib/docker eine temporäre Datei erstellt und diese mit dem Container unter /tmp verknüpft wird. Dieser Schritt ist für die einfache App, die wir hier geschrieben haben, optional, kann aber für andere Spring Boot-Anwendungen erforderlich sein, wenn diese tatsächlich in das Dateisystem schreiben müssen.

Um die Startzeit von Tomcat zu verkürzen, haben wir eine Systemeigenschaft hinzugefügt, die auf "/dev/urandom" als Entropiequelle verweist. Dies ist bei neueren Versionen von Spring Boot nicht erforderlich, wenn Sie die "Standard"-Version von Tomcat (oder einen anderen Webserver) verwenden.

Die Konfiguration ist abgeschlossen!

4. Docker startet Spring-Boot

Rufen Sie module auf und führen Sie Folgendes aus:

$ mvn Paket Docker:Build

[INFO] Suche nach Projekten...

...

 ---> Wird ausgeführt in e1f8aba72bdf
Zwischenbehälter entfernen e1f8aba72bdf
 ---> 36a61c09f09a
ProgressMessage{id=null, status=null, stream=null, error=null, progress=null, progressDetail=null}
Erfolgreich gebaut 36a61c09f09a
Erfolgreich getaggt mit springboot/spring-docker:latest
[INFO] Springboot/Spring-Docker erstellt
[INFO] -------------------------------------------------------------------
[INFO] ERFOLG AUFBAUEN
[INFO] -------------------------------------------------------------------
[INFO] Gesamtzeit: 6.367 s
[INFO] Beendet am: 2018-12-17T20:48:21+08:00
[INFO] -------------------------------------------------------------------

Spiegel anzeigen

$ Docker-Bilder
REPOSITORY TAG BILD ID ERSTELLT GRÖSSE
springboot/spring-docker latest 36a61c09f09a vor 2 Minuten 123 MB

Ausführen des Images

$ docker run -p 9090:9090 -t springboot/spring-docker
 . ____ _ __ _ _
 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/ ___)| |_)| | | | | | | (_| | ) ) ) )
 ' |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|================|___/=/_/_/_/
 :: Spring Boot :: (v2.0.2.RELEASE)

2018-12-17 12:53:21.502 INFO 1 --- [ main] pers.study.docker.DockerApplication : Starte DockerApplication v1.0-SNAPSHOT auf 94991c04be5d mit PID 1 (/app.jar gestartet von root in /)
2018-12-17 12:53:21.509 INFO 1 --- [ main] pers.study.docker.DockerApplication : Kein aktives Profil festgelegt, Rückgriff auf Standardprofile: Standard

···

2018-12-17 12:53:25.255 INFO 1 --- [main] osjeaAnnotationMBeanExporter: Beans für JMX-Anzeige beim Start registrieren
2018-12-17 12:53:25.337 INFO 1 --- [ main] osbwembedded.tomcat.TomcatWebServer : Tomcat gestartet auf Port(s): 9090 (http) mit Kontextpfad ''
2018-12-17 12:53:25.353 INFO 1 --- [ main] pers.study.docker.DockerApplication : DockerApplication in 4,485 Sekunden gestartet (JVM läuft seit 5,346)

Container anzeigen

$ Docker ps
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
94991c04be5d springboot/spring-docker "java -Djava.securit…" vor 53 Sekunden Vor 52 Sekunden 0.0.0.0:9090->9090/tcp quizzical_bhabha

Start überprüfen und auf die API zugreifen

$ curl -XGET 'http://localhost:9090/api/docker/hello'
hallo Docker

An diesem Punkt ist die Docker-Bereitstellung von Spring-Boot abgeschlossen.

5. Entfernen Sie das Bild

Stoppen des Containers

$ Docker-Stopp 94991c04be5d
94991c04be5d

Löschen eines Containers

$ Docker rm 94991c04be5d
94991c04be5d

Löschen eines Bildes

$ Docker-Image rm Springboot/Spring-Docker
Ohne Tag: springboot/spring-docker:latest
Gelöscht: sha256:36a61c09f09ab88cfe5a05f564deb57498682f4a6f3ec01d2a8c4fdc80ac1e41
Gelöscht: sha256:3f9aef70be6d4d43c205454d8874f10bc2f7280f70eb88cd1f04937b7965dd27
Gelöscht: sha256:9a5800e93615bb4c5128bb36d31ec494327c01f1a9a768c1ff538badf76628b9
Gelöscht: sha256:d9c66f907448fa9e61fd5f9267d7fcf8e1f4b52d0a20466414f2f45777261284

6. Weitere Konfigurationsfunktionen

Hinzufügen von Umgebungseigenschaften

$ docker run -e "SPRING_PROFILES_ACTIVE=prod" -p 9090:9090 -t springboot/spring-docker

Wird im Hintergrund ausgeführt

$ docker run -p 9090:9090 -d springboot/spring-docker

Container-Debugging aktivieren und Dockerfile ändern

VON openjdk:8-jdk-alpine
VOLUMEN /tmp
ADD spring-docker.jar app.jar
ENV JAVA_OPTS ''
CMD java -Djava.security.egd=file:/dev/./urandom $JAVA_OPTS -jar app.jar

Docker-Lauf

Kopieren Sie den Code wie folgt:
$ docker run -e "JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=n" -p 9090:9090 -p 5005:5005 -t springboot/spring-docker

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:
  • Docker-Bereitstellung – Springboot-Projektbeispielanalyse
  • Führen Sie die Schritte für Spring Boot aus, um Projekte schnell mit Docker bereitzustellen.
  • Java-Remote-Ein-Klick-Bereitstellung von Springboot auf Docker über Idea
  • Springboot integriert die Docker-Bereitstellung, um zwei Möglichkeiten zum Erstellen von Docker-Images zu implementieren
  • Die Lösung für das Springboot-Projekt, um ein War-Package-Docker-Paket zu erstellen und keine statischen Ressourcen unter der Ressource zu finden
  • Implementierung der Spring Boot-Anwendungsveröffentlichung in Docker
  • Praxis der Spring Boot- und Docker-Bereitstellung
  • Springboot-Docker-Prinzip und Projektaufbau

<<:  Vue + node realisiert Audioaufzeichnungs- und -wiedergabefunktion

>>:  Was tun, wenn Sie Ihr MySQL-Passwort vergessen?

Artikel empfehlen

So beheben Sie den Startfehler des Docker-Containers

Frage: Nach dem Neustart des Computers kann der M...

CSS3 verwendet die Übergangseigenschaft, um Übergangseffekte zu erzielen

Detaillierte Beschreibung der Eigenschaften Der Z...

Stimmt es, dass der Webdesign-Stil umso besser ist, je einfacher er ist?

Ursprüngliche Adresse: http://www.webdesignfromsc...

Vue implementiert scrollbaren Popup-Fenstereffekt

In diesem Artikel wird der spezifische Code von V...

17 404-Seiten, die Sie erleben möchten

Wie können wir sagen, dass wir 404 vermeiden soll...

So verwenden Sie js, um festzustellen, ob eine Datei UTF-8-codiert ist

Konventionelle Lösung Verwenden Sie FileReader, u...

So verwenden Sie async und await richtig in JS-Schleifen

Inhaltsverzeichnis Übersicht (Loop-Modus – Allgem...

jQuery-Plugin zur Implementierung des Minesweeper-Spiels (2)

In diesem Artikel wird der zweite Artikel zur Ver...

Implementierung einer coolen 3D-Würfeltransformationsanimation in CSS3

Ich liebe das Programmieren, es macht mich glückl...

Zusammenfassung verschiedener Methoden zur JS-Datentyperkennung

Inhaltsverzeichnis Hintergrund Welche Methoden gi...

So verbinden Sie JDBC mit MySQL 5.7

1. Bereiten Sie zunächst die MySQL- und Eclipse-U...

Transkript der Implementierung berechneter Vue-Eigenschaften

In diesem Artikel wird das Implementierungszeugni...