【docker】- docker-compose实战之springboot前后端分离项目构建与部署-爱代码爱编程
唠嗑部分
上篇文章我们说了SpringBoot项目的部署(伪前后端不分离)
首先解释一下,我们准备的案例实际是前后端分离的,将前端代码打在jar中来当做前后端不分离,实际也是一样,所以上述用了伪
今天我们来说一说如何部署SpringBoot+前后端分离项目,本来打算呢使用Vue脚手架做一个案例,但是太浪费时间了,所以就复用了上次的,本质是一样的,其实上次的前端也是vue,只不过没有工程化
那下面我们就来说说如何部署
言归正传
再说本篇之前,我先做一下忏悔,上篇文章的docker-compose.yml缺了两行(java项目没有暴露端口,会无法访问),我在centos调试后没有及时更新,正确的如下
version: '3.1'
services:
mysql:
image: mysql:5.7
container_name: cxs.mysql.com
environment:
- MYSQL_ROOT_PASSWORD=root
volumes:
- /home/mysql/sql/:/usr/local/sql/
- /home/mysql/etc/:/etc/mysql/conf.d/
networks:
- cxs-app
java-app:
build:
context: ./
dockerfile: Dockerfile
image: book-manager-sys:1.0
container_name: java-app
command: "--server.port=2023"
ports:
- "2023:2023"
depends_on:
- mysql
volumes:
- /etc/localtime:/etc/localtime:ro
networks:
- cxs-app
networks:
cxs-app:
本次案例还是使用上次的
1、使用maven对项目进行打包
我直接吧项目中的前端文件提出来,就不打开idea了哈,直接在控制台打包了
项目目录下打开cmd,执行如下命令进行打包(注意:需要提前配置好maven环境变量)
mvn clean package -DskipTests
2、编写Dockerfile文件(同上篇文章)
FROM 基于镜像java:8
ADD 复制命令,复制当前目录下的*.jar到java/app.jar
EXPOSE 声明暴露的端口
WORKDIR 声明工作目录
RUN 运行脚本
ENTRYPOINT 执行命令,不可覆盖
CMD 执行命令,可覆盖
FROM java:8
ADD *.jar java/app.jar
EXPOSE 2023
WORKDIR java
RUN echo 'Asia/Shanghai' >/etc/timezone
ENTRYPOINT ["java","-jar","app.jar","--spring.profiles.active=prod"]
CMD ["--server.port"]
3、编写docker-compose.yml文件
下面的主要解释一下,常见的见文章:
networks 声明网络,处在同一网络下的服务可使用容器名通讯
depends_on 优先级,即mysql先启动。在启动java-app
version: '3.1'
services:
mysql:
image: mysql:5.7
container_name: cxs.mysql.com
environment:
- MYSQL_ROOT_PASSWORD=root
volumes:
- /home/mysql/sql/:/usr/local/sql/
- /home/mysql/etc/:/etc/mysql/conf.d/
networks:
- cxs-app
java-app:
build:
context: ./
dockerfile: Dockerfile
image: book-manager-sys:1.0
container_name: java-app
command: "--server.port=2023"
depends_on:
- mysql
volumes:
- /etc/localtime:/etc/localtime:ro
networks:
- cxs-app
nginx:
image: nginx
container_name: nginx
ports:
- "80:80"
depends_on:
- java-app
volumes:
- /home/java20230315/nginx/conf/:/etc/nginx/conf.d/
- /home/java20230315/nginx/html/:/usr/share/nginx/html/
networks:
- cxs-app
networks:
cxs-app:
4、创建目录及目录说明
创建/home/java20230315/nginx/conf/、/home/java20230315/nginx/html/目录
- /home/java20230315/nginx/conf/ nginx配置文件挂载目录
- /home/java20230315/nginx/html/ nginx前端静态文件挂载目录
5、上传jar包、前端代码、init.sql、Dockerfile、docker-compose.yml
init.sql的使用方式同上篇文章,请参考一下,本次不做太多说明:
将jar包、Dockerfile、docker-compose.yml上传至/home/java20230315目录下,结构如下
将view中的文件上传至/home/java20230315/nginx/html/目录下,结构如下
在/home/java20230315目录下执行命令
docker-compose up -d --build
出现下图即可,然后进行下一步
查看容器运行状态是否正常
docker-compose ps
进入mysql容器,执行初始化脚本步骤同上次
访问页面,我的虚拟机ip是10.10.10.10:http://10.10.10.10,这次访问也不一样哈,请注意哦
大功告成,鼓掌
结语
1、关于两种常用的项目部署方式就结束了,servlet的就不说了
2、总体来说,还是比较复杂的,对于docker的功底要求也比较高
3、后面我们会说jenkins流水线,会简单很多哈哈
4、案例获取请回复:java20230316