Verwenden Sie Dockercompose, um eine Springboot-MySQL-Nginx-Anwendung zu erstellen

Verwenden Sie Dockercompose, um eine Springboot-MySQL-Nginx-Anwendung zu erstellen

Im vorherigen Artikel haben wir Docker verwendet, um eine Spring-Boot-Anwendung zu erstellen, die das kompilierte JAR-Paket in das Image eingebaut hat.

Dieser Artikel führt Spring-Boot zusammen mit der Datenbank als eine Reihe von Docker-Diensten aus.

Hier zeichne ich nur meine eigenen Vorgänge auf. Den kompletten laufenden Code finden Sie im Inhalt von Referenz 1 unter „Referenz“.
(Ich habe das MySQL-Mapping-Verzeichnis geändert und die Remote-IP-Methode erhalten)

Hauptschritte:

  • Erstellen Sie eine einfache Springboot-Anwendung
  • Fügen Sie der Anwendung Docker-Unterstützung hinzu
  • Docker Compose-Konfigurationsdatei schreiben
  • Praxisbetrieb

Erstellen Sie eine einfache Springboot-Anwendung

Erstellen Sie eine Webanwendung, um die Anzahl der IP-Adressen zu zählen, die die Site besuchen.

Und speichern Sie es in einer MySQL-Datenbank. Hier verwenden wir JPA, um auf die Datenbank zuzugreifen.

verlassen

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

Abhängigkeiten von Web-, JPA-, MySQL- und Tset-Bibliotheken

<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-data-jpa</artifactId>
  </Abhängigkeit>
  <Abhängigkeit>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
  </Abhängigkeit>
  <Abhängigkeit>
    <groupId>org.springframework.boot</groupId>
    <artifactId>Spring-Boot-Starter-Test</artifactId>
    <scope>Test</scope>
  </Abhängigkeit>
</Abhängigkeiten>

Konfigurationsdateien

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.Benutzername=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql=true

Kerncode

@RestController
öffentliche Klasse VisitorController {
 @Autowired
 privates VisitorRepository-Repository;
 @RequestMapping("/")
 öffentlicher String-Index (HttpServletRequest-Anforderung)
 {
 String-IP = Anfrage.getHeader("X-Real-IP");
 wenn(ip== null || "".equals(ip))
 {
  ip = request.getRemoteAddr();
 }
 Besucher Besucher = repository.findByIp(ip);
 wenn(Besucher == null)
 {
  Besucher = neuer Besucher();
  Besucher.setIp(ip);
  Besucher.setTimes(1L);
 }
 anders
 {
  Besucher.setTimes(Besucher.getTimes()+1);
 }
 repository.save(Besucher);
 returniere "ip:"+visitor.getIp()+" "+visitor.getTimes()+" mal.";
 }
}

Entitätsklasse

@Juristische Person
öffentliche Klasse Besucher {
 @Ausweis
 @GenerierterWert
 private lange ID;
 @Spalte(nullfähig=falsch)
 privat Lange Zeiten;
 @Spalte(nullfähig=falsch)
 private String-IP;
 // get, set Methoden ausgelassen}

Der Repository-Layer-Code bezieht sich auf JPA-bezogenen Inhalt.

Die lokale Datenbank wird geöffnet und das Passwort wie oben konfiguriert. Nach dem Ausführen mit mvn spring-boot:run wird die Anzahl der IPs angezeigt, die nach jeder Statistik automatisch erhöht wird.

Docker Compose-Konfigurationsdatei

Erstellen Sie wie folgt eine neue Datei docker-compose.yaml:

Version: '3'
Leistungen:
 nginx:
  Containername: v-nginx
  Bild: nginx:1.13
  Neustart: immer
  Häfen:
  - 80:80
  -443:443
  Bände:
  - ./nginx/conf.d:/etc/nginx/conf.d
 MySQL:
  Containername: v-mysql
  Bild:mysql/mysql-server:5.7
  Umfeld:
  MYSQL_DATABASE: Test
  MYSQL_ROOT_PASSWORD: root
  MYSQL_ROOT_HOST: '%'
  Häfen:
  - „3306:3306“
  Bände:
  - ./mysqldata:/var/lib/mysql
  Neustart: immer
  
 App:
  Neustart: immer
  Erstellen: ./app
  Arbeitsverzeichnis: /app
  Bände:
   - ./app:/app
   - ~/.m2:/root/.m2
  exponieren:
   - "8080"
  hängt ab von:
   - nginx
   -mysql
  Befehl: mvn clean spring-boot:run -Dspring-boot.run.profiles=docker

Erklären Sie hauptsächlich diese Konfigurationsdatei und fügen Sie die zugehörige Konfiguration im Dateisystem hinzu.

Unter „Dienste“ gibt es drei Dienste: nginx, mysql und app.
Bilder geben an, dass Bilder verwendet werden sollen. Nginx und MySQL werden direkt aus dem Docker-Repository übernommen.
In der App wird nicht das Image angegeben, sondern mit Build das Verzeichnis, in dem sich das Dockerfile befindet.
Volumes gibt die Zuordnung zwischen Dateien in lokalen Verzeichnissen und Container-Zieladressen an.
environment konfiguriert die vom Container benötigten Umgebungsvariablen
ports konfiguriert die lokalen und Container-Mapping-Ports, wobei der lokale Port vorne und der Container-Port hinten steht.

Der Zweck der Volume-Konfiguration unter nginx besteht darin, die von uns geschriebene nginx-Konfigurationsdatei direkt in die Standard-nginx-Konfigurationsdatei im Container zu überschreiben.

Der Zweck der Volume-Konfiguration unter MySQL besteht darin, die MySQL-Datendateien dem lokalen mysqldata-Verzeichnis zuzuordnen. Beim Löschen des Containers bleiben die Daten erhalten.

Die Funktion der Volumes-Konfiguration unter App: Die erste Zeile ordnet die Codedatei dem Container zu. Die zweite Zeile ordnet die Maven-Repository-Datei der lokalen Datei zu. Nach dem Löschen des Containers können Sie ihn erneut erstellen, ohne abhängige Pakete erneut herunterzuladen.

command: mvn clean spring-boot:run -Dspring-boot.run.profiles=docker

Der Befehl dient zum Kompilieren und Ausführen des Projekts im Container unter Verwendung von Docker-Profilen.

Wir müssen also die Datei hinzufügen

  • Dockerfile: Erstellen Sie eine neue Datei und fügen Sie eine Zeile FROM maven:3.5-jdk-8 hinzu
  • Docker-Profile: Kopieren Sie application.properties nach application-docker.properties und ändern Sie die Datenbankverbindungsadresse in application-docker.properties in jdbc:mysql://mysql:3306/test.
  • nginx-Konfigurationsdatei
Server {
  hören Sie 80;
  Zeichensatz UTF-8;
  Zugriff_Abmeldung;
  Standort / {
    Proxy-Passwort http://app:8080;
    Proxy_set_header Host $host:$server_port;
    Proxy_set_header X-Weitergeleiteter Host $server_name;
    Proxy_Set_Header X-Real-IP $Remote_Addr;
    proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for;
  }
  Standort /static {
    Zugriff_Abmeldung;
    läuft in 30 Tagen ab;
    Alias ​​/app/static;
  }
}

Validierung der Bereitstellung

Kopieren Sie die gesamte Datei auf den Server und führen Sie sie mit docker-compose up aus.

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 Compose stellt ein SpringBoot-Projekt bereit, um eine Verbindung zu MySQL herzustellen, und die dabei auftretenden Fallstricke
  • Implementierung eines Docker-Compose-Bereitstellungsprojekts basierend auf MySQL8
  • So führen Sie MySQL mit Docker-Compose aus
  • Eine kurze Analyse des Problems, dass MySQL bei der Bereitstellung mit Docker-Compose nicht zugänglich ist
  • So erstellen Sie ein Elk-System mit Docker Compose
  • Detaillierter Prozess zum Erstellen von MongoDB und MySQL mit Docker-Compose

<<:  js implementiert das Popup-Anmeldefeld durch Klicken auf das Popup-Fenster

>>:  Gründe und Lösungen für das Fehlschlagen der Erstellung von Fremdschlüsseln durch MySQL

Artikel empfehlen

25 Beispiele für die Verwendung kreisförmiger Elemente im Webdesign

Heute listet dieser Beitrag einige großartige Beis...

Detaillierte Einführungshinweise zu Vue

Inhaltsverzeichnis 1. Einleitung 2. Erster Eindru...

border-radius-Methode zum Hinzufügen abgerundeter Ränder zu Elementen

border-radius:10px; /* Alle Ecken sind mit einem ...

Docker stellt Containern dynamisch Ports zur Verfügung

Zeigen Sie die IP-Adresse des Containers an docke...

HTML+CSS zum Erstellen eines einfachen Fortschrittsbalkens

1. HTML-Code Code kopieren Der Code lautet wie fo...

So entfernen Sie den gepunkteten Rahmen beim Klicken auf einen Link in FireFox

Ich bin heute auf mehrere Browserkompatibilitätsp...

Grundlegendes Einführungstutorial zu MySQL-Partitionstabellen

Vorwort In einem aktuellen Projekt mussten wir ei...

Detaillierte Erläuterung der Live-Übertragungsfunktion von Vue

Vor kurzem hat das Unternehmen zufällig Live-Über...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.18

In diesem Artikel wird das grafische Tutorial zur...