Maison  >  Article  >  base de données  >  Comment utiliser dockercompose pour créer l'application springboot-mysql-nginx

Comment utiliser dockercompose pour créer l'application springboot-mysql-nginx

PHPz
PHPzavant
2023-05-28 08:58:051200parcourir

Utiliser Docker pour créer une application Spring-boot consiste à créer le package jar compilé dans l'image.

Cet article exécute spring-boot avec la base de données en tant qu'ensemble de services Docker.

Ici, j'enregistre simplement mes propres opérations. Pour le code complet en cours d'exécution, voir le contenu de la citation 1 dans "Référence".
(Comment modifier le répertoire de mappage mysql et obtenir l'adresse IP distante)

Étapes principales :

  • Créer une application Springboot simple # 🎜🎜#

  • Ajouter le support Docker à l'application

  • Écrire le fichier de configuration Dockercompose

    #🎜 🎜#
  • Pratiquer l'opération
Créer une application Springboot simple

#🎜🎜 #Do Une application web qui compte le nombre de visites IP sur le site.

et stocké dans la base de données mysql, ici nous utilisons jpa pour accéder à la base de données.

dépendance

<parent>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-parent</artifactid>
  <version>2.0.0.release</version>
</parent>

dépendances de la bibliothèque web, jpa, mysql, tset

<dependencies>
  <dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-web</artifactid>
  </dependency>
  <dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-data-jpa</artifactid>
  </dependency>
  <dependency>
    <groupid>mysql</groupid>
    <artifactid>mysql-connector-java</artifactid>
  </dependency>
  <dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-test</artifactid>
    <scope>test</scope>
  </dependency>
</dependencies>

fichier de configuration

#🎜🎜 #

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=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

Core code


@restcontroller
public class visitorcontroller{
 @autowired
 private visitorrepository repository;
 @requestmapping("/")
 public string index(httpservletrequest request)
 {
 string ip= request.getheader("x-real-ip");
 if(ip== null || "".equals(ip))
 {
  ip = request.getremoteaddr();
 }
 visitor visitor = repository.findbyip(ip);
 if(visitor == null)
 {
  visitor = new visitor();
  visitor.setip(ip);
  visitor.settimes(1l);
 }
 else
 {
  visitor.settimes(visitor.gettimes()+1);
 }
 repository.save(visitor);
 return "ip:"+visitor.getip()+" "+visitor.gettimes()+" times.";
 }
}

Entity class

@entity
public class visitor {
 @id
 @generatedvalue
 private long id;
 @column(nullable=false)
 private long times;
 @column(nullable=false)
 private string ip;
 // get,set 方法略
}

repository layer code fait référence au contenu lié au jpa.

La base de données locale est ouverte et le mot de passe est celui configuré ci-dessus Après l'avoir exécuté en utilisant mvn spring-boot:run, vous pouvez voir le nombre d'IP, qui augmentera à chaque fois qu'il sera compté. .

fichier de configuration dockercompose

Créez un nouveau fichier docker-compose.yaml comme suit :

version: &#39;3&#39;
services:
 nginx:
  container_name: v-nginx
  image: nginx:1.13
  restart: always
  ports:
  - 80:80
  - 443:443
  volumes:
  - ./nginx/conf.d:/etc/nginx/conf.d
 mysql:
  container_name: v-mysql
  image: mysql/mysql-server:5.7
  environment:
  mysql_database: test
  mysql_root_password: root
  mysql_root_host: &#39;%&#39;
  ports:
  - "3306:3306"
  volumes:
  - ./mysqldata:/var/lib/mysql
  restart: always
  
 app:
  restart: always
  build: ./app
  working_dir: /app
  volumes:
   - ./app:/app
   - ~/.m2:/root/.m2
  expose:
   - "8080"
  depends_on:
   - nginx
   - mysql
  command: mvn clean spring-boot:run -dspring-boot.run.profiles=docker
#🎜 🎜# Expliquez principalement ce fichier de configuration et ajoutez les configurations associées au système de fichiers.

services Il existe trois services sous nginx, mysql, app.

images Indique l'utilisation d'images. nginx et mysql sont directement extraits de l'entrepôt Docker.

L'application ne spécifie pas l'image, mais utilise build pour spécifier le répertoire où se trouve le fichier docker.

volumes spécifie le mappage entre les fichiers du répertoire local et l'adresse cible du conteneur.

environment configure les variables d'environnement requises par le conteneur

ports configure le port de mappage entre le local et le conteneur, avec le port local devant et le port conteneur à l'arrière

Configuration des volumes sous ngixn Fonction : écrasez directement le fichier de configuration nginx que nous avons écrit dans le fichier de configuration nginx par défaut dans le conteneur.


Le rôle de la configuration des volumes sous mysql : mapper les fichiers de données mysql vers le répertoire local mysqldata. Lorsque le conteneur est supprimé, les données sont toujours là.


Le rôle de la configuration des volumes sous app : La première ligne est de mapper le fichier de code sur le conteneur. La deuxième ligne consiste à mapper le fichier d'entrepôt Maven au fichier local. Après avoir supprimé le conteneur, reconstruisez-le sans retélécharger les packages de dépendances.

commande : mvn clean spring-boot:run -dspring-boot.run.profiles=docker

La commande est de compiler et exécuter des projets dans des conteneurs utilisent des profils Docker.

Donc le fichier que nous voulons ajoutercommand: mvn clean spring-boot:run -dspring-boot.run.profiles=docker

命令是编译运行容器中的项目,使用docker的profiles。

所以我们要添加的文件

  • dockerfile:新建文件,添加一行from maven:3.5-jdk-8

  • docker的profiles:复制application.properties为application-docker.properties,并把application-docker.properties中数据库连接地址改为jdbc:mysql://mysql:3306/test。

  • nginx的配置文件

server {
  listen 80;
  charset utf-8;
  access_log off;
  location / {
    proxy_pass http://app:8080;
    proxy_set_header host $host:$server_port;
    proxy_set_header x-forwarded-host $server_name;
    proxy_set_header x-real-ip $remote_addr;
    proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
  }
  location /static {
    access_log  off;
    expires   30d;
    alias /app/static;
  }
}

部署验证

把整体的文件拷贝到服务器上,使用docker-compose up

#🎜🎜##🎜🎜#dockerfile : Créez un nouveau fichier et ajoutez une ligne de maven:3.5-jdk-8# 🎜🎜## 🎜🎜##🎜🎜##🎜🎜#docker profiles : copiez application.properties dans application-docker.properties et modifiez l'adresse de connexion à la base de données dans application-docker.properties en jdbc:mysql://mysql : 3306/essai . #🎜🎜##🎜🎜##🎜🎜##🎜🎜#fichier de configuration nginx#🎜🎜##🎜🎜##🎜🎜#rrreee#🎜🎜##🎜🎜#Vérification du déploiement#🎜🎜##🎜 🎜 # #🎜🎜##🎜🎜#Copiez l'intégralité du fichier sur le serveur et utilisez docker-compose up pour l'exécuter. #🎜🎜#

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer