docker-compose部署微服务项目(mysql+springboot+vue)
一、准备:
文件结构:
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上传文件到服务器:
2. docker-compose后台运行:
第一次下载,如果没有镜像会去pull镜像,并创建容器。会挺久。基础镜像挺大的。
3. 查看运行情况:
4. 访问:
项目部署地址:http://114.115.181.66 源码仓库:https://github.com/SanguineWang/springboot-selectionsystem