docker-compose 构建 Springboot 项目

docker-compose 构建 Springboot 项目

Springboot项目

配置信息

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.getRemoteAddr();
        Visitor visitor=repository.findByIp(ip);
        if(visitor==null){
    
    
            visitor=new Visitor();
            visitor.setIp(ip);
            visitor.setTimes(1);
        }else {
    
    
            visitor.setTimes(visitor.getTimes()+1);
        }
        repository.save(visitor);
        return "我的IP "+visitor.getIp()+" 已经被访问了"+visitor.getTimes()+" 次了.";
    }
}

Dockerfile

FROM maven:3.5-jdk-8
COPY ./settings.xml /usr/share/maven/ref/

使用 maven 进行构建Springboot项目,因为构建过程中默认是从外网下载 jar 包,所以根据 官网说明,将自定义国内源镜像 setting.xml 文件放在 Dockerfile 所在目录并在 Dockerfile 内容加上 COPY ./settings.xml /usr/share/maven/ref/ 即可。

settings.xml 配置参考阿里巴巴开源镜像站

Mysql

使用 mysql/mysql-server:5.7

Web容器(Nginx)

使用 nginx:1.13

配置信息

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

在一组 compose 的服务通讯需要使用 services 的名称进行访问

docker-compose.yml

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"
   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
  • ports: 使用主机端口映射容器端口
  • expose: 暴露端口
  • restart: always 表示如果服务启动不成功会一直尝试(重要)
  • volumes: 加载本地目录下的配置文件到容器目标地址下

启动/关闭服务与测试

启动服务

docker-compose up -d

测试

打开网页 http://ip_addr
访问测试即可

关闭服务

docker-compose down

参考

https://github.com/ityouknow/spring-boot-examples
http://www.ityouknow.com/springboot/2018/03/28/dockercompose-springboot-mysql-nginx.html

猜你喜欢

转载自blog.csdn.net/qq_39906884/article/details/105877233
今日推荐