Docker部署nginx+mysql+前后端分离项目

本文介绍了一个关于Spark集群并发量的测试案例,通过不同程序设置来评估集群在同一时间内能运行的任务数量及其性能表现。

https://blog.youkuaiyun.com/qq_43842093/article/details/131928114

一.安装docker

yum install docker

检查是否安装成功

docker --version

启动Docker

systemctl start docker

二、安装Nginx

1、拉取nginx镜像文件

docker pull nginx

2、创建并运行nginx容器

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

命令详解

参数解释
docker run启动一个镜像
-d后台运行
–name nginx表示为当前容器起一个别名
-p 3344:80表示将本机的3344端口映射到nginx镜像的80端口

查看正在运行的容器

docker ps

img

5、检查nginx是否部署成功

curl localhost:3344

img

6、创建挂载目录

mkdir -p /home/nginx/conf
mkdir -p /home/nginx/log
mkdir -p /home/nginx/html

7、将名为nginx容器中的相应文件copy到刚创建的管理目录中

# 将容器nginx.conf文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf /home/nginx/conf/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机
docker cp nginx:/etc/nginx/conf.d /home/nginx/conf/conf.d
# 将容器中的html文件夹复制到宿主机
docker cp nginx:/usr/share/nginx/html /home/nginx/
# 将容器中的log文件夹复制到宿主机
docker cp nginx:/var/log/nginx /home/nginx/log

8、停止名为nginx的容器

docker stop nginx

9、删除名为nginx的容器

docker rm nginx

10、重启名为nginx容器并作目录挂载

docker run -p 3344:80 --name nginx -v 
/home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v 
/home/nginx/conf/conf.d:/etc/nginx/conf.d -v /home/nginx/log:/var/log/nginx -v
 /home/nginx/html:/usr/share/nginx/html -d nginx:latest

11、检查容器运行正常

docker ps

img

12、检查是否部署成功

curl localhost:3344

三、安装Mysql

1、下拉mysql镜像文件

docker pull mysql  #默认最新版本
 
docker pull mysql:xxx  #指定版本号

2、启动mysql容器

docker run --restart=always --privileged=true -d -v 
/home/mysql/data:/var/lib/mysql -v /home/mysql/conf:/etc/mysql/conf.d -v 
/home/mysql/my.cnf:/etc/mysql/my.cnf -p 3310:3306 --name mysql -e 
MYSQL_ROOT_PASSWORD=root mysql

3、查看正在运行的容器

docker ps

img

4、测试数据库连接

四、部署SpringBoot项目

1、整合后端成Jar包(mvn package)并编写Dockerfile文件(无后缀名)

img

2、Dockerfile内容详解

2、Dockerfile内容详解

FROM openjdk:8  #工程java版本
 
COPY *.jar /app.jar  #将所有的jar包整合为app.jar
 
EXPOSE 9099  #暴露后端端口号
 
ENTRYPOINT ["java","-jar","app.jar"]  #执行jar包

3、上传这两个文件到Linux服务器的同一个文件夹当中,务必放在一起!

img

4、构建镜像

docker build -t api .  #点千万别漏了,这里取名镜像为api,可以随便取名!

5、查看当前镜像

docker images

img

6、创建一个新的容器并运行

docker run -d -p 9090:9090 --name httapi api

命令详解

参数含义
-p 9090:9090将外部9090端口映射到容器内部的9090端口
httapi自定义容器名字
api镜像名字

7、查看正在运行的容器

docker ps

8、使用postman测试接口

img

五、部署Vue项目

1、打包Vue工程(npm run build命令)并同时编写default.conf文件和Dockerfile文件

img

2、default.conf文件和Dockerfile文件详细

default.conf配置

server {
    listen       80;
    server_name  ip地址; # 修改为docker服务宿主机的ip
 
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        try_files $uri $uri/ /index.html =404;
    }
 
    location /api/ {
      proxy_pass http://ip:端口/;
    }
 
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

Dockerfile配置

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

3、上传这三个文件到Linux服务器的同一个文件夹当中,务必放在一起!

img

4、构建镜像

docker build -t vue . #点千万别漏了,这里取名镜像为vue,可以随便取名!

5、查看当前镜像

docker images

6、创建一个新的容器并运行

docker run -d -p 8088:80 --name httvue vue

7、查看正在运行的容器

docker ps

img

8、访问前端页面并测试接口

使用docker-compose 

简单来说,docker-compose 是一个用于定义和运行多容器 Docker 应用程序的工具

  • docker run 命令的问题:当您使用 docker run 启动一个容器时,您需要在命令行中输入所有参数(端口映射、卷挂载、环境变量等)。这很繁琐,且不易重复和版本控制。

  • docker-compose 的解决方案:它允许您使用一个 YAML 格式的配置文件(通常是 docker-compose.yml)来声明式地定义您的应用程序所需的所有服务、网络、卷等。然后,用一个简单的命令(docker-compose up)就能根据配置启动整个应用栈。

安装docker-compose

sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

安装完后赋予可执行权限

sudo chmod +x /usr/local/bin/docker-compose

检查是否安装成功

docker-compose --version

三、编写Dockfile文件

#依赖jdk8环境
FROM openjdk:8

#对外暴露8085
EXPOSE 8085
#复制server-1.0-SNAPSHOT到docker容器中并命名为app.jar
ADD server-1.0-SNAPSHOT.jar app.jar
#执行命令
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java", "-jar", "/app.jar", "--spring.profiles.active=pro"]

四、编写docker-compose.yml文件

version: "3"
services:
  nginx: # 服务名称,用户自定义
    image: nginx:latest  # 镜像版本
    ports:
      - 80:80  # 暴露端口
    volumes: # 挂载
      - /root/nginx/html:/usr/share/nginx/html
      - /root/nginx/nginx.conf:/etc/nginx/nginx.conf
    privileged: true # 这个必须要,解决nginx的文件调用的权限问题
  mysql:
    image: mysql:5.7.27
    ports:
      - 3306:3306
    environment: # 指定用户root的密码
      - MYSQL_ROOT_PASSWORD=admin
  redis:
    image: redis:latest
  server:
    image: server:latest
    build: . # 表示以当前目录下的Dockerfile开始构建镜像
    ports:
      - 8085:8085
    depends_on: # 依赖与mysql、redis,其实可以不填,默认已经表示可以
      - mysql
      - redis

配置文件中MySQL和Redis的IP地址要改成docker-compose.yml文件中的服务名称。
在这里插入图片描述

五、编写Nginx的配置文件nginx.conf

现在宿主机创建html目录和nginx.conf文件
在这里插入图片描述
编写配置文件nginx.conf

#user  root;
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  101.132.143.220;
      location / {
          root   /usr/share/nginx/html;
          try_files $uri $uri/ /index.html;
          index  index.html index.htm;
      }
	  location /api/ {
		  proxy_pass http://101.132.143.220:8085;
		  proxy_redirect default;
		  rewrite ^/api/(.*) /$1 break;
	  }
      error_page   500 502 503 504  /50x.html;
      location = /50x.html {
          root   html;
      }
  }
}

六、部署前端

前端Vue项目打包

npm run build

把dist目录下的所有文件放到我们刚才创建的html目录下
在这里插入图片描述

七、部署后端

先将后端打成jar包,然后上传到云服务器上,同时Dockfile文件和docker-compose.yml文件也要上传到云服务器上。

输入命令编排启动服务

docker-compose up -d

部署一个包含 **Java + MySQL 5.7 + Vue** 的项目,是一个典型的 **前后端分离 + 数据库** 的架构。我们可以使用 **Docker Compose** 来编排这三个服务,实现一键部署。 --- ## ✅ 架构概览 ``` [浏览器] | ↓ [Nginx] → Vue 前端静态资源 | ├───────→ [Java 后端服务](Spring Boot) └───────→ [MySQL 5.7](数据库) ``` --- ## ✅ 部署流程概览 1. 构建 Vue 项目并打包成 Docker 镜像 2. 构建 Java 项目并打包成 Docker 镜像 3. 使用 Docker Compose 编排 MySQL、Java、Vue 服务 4. 使用 Nginx 反向代理 Vue 前端和 Java 后端 API 5. 启动所有服务 --- ## ✅ 步骤 1:构建 Vue 项目 ```bash cd your-vue-project npm run build ``` 生成的静态资源在 `dist/` 目录下。 --- ## ✅ 步骤 2:构建 Java 项目 ```bash cd your-java-project mvn clean package ``` 生成的 jar 包在 `target/your-app.jar` --- ## ✅ 步骤 3:编写 Dockerfile ### 1. Java 后端 Dockerfile(`Dockerfile.java`) ```Dockerfile FROM eclipse-temurin:8-jdk WORKDIR /app COPY target/your-app.jar app.jar ENTRYPOINT ["java", "-jar", "app.jar"] ``` ### 2. Vue 前端 Dockerfile(`Dockerfile.vue`) ```Dockerfile FROM nginx:latest RUN rm /etc/nginx/conf.d/default.conf COPY vue.conf /etc/nginx/conf.d COPY dist/ /usr/share/nginx/html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] ``` ### 3. Vue 的 Nginx 配置文件 `vue.conf` ```nginx server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; try_files $uri $uri/ =404; } # 代理后端 API 请求 location /api/ { proxy_pass http://java-app: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; } } ``` --- ## ✅ 步骤 4:编写 `docker-compose.yml` ```yaml version: '3' services: mysql: image: mysql:5.7 container_name: mysql environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: mydb MYSQL_USER: user MYSQL_PASSWORD: password ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql restart: always java-app: build: context: . dockerfile: Dockerfile.java container_name: java-app ports: - "8080:8080" environment: SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/mydb?useSSL=false&serverTimezone=UTC SPRING_DATASOURCE_USERNAME: user SPRING_DATASOURCE_PASSWORD: password depends_on: - mysql restart: on-failure vue-app: build: context: . dockerfile: Dockerfile.vue container_name: vue-app ports: - "80:80" depends_on: - java-app restart: on-failure volumes: mysql_data: ``` --- ## ✅ 步骤 5:启动服务 ```bash docker-compose up -d --build ``` --- ## ✅ 验证服务是否运行成功 ```bash docker ps ``` 你应该看到以下容器在运行: - `mysql` - `java-app` - `vue-app` 访问: - Vue 前端:`http://localhost` - Java 后端 API:`http://localhost/api/xxx` - MySQL:`localhost:3306`(可使用客户端连接) --- ## ✅ 补充说明 ### 1. Java 项目连接 MySQL 确保你的 `application.properties` 或 `application.yml` 中配置了正确的数据库连接: ```properties spring.datasource.url=jdbc:mysql://mysql:3306/mydb?useSSL=false&serverTimezone=UTC spring.datasource.username=user spring.datasource.password=password ``` ### 2. Vue 项目请求后端 API 在 Vue 项目中,请求接口使用 `/api/xxx` 路径,Nginx 会自动代理到 `http://java-app:8080/xxx`。 --- ## ✅ 总结:部署流程 | 步骤 | 操作 | |------|------| | 构建 Vue 项目 | `npm run build` | | 构建 Java 项目 | `mvn clean package` | | 编写 Dockerfile | Java、Vue、Nginx 配置 | | 编写 docker-compose.yml | 编排 MySQL、Java、Vue | | 启动服务 | `docker-compose up -d --build` | --- ###
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

四月天03

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值