• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    使用dockercompose搭建springboot-mysql-nginx应用

    上篇使用docker构建spring-boot应用,是把编译好的jar包构建到镜像中。

    这篇是把spring-boot连同数据库,做为一组docker服务运行起来。

    这里只是把自己操作记录下来,完整运行的代码见“参考”中的引用1中的内容。
    (我修改mysql映射目录及获取远程ip的方法)

    主要步骤:

    搭建简单的springboot应用

    做一个web应用,统计访问该站点的ip次数。

    并存储到mysql数据库中,这里使用jpa的方式访问数据库。

    依赖

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

    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 方法略
    }
    

    Repository 层代码参考jpa 相关内容。

    本地数据库打开,密码是上面配置中的,使用mvn spring-boot:run运行起来之后,可以看到ip的次数,每次统计后就自增。

    dockercompose配置文件

    新建docker-compose.yaml文件,如下:

    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

    主要对这个配置文件进行解释,并在文件系统中增加相关的配置。

    services下面有三个服务nginx,mysql,app。
    images 指明使用镜像。nginx及mysql都是直接取docker仓库中已有的。
    app中没有指明镜像,但用build指定了Dockerfile所在的目录。
    volumes 指定了本地目录下的文件与容器目标地址的映射。
    environment 配置了容器所需要的环境变量
    ports 配置了本地与容器的映射的端口,本地端口在前,容器端口在后

    ngixn下的volumes配置的作用:把我们写好的nginx配置文件直接覆盖到容器中默认的nginx配置文件。

    mysql下的volumes配置的作用:把mysql的数据文件映射到了本地mysqldata目录下。当容器删除后,数据还在。

    app下的volumes配置的作用:第一行是把代码文件映射到容器中。第二行是把maven的仓库文件映射到本地。容器删除之后,再构建,不用重新下载依赖包。

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

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

    所以我们要添加的文件

    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部署Spring Boot的方法示例
    下一篇:如何禁止网站内容被搜索引擎收录的几种方法讲解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    使用dockercompose搭建springboot-mysql-nginx应用 使用,dockercompose,搭建,springboot-mysql-nginx,