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 # 🎜🎜#
#🎜🎜 #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.
<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>
#🎜🎜 #
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
@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 public class visitor { @id @generatedvalue private long id; @column(nullable=false) private long times; @column(nullable=false) private string ip; // get,set 方法略 }
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 dockercomposeCréez un nouveau fichier docker-compose.yaml comme suit :
version: '3' 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: '%' 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
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 conteneurports 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
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!