【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:

本次案例还是使用上次的

image-20230314104309849

1、使用maven对项目进行打包

我直接吧项目中的前端文件提出来,就不打开idea了哈,直接在控制台打包了

项目目录下打开cmd,执行如下命令进行打包(注意:需要提前配置好maven环境变量)

mvn clean package -DskipTests

image-20230316163203835

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目录下,结构如下

image-20230316164639320

将view中的文件上传至/home/java20230315/nginx/html/目录下,结构如下

image-20230316164412872

在/home/java20230315目录下执行命令

docker-compose up -d --build

出现下图即可,然后进行下一步

image-20230316165027828

查看容器运行状态是否正常

docker-compose ps

image-20230316165047411

进入mysql容器,执行初始化脚本步骤同上次

访问页面,我的虚拟机ip是10.10.10.10:http://10.10.10.10,这次访问也不一样哈,请注意哦

image-20230316170012303

大功告成,鼓掌

结语

1、关于两种常用的项目部署方式就结束了,servlet的就不说了

2、总体来说,还是比较复杂的,对于docker的功底要求也比较高

3、后面我们会说jenkins流水线,会简单很多哈哈

4、案例获取请回复:java20230316

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈小白.

感谢老板,祝老板今年发大财!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值