docker-compose部署微服务项目(mysql+springboot+vue)

一、准备:
文件结构:

docker部署Benotes docker部署微服务项目_docker部署Benotes

1. docker-compose:
# 指定版本
version: '3.7'

services:
  # 数据库服务
  tutor-selection-mysql:
    # 容器命名
    container_name: tutor-selection-mysql
    # 指定mysql官方镜像
    image: mysql:8
    # 数据挂载,宿主位置:容器位置,容器中的数据与宿主机的文件夹进行挂载,防止删除容器后数据丢失,或者当使用新的容器,想使用原来的数据时方便恢复,后面的容器的位置是官方定义的
    volumes:
      - ./mysql/data/:/var/lib/mysql/
    # 声明网络
    networks:
      - springboot-mysql-nginx-network
    # 环境变量,mysql要求提供,根据此密码可以进入容器mysql中
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: root

  # Springboot服务
  tutor-selection-openjdk:
    # 容器命名
    container_name: tutor-selection-openjdk
    #通过./springboot下的dockerfile构建镜像
    build:
      context: ./springboot
    networks:
      - springboot-mysql-nginx-network
    # 环境变量,声明的变量会在项目中用得到
    environment:
      # 从当前的网络中找指定主机端口
      - dhost=tutor-selection-mysql
      # 登录名密码
      - dusername=root
      - dpassword=root
    # 将容器端口映射到宿主机端口,可以声明也可以不声明,一般情况下不会将后端端口直接暴露出去
    ports:
      - "8080:8080"
    # 声明依赖于那个服务
    depends_on:
      - tutor-selection-mysql

  # nginx服务
  tutor-selection-nginx:
    # 容器命名
    container_name: tutor-selection-nginx
    # 构建镜像
    build:
      context: ./vue
    networks:
      - springboot-mysql-nginx-network
    # 环境变量配置,这个环境变量引入不进来,不懂为啥
    environment:
      # 配置前端Nginx反向代理路径
      - backend=tutor-selection-openjdk:8080
    # 映射端口 主机a->容器b 通过宿主机指定端口a访问容器内指定端口b
    ports:
      - "80:80"
    depends_on:
      - tutor-selection-openjdk

# 创建桥接网络,实现容器之间互交
networks:
  springboot-mysql-nginx-network:
    driver: bridge
2. 后端部署打包前application-prod.properties配置:
#文件汇总的变量会在compose文件中声明
spring.datasource.url=jdbc:mysql://${dhost}:3306/selctionsystem?createDatabaseIfNotExist=true\
  &serverTimezone=Asia/Shanghai
spring.datasource.username=${dusername}
spring.datasource.password=${dpassword}
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
########## jpa ##########
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.fomat_sql=ture
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
########## log ##########
logging.level.root=warn
logging.level.com.example=info
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} %-5level  %C.%M[%line] \n - %msg%n
# 时间;日志级别;类;方法;行(行不能使用圆括号)
3. 后端Dockerfile:
# 声明基础镜像
FROM openjdk:11
# 维护者信息
MAINTAINER SanguineWang "1443133579@qq.com"
# 打包后在项目目录下,将编译后的jar包复制到容器指定位置
COPY backstage-0.0.1-SNAPSHOT.jar /home/tutor-selection-api.jar
# 声明入口,运行容器后,运行java程序,加参数使用生产环境的配置
ENTRYPOINT java -jar /home/tutor-selection-api.jar --spring.profiles.active=prod
4. 前端Dockerfile:
FROM nginx
# 将项目打包后的文件放到nginx容器的html目录
COPY dist/ /usr/share/nginx/html/
# 将nginx配置放到指定的位置
COPY default.conf /etc/nginx/conf.d/default.conf
5. 前端配置default.conf:
#配置的变量在docker-compose中声明
server {
    # 设定通过nginx上传文件的大小
    listen   80;
    server_name localhost;
    client_max_body_size 0;
    access_log /var/log/nginx/host.access_log main;
    error_log /var/log/nginx/error_log error;

    # 入口文件的设置
    location / {
    # 入口文件所在位置
        root  /usr/share/nginx/html;
        index  index.html index.htm;
    }
    # 反向代理设置
    location /api/ {
    # 完成反向代理,映射到后端,上面的一般不需要改,只改后端ip
    # 如果前端启动不起来,得手动改ip了。
    # docker inspect containerID 可以自己查一下后端容器ip
         #proxy_pass http://后端容器ip:8080;
         proxy_pass http://${backend}:8080;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
二、部署:
1. 使用xftp上传文件到服务器:

docker部署Benotes docker部署微服务项目_java_02

2. docker-compose后台运行:

第一次下载,如果没有镜像会去pull镜像,并创建容器。会挺久。基础镜像挺大的。

docker部署Benotes docker部署微服务项目_nginx_03


docker部署Benotes docker部署微服务项目_docker_04

3. 查看运行情况:

docker部署Benotes docker部署微服务项目_docker_05

4. 访问:

docker部署Benotes docker部署微服务项目_java_06


项目部署地址:http://114.115.181.66 源码仓库:https://github.com/SanguineWang/springboot-selectionsystem