在Windows上进行Docker 部署速成指南(SpringBoot + Vue + MySQL + Redis)
·
适用场景:前后端分离项目,一键容器化部署,本地开发 / 测试环境通用。
零、前置下载
网上已经有很多教程了,这里楼主推荐一篇感觉讲的很详细的:Docker,ubuntu下载
一、整体架构
浏览器 → Nginx容器(80端口) → 静态页面
↘ /api → SpringBoot容器(内部端口) → MySQL容器
↘ Redis容器
核心流程:
- 所有容器加入同一个自定义网络,通过容器名互相访问,不用记 IP
- 数据卷持久化,删容器不丢数据
- Nginx 统一对外入口,托管前端 + 反向代理后端
二、前置准备
1. 创建自定义网络
docker network create app-network
app-network:自定义网络名,这里建议自己设置
2. 创建项目目录结构
mkdir -p ~/deploy/{mysql,redis,backend,frontend/dist}
注:这里建议在deploy/后加一层项目名文件夹,如果改的话下面的命令里地址也要注意多加一层
三、部署 MySQL
docker run -d \
--name mysql \
--network app-network \
-p 3307:3306 \
-v ~/deploy/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=你的数据库密码 \
-e MYSQL_DATABASE=你的数据库名 \
-e TZ=Asia/Shanghai \
mysql:8.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
注:3307是你的windows端口号,选一个不冲突的即可
导入 SQL 脚本:
docker exec -i mysql mysql -uroot -p你的密码 你的库名 < ~/mnt/你的数据库文件绝对地址(全小写)
四、部署 Redis
docker run -d \
--name redis \
--network app-network \
-p 6379:6379 \
-v ~/deploy/redis:/data \
-e TZ=Asia/Shanghai \
redis:7 \
--appendonly yes
后端配置对应:
spring:
redis:
host: redis
port: 6379
五、部署 SpringBoot 后端
1. 修改项目配置(重点)
数据库和 Redis 地址写容器名,不要写 localhost
spring:
datasource:
url: jdbc:mysql://mysql:3306/你的数据库名?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: 你的数据库密码
redis:
host: redis
port: 6379
2. 打包 Jar 包
mvn clean package -DskipTests
将 target/xxx.jar 上传到 ~/deploy/backend/ 目录。
cp /mnt/你的jar包绝对位置(全小写) ~/deploy/backend/
3. 启动后端容器
docker run -d \
--name backend \
--network app-network \
-p 8099:8080 \
-v ~/deploy/backend:/app \
-e TZ=Asia/Shanghai \
eclipse-temurin:17-jdk-alpine \
java -jar /app/你的jar包名.jar
JDK8 项目换成
openjdk:8-jdk-slim
4. 关键注意
- 端口映射格式:
-p 宿主机端口:容器内部端口 - 容器内部端口看启动日志:
Tomcat started on port(s): xxxx - 容器间通信用容器名 + 内部端口,不用宿主机端口
5. 验证
docker logs -f backend
# 看到 Started xxxApplication 即为成功
六、部署 Vue 前端(Nginx)
如果你还没有下nginx,先运行:
docker pull nginx

像图片这样就好辣
然后配置nginx:
nano ~/deploy/你的项目名,之前没设置不管/frontend/nginx.conf
在打开的文件里粘贴:
server {
listen 80;
server_name localhost;
# Vue静态资源
location / {
root /usr/share/nginx/html;
index index.html;
try_files $uri $uri/ /index.html;
}
# 拦截/api请求,转发给后端容器
location /api/ {
proxy_pass http://backend:8082/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
1. 修改前端接口地址
打开 .env.production,不要写死 IP+端口:
VITE_BASE_URL=/api
Vue2 项目变量名一般是
VUE_APP_BASE_API
2. 打包前端
npm run build
将 dist 目录所有文件上传到 ~/deploy/frontend/dist/。
3. 创建 Nginx 配置
nano ~/deploy/frontend/nginx.conf
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html;
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://backend:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Ctrl+o,回车保存
Ctrl+x退出
proxy_pass里的端口是后端容器内部端口,不是宿主机端口。
4. 启动 Nginx 容器
docker run -d \
--name frontend \
--network app-network \
-p 80:80 \
-v ~/deploy/frontend/dist:/usr/share/nginx/html \
-v ~/deploy/frontend/nginx.conf:/etc/nginx/conf.d/default.conf \
-e TZ=Asia/Shanghai \
nginx
七、常用运维命令
# 查看状态
docker ps
docker ps -a
# 查看日志
docker logs 容器名
docker logs -f 容器名
docker logs --tail 200 容器名
# 启停重启
docker start 容器名
docker stop 容器名
docker restart 容器名
docker rm -f 容器名
# 进入容器
docker exec -it 容器名 sh
# 整套服务一键启停
docker stop mysql redis backend frontend
docker start mysql redis backend frontend
八、常见问题排查
1. 后端连接重置(Connection reset)
- 看容器是否运行:
docker ps - 看启动日志:
docker logs backend - 确认内部端口:日志里
Tomcat started on port(s): xxxx - 端口映射是否匹配
2. 数据库连接失败
- MySQL 容器是否启动
- 地址是否写的容器名
mysql:3306(不是 localhost) - 两个容器是否在同一个 network
3. 前端页面能打开但接口报错
- 前端打包环境变量是否是
/api - Nginx
proxy_pass地址端口是否正确 - 后端容器是否正常运行
4. WSL2 端口映射异常
Windows PowerShell 执行:
wsl --shutdown
5. JDK 版本不兼容
- JDK8 →
openjdk:8-jdk-slim - JDK17 →
eclipse-temurin:17-jdk-alpine
九、部署 Checklist
- 创建自定义 Docker 网络
- MySQL 容器启动正常
- Redis 容器启动正常
- 后端配置数据库/Redis 地址改为容器名
- 后端 Jar 包打包上传
- 后端容器启动成功,日志无报错
- 前端生产环境接口地址改为
/api - 前端打包 dist 上传
- Nginx 配置反向代理地址正确
- 浏览器访问页面 + 接口均正常
更多推荐
所有评论(0)