使用 Docker 容器化部署 Spring Boot + Vue 项目:以若依后台管理系统为例

文章同步更新于我的个人博客:松果猿的博客,欢迎访问获取更多技术分享。🍀🍀🍀

同时,您也可以关注我的微信公众号:松果猿的代码工坊,获取最新文章推送和编程技巧。🚀🚀🚀

前言

一般常见的前后端部署方式有以下三种方式:

  1. 单体部署:将前端和后端代码打包在一起,部署到同一个服务器或应用容器中。

  2. 分离部署:分离部署是指将前端和后端代码分开部署,前端部署在静态资源服务器上,后端部署在应用服务器上

  3. Docker容器化部署:将应用及其依赖环境打包成一个或多个Docker容器,然后部署到支持Docker的服务器上

我们就用Docker容器化部署一个springboot+vue的项目,我选用的是若依后台管理系统,仓库地址:gitee.com/y_project/R...,将其克隆下来作为我们部署的项目。

一般来说应该是先在本地打包成docker镜像然后上传到私有仓库,然后在服务器将镜像拉取下来,但是我们个人没有什么镜像仓库,但是可以先将jar包上传到服务器,然后在服务器上打包成镜像

  1. 以下为本人个人方案,若有错误请指出

  2. 域名以及SSL配置不进行赘述,不是本文的重点

  3. 需要对docker的相关知识有所了解,可以看我的这篇文章:docker学习笔记(1)

一、Spring Boot 项目打包

1. 修改配置文件

在 IDEA 中打开 Spring Boot 项目,找到 application.yaml 文件。根据部署需求,将数据库和 Redis 的地址修改为 Docker 容器名:

这里可能有人有疑问,为什么不是后端服务器地址,因为我想的是docker会创建一个网络,这样就不需要连接其公网地址,直接连接容器名更好一点。

2. 打包为 JAR 文件

在 IDEA 的右侧边栏中找到 Maven 面板。然后点击生命周期下的 package 目标。双击 package 目标,IDEA 会自动运行 Maven 的 package 命令来构建项目。构建完成后,JAR 文件会生成在项目的 target 目录下。

二、Docker 环境搭建与服务部署

1. 创建 Docker 网络

为了使各个容器能够方便地通信,首先需要创建一个 Docker 网络。打开Xshell连接云服务器,执行以下命令:

bash 复制代码
docker network create ruoyi

2. 部署 MySQL 到 Docker

创建并运行 MySQL 容器,设置环境变量以配置数据库的密码等信息。执行以下命令:

bash 复制代码
docker run -d \
  --name mysql \
  --network ruoyi \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=your_root_password \
  -e MYSQL_DATABASE=your_database_name \
  mysql:latest
  • -d 表示在后台运行容器。
  • --name mysql 为容器指定一个名称。
  • --network ruoyi 将容器连接到 ruoyi 网络。
  • -e 后面跟随的是环境变量,用于设置 MySQL 的相关配置,如 root 密码、默认数据库名称。
  • mysql:latest 使用最新版本的 MySQL 镜像。

3. 部署 Redis 到 Docker

创建并运行 Redis 容器,执行以下命令:

bash 复制代码
docker run -d \
  --name redis \
  --network ruoyi \
  -p 6379:6379 \
  redis:latest
  • -d 表示在后台运行容器。
  • --name redis 为容器指定一个名称。
  • --network ruoyi 将容器连接到 ruoyi 网络。
  • redis:latest 使用最新版本的 Redis 镜像。

先来到阿里云控制台开放3306端口:

在 Navicat 的主界面,点击左上角的"连接"按钮,选择你想要连接的数据库类型

在新建弹窗中输入连接名称、 IP 地址、端口等:

连接成功后,就可以在数据库中运行SQL文件创建表了:

三、Spring Boot 应用 Docker 部署

1. 准备 Dockerfile

先在本地创建一个 Dockerfile,内容如下:

dockerfile 复制代码
# 使用官方的 Java 基础镜像
FROM openjdk:11-jre-slim

# 设置工作目录
WORKDIR /opt/ruoyi/backend

# 将 JAR 文件复制到工作目录中
COPY ruoyi-admin.jar ./ruoyi-admin.jar

# 暴露应用程序端口
EXPOSE 8080

# 指定容器启动时执行的命令,运行 Spring Boot 应用
ENTRYPOINT ["java", "-jar", "ruoyi-admin.jar"]

2. 构建 Docker 镜像

来到根目录,创建一个目录,使用 Xftp 将 JAR 包和 Dockerfile 上传到服务器的 /opt/ruoyi/backend 目录下。

bash 复制代码
mkdir -p /opt/ruoyi/backend

上传文件后,在服务器上的 /opt/ruoyi/backend 目录下,执行以下命令构建 Docker 镜像:

bash 复制代码
docker build -t ruoyi:latest .
  • docker build 是构建 Docker 镜像的命令。
  • -t ruoyi:latest 为构建的镜像指定一个标签,这里标签名为 ruoyi:latest
  • . 表示 Dockerfile 位于当前目录。

3. 运行 Docker 容器

构建好镜像后,可以使用以下命令来运行 Docker 容器:

bash 复制代码
docker run -d -p 8080:8080 --name ruoyi --network ruoyi ruoyi:latest
  • -d 表示在后台运行容器。
  • -p 8080:8080 将容器的 8080 端口映射到宿主机的 8080 端口。
  • --name ruoyi 为运行的容器指定一个名称。
  • --network ruoyi 将容器连接到 ruoyi 网络。
  • ruoyi:latest 是之前构建的 Docker 镜像名称。

查看日志,若依成功启动:

这样三个容器都启动起来了:

四、使用 Docker 部署 Nginx

1. 准备 Nginx 配置和静态资源目录

将若依项目的前端部分进行打包:

arduino 复制代码
npm run build

执行 npm run build:prod 命令后,这里打包的是其生产环境,会生成一个 dist 文件夹,里面包含了打包后的静态资源文件

这里nginx可以用卷映射也可以用dockerfile进行配置,为了简单方便一点就用卷映射吧。在宿主机上创建 Nginx 的配置文件目录和静态资源目录:

dockerfile 复制代码
mkdir -p /opt/ruoyi/nginx/html
mkdir -p /opt/ruoyi/nginx

将打包后的dist文件使用Xftp传输到/opt/ruoyi/nginx/html

2. 配置 Nginx 反向代理

为了使 Nginx 能够将请求转发到若依框架的后端服务,需要修改 nginx.conf 文件:

bash 复制代码
cd /opt/ruoyi/nginx
vi nginx.conf

在 以下配置复制到nginx.conf 文件中:

ini 复制代码
worker_processes  1;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  8.155.27.197;

        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }

        location /prod-api/ {
            proxy_pass http://ruoyi:8080/;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

3. 使用 Docker 部署 Nginx

使用以下命令启动一个 Nginx 容器,并通过卷映射将宿主机的配置文件和静态资源目录映射到容器中:

bash 复制代码
docker run -d \
  -p 80:80 \
  -v /opt/ruoyi/nginx/nginx.conf:/etc/nginx/nginx.conf \
  -v /opt/ruoyi/nginx/html:/usr/share/nginx/html \
  --name ruoyi-nginx \
  --network ruoyi \
  nginx:latest

访问是可以正确访问了,但是为什么报错了????好像是什么java依赖包有问题,不过我们部署一整套流程没出错就行,哈哈哈哈哈😊😊😊😊😊😊😊😊😊😊😊

贴一个从网上看到的使用DockerCompose的方法:blog.csdn.net/weixin_4659...

本文只是简单演示,如果想要更加规范化,还需要使用到Docker Compose

该服务器实例我已经删除,访问不了了

相关推荐
namelijink5 小时前
docker-compose部署下Fastapi中使用sqlalchemy和Alembic
adb·docker·fastapi
水彩橘子5 小时前
docker+ffmpeg+nginx+rtmp 拉取摄像机视频
nginx·docker·ffmpeg
默凉6 小时前
docker GPU安装
docker
田振靓6 小时前
Ubuntu 上安装 Docker
ubuntu·docker
Gavino.7 小时前
记录将springboot的jar包和lib分离,使用docker-compose部署
spring boot·docker·jar
dessler7 小时前
Docker-网络&跨主机通信
linux·运维·docker
PyAIGCMaster9 小时前
docker学习记录:创建python环境,使用vscode连接远程docker环境,使其访问同为docker镜像的mongodb的设置。
学习·docker·容器
IT搬砖攻城狮9 小时前
超完整Docker学习记录,Docker常用命令详解
运维·docker·容器·容器化部署
迷路爸爸18013 小时前
在 CentOS 上安装 Docker 和 Docker Compose(可指定版本或安装最新版本)
linux·docker·centos