docker部署springboot+vue+mysql之“坑”

引言:

        在搞通了本地的springboot+vue小工具后,就想着把它部署到服务器上。之前一直听闻Docker大名,如今也来膜拜下“Docker大佬”,于是用了centos7服务器安装了Docker,在其基础上去部署小工具。不接触不知道,一接触差点被“坑”惨。于是记录下在部署的过程中遇到的所有问题以及是如何解决的,各位请接着看~

整个部署参考文章:Docker部署SpringBoot+Vue前后端分离项目_docker打包部署springboot前后端项目-优快云博客

一、部署mysql

特别说明:使用的是DBeaver连接数据库。

1.拉取镜像

docker pull mysql

2.安装mysql

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=YourPassword \
  mysql

3.启动mysql容器并查看是否成功

# 启动容器
docker start mysql
#查看正在运行的容器
docker ps

踩坑1:DBeaver连接报"Public Key Retrieval is not allowed"

解决:使用DBeaver连接时,将allowPublicKeyRetrieval的值改为TRUE,然后重新连接就可以成功了。

二、部署springboot

1.上传jar和DockerFile到服务器

注意jar包要与DockerFile文件在同一目录下!我的路径是 /home/centos/soft/springboot。

2.拉取openjdk

需要先拉取openjdk镜像才能进行第3步的构建boot镜像操作!!!

docker pull openjdk:8-jdk

3.构建springboot镜像

docker build -f ./DockerFile -t app .

4.创建boot容器

第1个app:镜像名称
第2个app:容器别名

docker run -d -p 9000:9000 --name app app

踩坑2:在构建boot镜像时一直出现错误

ERROR: failed to solve: DeadlineExceeded: DeadlineExceeded: DeadlineExceeded: java:8: failed to resolve source metadata for docker.io/library/java:8: failed to do request: Head "https://dockerg.x/v2/library/java/manifests/8?ns=docker.io": dial tcp x.x.x.x:443: i/o timeout

解决:原因是照着别的教程写的文件内容就一直出现这种错误,所以编写正确以下的DockerFile文件

FROM openjdk:8-jdk

MAINTAINER yarnk

ADD ./Knowledge_Springboot-0.0.1-SNAPSHOT.jar app.jar

CMD java -jar app.jar

注意:FROM 可以只填写REPOSITORY也可以填写REPOSITORY:TAG

三、部署Nginx

安装目的:解决前后端跨域问题

1.拉取镜像

docker pull nginx

2.安装nginx

docker run -d --name nginx -p 80:80 nginx

四、部署Vue

1.打包vue项目

这里不再赘述。

2.上传到服务器

我的路径是 /home/centos/soft/vue。

3.构建镜像

docker build -f ./DockerFile -t app_vue .

4.创建Vue容器

第1个app_vue:镜像名称
第2个app_vue:容器别名

docker run -id -p 3001:80 --name app_vue app_vue

这里的3001为前端访问的端口,80为映射到nginx服务的端口。

踩坑3:vue打包并不会包括vite.config.js(新手哪里知道这个?被坑惨!!)

现象:前后端+数据库都在docker部署运行后,前端进行访问时未进行跨域处理

解决:参考文档 Docker容器部署前端Vue服务——手把手教学-优快云博客

配置Vue目录下的default.conf和DockerFile,这两个文件和dist在同一目录下,然后重新构建镜像、容器。

vue > default.conf

server {
  listen    80; # 映射的容器端口
  server_name  本机ip; # 修改为docker服务宿主机的ip
  
  # 默认访问页面
  location / {
     root  /usr/share/nginx/html;
     index  index.html index.htm;
  }
  # 跨域访问后端
  location /api/ {
    proxy_pass http://后端服务ip:端口/;
  }
}

vue > DockerFile

FROM nginx

MAINTAINER yarnk

RUN rm /etc/nginx/conf.d/default.conf

ADD default.conf /etc/nginx/conf.d/

COPY ./dist/ /usr/share/nginx/html/

这里思考下,为什么这2个文件要这样写呢?通过观察,个人理解为程序会先执行DockerFile里的内容,然后再执行default.conf的内容,解析:

DockerFile:

  • RUN:删除原有的default.conf文件
  • ADD:添加新的default.conf文件到该路径下
  • COPY:复制跟本文件同一目录下的dist到指定路径下(为了default.conf里的默认访问页面)

### 部署Spring BootVue应用程序到Docker 为了在Linux环境中利用Docker部署Spring BootVue组成的全栈应用,需遵循一系列操作流程来确保前后端服务能够顺利运行并相互协作。 #### 准备工作环境 首先,在本地机器安装好Docker引擎之后,通过克隆指定仓库获取项目源码[^3]: ```bash git clone https://github.com/boylegu/SpringBoot-vue.git cd SpringBoot-vue/ ``` #### 构建Docker镜像 接着针对项目的不同部分分别创建对应的Dockerfile文件用于定义构建过程中的各项指令。对于前端(Vue.js),通常会采用Node.js作为基础镜像;而后端(Spring Boot)则多选用OpenJDK等Java运行时环境为基础镜像。完成配置后可以执行如下命令来进行镜像的制作: ```bash docker build -t springboot-vue-frontend ./vue-app docker build -t springboot-vue-backend ./spring-boot-app ``` #### 启动容器网络和服务 考虑到前后端通信的需求以及数据库连接等问题,建议新建一个自定义桥接网络以便于各组件间更稳定地交互。同时为简化管理可借助`docker-compose.yml`文件描述整个系统的架构布局,包括但不限于MySQL、Redis等依赖的服务及其启动参数设定(如密码)[^4]: ```yaml version: '3' services: db: image: mysql:latest environment: MYSQL_ROOT_PASSWORD: jeecg123456 cache: image: redis:alpine command: ["redis-server", "--requirepass", "jeecg123456"] backend: depends_on: - db - cache ... frontend: ports: - "80:80" ... networks: default: driver: bridge ``` 最后只需一条简单的命令就能按照上述YAML文档所指示的内容一键拉起全部所需资源: ```bash docker-compose up -d ``` 这样就完成了基于Linux平台下使用Docker技术快速搭建一套完整的Spring BootVue开发框架的任务[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值