Home Database Mysql Tutorial How to use dockercompose to build springboot-mysql-nginx application

How to use dockercompose to build springboot-mysql-nginx application

May 28, 2023 am 08:58 AM
mysql springboot dockercompose

Using docker to build spring-boot applications is to build the compiled jar package into the image.

This article runs spring-boot together with the database as a set of docker services.

Here I just record my own operations. For the complete running code, see the content in Quote 1 in "Reference".
(How I modify the mysql mapping directory and obtain the remote IP)

Main steps:

  • Build a simple springboot application

  • Adding support under docker to the application

  • Writing dockercompose configuration file

  • Practical operation

Build a simple springboot application

Make a web application and count the number of IP visits to the site.

And stored in the mysql database, here we use jpa to access the database.

Dependencies

1

2

3

4

5

<parent>

  <groupid>org.springframework.boot</groupid>

  <artifactid>spring-boot-starter-parent</artifactid>

  <version>2.0.0.release</version>

</parent>

Copy after login

Web, jpa, mysql, tset library dependencies

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<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>

Copy after login

Configuration file

1

2

3

4

5

6

7

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

Copy after login

Core code

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

@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.";

 }

}

Copy after login

Entity class

1

2

3

4

5

6

7

8

9

10

11

@entity

public class visitor {

 @id

 @generatedvalue

 private long id;

 @column(nullable=false)

 private long times;

 @column(nullable=false)

 private string ip;

 // get,set 方法略

}

Copy after login

Repository layer code refers to jpa related content.

The local database is opened, and the password is the one in the above configuration. After running it using mvn spring-boot:run, you can see the number of IPs, which will increase after each statistics.

dockercompose configuration file

Create a new docker-compose.yaml file, as follows:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

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

Copy after login

Mainly explain this configuration file, and Add relevant configurations to the file system.

There are three services under services nginx, mysql, app.
images specifies the use of images. nginx and mysql are directly taken from the docker warehouse.
The image is not specified in the app, but the directory where the dockerfile is located is specified with build.
volumes specifies the mapping between files in the local directory and the container target address.
environment configures the environment variables required by the container
ports configures the mapping port between the local and the container, with the local port in front and the container port in the back

The role of volumes configuration under ngixn: The nginx configuration file we wrote directly overwrites the default nginx configuration file in the container.

The role of volumes configuration under mysql: maps the mysql data files to the local mysqldata directory. When the container is deleted, the data is still there.

The role of volumes configuration under app: The first line is to map the code file to the container. The second line is to map the maven warehouse file to the local. After deleting the container, build it again without re-downloading the dependency packages.

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

The command is to compile and run the project in the container, use docker profiles.

So the file we want to add

  • dockerfile: Create a new file and add a line from maven:3.5-jdk-8

  • docker profiles: Copy application.properties to application-docker.properties, and change the database connection address in application-docker.properties to jdbc:mysql://mysql:3306/test.

  • nginx configuration file

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

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;

  }

}

Copy after login

Deployment verification

Put the overall file Copy it to the server and run it using docker-compose up.

The above is the detailed content of How to use dockercompose to build springboot-mysql-nginx application. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot Article Tags

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

PHP's big data structure processing skills PHP's big data structure processing skills May 08, 2024 am 10:24 AM

PHP's big data structure processing skills

How to optimize MySQL query performance in PHP? How to optimize MySQL query performance in PHP? Jun 03, 2024 pm 08:11 PM

How to optimize MySQL query performance in PHP?

How to use MySQL backup and restore in PHP? How to use MySQL backup and restore in PHP? Jun 03, 2024 pm 12:19 PM

How to use MySQL backup and restore in PHP?

How to insert data into a MySQL table using PHP? How to insert data into a MySQL table using PHP? Jun 02, 2024 pm 02:26 PM

How to insert data into a MySQL table using PHP?

What are the application scenarios of Java enumeration types in databases? What are the application scenarios of Java enumeration types in databases? May 05, 2024 am 09:06 AM

What are the application scenarios of Java enumeration types in databases?

How to fix mysql_native_password not loaded errors on MySQL 8.4 How to fix mysql_native_password not loaded errors on MySQL 8.4 Dec 09, 2024 am 11:42 AM

How to fix mysql_native_password not loaded errors on MySQL 8.4

How to use MySQL stored procedures in PHP? How to use MySQL stored procedures in PHP? Jun 02, 2024 pm 02:13 PM

How to use MySQL stored procedures in PHP?

Performance optimization strategies for PHP array paging Performance optimization strategies for PHP array paging May 02, 2024 am 09:27 AM

Performance optimization strategies for PHP array paging

See all articles