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

Docker stellt Mysql, .Net6, Sqlserver und andere Container bereit

Inhaltsverzeichnis Installieren Sie Docker unter ...

Lösung für falsche Zeichenfolgenwerte in MySQL

Viele Freunde berichten von folgendem Fehler, wen...

Tiefgreifendes Verständnis des Slot-Scopes in Vue (für Anfänger geeignet)

Es gibt bereits viele Artikel über Slot-Scope auf...

MySQL-Kill-Befehl – ​​Verwendungshandbuch

KILL [VERBINDUNG | ABFRAGE] Prozesslisten-ID In M...

Detailliertes Tutorial zum Herunterladen und Installieren von mysql8.0.21

Offizielle Website-Adresse: https://www.mysql.com...

Es ist Jahresende, ist Ihr MySQL-Passwort sicher?

Vorwort: Das Jahr neigt sich dem Ende zu. Ist es ...

Konfigurieren von MySQL und Squel Pro auf dem Mac

Als Reaktion auf die Popularität von nodejs haben...

Nginx-Reverseproxy und Lastausgleichspraxis

Reverse-Proxy Unter Reverse-Proxy versteht man de...

So erhalten Sie die Schnittmenge/Differenz/Vereinigung zweier Mengen in MySQL

Typische MySQL-Szenarien: Schnittmenge und Differ...