【Docker】docker部署springboot+vue+mysql+nginx前后端分离项目【部署实战篇】

news/2024/7/5 8:11:30

文章目录

  • 0、安装docker并准备一个springboot-vue前后端分离项目
  • 前后端打包放到服务器上
  • 1、docker 安装jdk
  • 2、docker 安装mysql
    • 通过Docker命令进入Mysql容器内部
    • 初始化数据
    • sqlDbx连接查看
  • 3、docker build构建后端镜像
    • 修改配置数据库JDBC链接IP为虚拟机服务器IP
    • maven clean package打包后端jar并上传到服务器
    • 编写Dockfile
    • build 构建
    • 查看构建的后端镜像app
  • 4、docker run运行后端镜像
    • 查看运行容器app日志
      • java.net.NoRouteToHostException: No route to host (Host unreachable) --如果出现需要开启防火墙端口3306
    • 虚拟服务器防火墙增加端口3306
    • 验证后台是否链接mysql成功
    • 再次查看容器日志mysql成功
  • 5、docker 安装nginx镜像
  • 6、构建前镜像
    • 编写前端Dockfile
    • npm run build 前端打包镜像dist 上传到服务器 将default.conf 放在Dockerfile平级目录下
    • vue.config.js配置:target为后端地址
    • 执行docker build构建
    • 运行一个容器nginx-vue
    • 防火开启端口9090 80 否则Nginx会报错No Route...
    • 验证 前端->后端联通性
  • 7、登录成功

在这里插入图片描述

0、安装docker并准备一个springboot-vue前后端分离项目

安装docker: https://blog.csdn.net/qq_39900031/article/details/121666892
springboot-vue前后端分离项目:https://gitee.com/ma-haojie/springboot-vue-demo.git

前后端打包放到服务器上

在这里插入图片描述

1、docker 安装jdk

https://jackwei.blog.csdn.net/article/details/110227719

docker search openjdk:8
docker pull openjdk:8
docker run -di --name=jdk1.8 openjdk:8
docker exec -it jdk1.8 /bin/bash
root@2365c0f5b0ce:/# java -version
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
root@2365c0f5b0ce:/#

2、docker 安装mysql

docker pull mysql:5.7

在这里插入图片描述

docker run \
--name mysql \
-d \
-p 3306:3306 \
--restart unless-stopped \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7

在这里插入图片描述

通过Docker命令进入Mysql容器内部

docker exec -it mysql /bin/bash
## 或者
docker exec -it mysql bash

初始化数据

# 1.拷贝SQL文件到mysql容器中
docker cp /root/app/springboot-vue.sql mysql:/springboot-vue.sql

# 2. 创建数据库
docker exec -it mysql mysql -uroot -p123456  

# 3.登陆控制台执行source 命令
mysql> source springboot-vue.sql

在这里插入图片描述

sqlDbx连接查看

在这里插入图片描述
在这里插入图片描述

3、docker build构建后端镜像

修改配置数据库JDBC链接IP为虚拟机服务器IP

在这里插入图片描述
在这里插入图片描述

maven clean package打包后端jar并上传到服务器

在这里插入图片描述

编写Dockfile

FROM openjdk:8
ENV APP_PATH=/root/app
WORKDIR $APP_PATH
ADD ./springboot-0.0.1-SNAPSHOT.jar /$APP_PATH/apps.jar
EXPOSE 9090
ENTRYPOINT ["java","-jar"]
CMD ["apps.jar"]

或者

FROM openjdk:8
ENV APP_PATH=/home/app
WORKDIR $APP_PATH
ADD ./springboot-0.0.1-SNAPSHOT.jar /$APP_PATH/apps.jar
EXPOSE 9090
ENTRYPOINT ["java","-jar","/home/app/apps.jar"]

build 构建

docker build -t app:0.1 .

在这里插入图片描述

查看构建的后端镜像app

在这里插入图片描述

4、docker run运行后端镜像

docker run --name app -p 9090:9090 --restart=always -d app:0.1

--restart=always参数能够使我们在重启docker时,自动启动相关容器。 Docker容器的重启策略如下:
no,默认策略,在容器退出时不重启容器 on-failure,在容器非正常退出时(退出状态非0),才会重启容器
on-failure:3,在容器非正常退出时重启容器,最多重启3次
always,在容器退出时总是重启容器
unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

在这里插入图片描述

查看运行容器app日志

docker  logs -f app

java.net.NoRouteToHostException: No route to host (Host unreachable) --如果出现需要开启防火墙端口3306

在这里插入图片描述

虚拟服务器防火墙增加端口3306

   查看防火墙状态命令         systemctl status firewalld
   重启防火墙命令            systemctl reload firewalld
   关闭防火墙命令            systemctl stop firewalld
查看数据库服务器已开放端口
firewall-cmd --list-ports
开放3406端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=3306/tcp --permanent
重启防火墙命令            
systemctl reload firewalld
再次查看数据库服务器已开放端口
firewall-cmd --list-ports

在这里插入图片描述

验证后台是否链接mysql成功

curl -X GET http://localhost:9090/user?pageNum=1&pageSize=10&search=

在这里插入图片描述

再次查看容器日志mysql成功

docker  logs -f app

在这里插入图片描述

5、docker 安装nginx镜像

https://blog.csdn.net/BThinker/article/details/123507820

docker pull nginx:latest

6、构建前镜像

编写前端Dockfile

# 基础镜像使用Nginx
FROM nginx:latest
# 作者
MAINTAINER hjma
# 添加时区环境变量,亚洲,上海
ENV TimeZone=Asia/Shanghai
# 将前端dist文件中的内容复制到nginx目录
COPY dist  /usr/share/nginx/html/
# 用本地的nginx配置文件覆盖镜像的Nginx配置 必须跟Dockerfile平级目录
COPY default.conf /etc/nginx/conf.d/
# 暴露端口
EXPOSE 80

npm run build 前端打包镜像dist 上传到服务器 将default.conf 放在Dockerfile平级目录下

在这里插入图片描述

vue.config.js配置:target为后端地址

在这里插入图片描述

执行docker build构建

docker build -t vue-demo:1.0 .

在这里插入图片描述

运行一个容器nginx-vue

docker run \
-p 9876:80 \
--name nginx-vue \
-v /home/nginx-vue/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx-vue/conf/conf.d:/etc/nginx/conf.d \
-v /home/nginx-vue/log:/var/log/nginx \
-d vue-demo:1.0

在这里插入图片描述

防火开启端口9090 80 否则Nginx会报错No Route…

在这里插入图片描述

firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=9090/tcp --permanent
重启防火墙命令            
systemctl reload firewalld
再次查看数据库服务器已开放端口
firewall-cmd --list-ports

在这里插入图片描述

验证 前端->后端联通性

##192.168.23.128我的虚拟机IP
curl -X GET http://192.168.23.128:9876/api/user?pageNum=1&pageSize=10&search=

在这里插入图片描述

7、登录成功

在这里插入图片描述


http://lihuaxi.xjx100.cn/news/1243000.html

相关文章

认识ASP.NET MVC的5种AuthorizationFilter

一、IAuthorizationFilter 所有的AuthorizationFilter实现了接口IAuthorizationFilter。如下面的代码片断所示,IAuthorizationFilter定义了一个OnAuthorization方法用于实现授权的操作。作为该方法的参数filterContext是一个表示授权上下文的AuthorizationContext对…

基础知识学习---牛客网C++面试宝典(八)操作系统--第三节

1、本栏用来记录社招找工作过程中的内容,包括基础知识学习以及面试问题的记录等,以便于后续个人回顾学习; 暂时只有2023年3月份,第一次社招找工作的过程; 2、个人经历: 研究生期间课题是SLAM在无人机上的应…

web动画(Animation) - 过渡效果transition

内容目录: 过渡动画;过渡动画的属性; 一、过渡动画 过渡(transition)作用:- 通过过渡可以指定一个属性发生变化时的切换方式- 通过过渡可以创建一些非常好的效果,提升用户的体验现在我们通过一…

MAVEN - 使用maven-dependency-plugin的应用场景是什么?

简述 maven-dependency-plugin是MAVEN的一个插件。 作用 该插件主要用于管理项目中的依赖,使用该插件可以方便地查看、下载、复制和解压缩依赖,还支持生成依赖树和依赖报告。 功能 该插件有很多可用的GOAL,大部分与依赖构建、依赖分析和依…

arcpy批量提取面状水系中间线

由于面状水系可能存在多条中间线,因此批量提取时需要使用 ArcGIS 中的 Feature To Line 工具结合 Python 循环和游标来完成。 以下是代码: import arcpy import os # 设置输入输出路径和文件名 input_folder r"C:\data\river_polygons" out…

阿里云弹性公网EIP收费价格表

阿里云弹性公网EIP怎么收费?EIP地域不同价格不同,EIP计费模式分为包年包月和按量付费,弹性公网IP可以按带宽收费也可以按使用流量收费,阿里云百科分享阿里云弹性公网IP不同地域、不同计费模式、按带宽和按使用流量详细收费价格表&…

005、体系结构之TiKV_Raft日志

Raft日志 1、Raft与Multi Raft2、Raft 日志复制2.1、复制流程总览2.2、Propose2.3、Append2.3、Replicate(Append)2.4 Committed2.4 Apply 3、Raft Leader 选举3.1、原理3.2、节点故障Leader(主副本)选举⽇志复制 1、Raft与Multi Raft 一个region的大小是…

Linux系统的tty架构及UART驱动详解

​一、模块硬件学习 1.1. Uart介绍 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称为UART,是一种异步收发传输器,是电脑硬件的一部分。它将要传输的资料在串行通信与并行通信之间加以转换。 作为把并…