Spring Boot+Vue项目Docker容器化实战指南
1. 项目概述最近在帮朋友公司重构一个前后端分离的管理系统技术栈选用了Spring Boot Vue的组合。考虑到后续的部署维护成本决定采用Docker容器化方案。这种部署方式在实际生产环境中已经非常普遍但新手在初次尝试时往往会遇到各种坑。今天我就把这次实战中的完整流程和关键注意事项整理出来希望能帮到有类似需求的开发者。这个方案最大的优势在于环境隔离和快速部署。传统部署方式需要手动安装JDK、Nginx等依赖而Docker方案只需要几条命令就能完成全栈环境的搭建。我们最终实现的效果是前端Vue项目打包后由Nginx提供服务后端Spring Boot应用运行在独立的容器中两者通过Docker网络通信整个系统可以通过docker-compose一键启停。2. 环境准备与工具选型2.1 基础环境配置在开始之前需要确保宿主机已经安装以下工具Docker 20.10社区版即可Docker Compose 1.29JDK 11用于本地开发调试Node.js 14用于前端开发注意生产环境建议使用Linux服务器本文以CentOS 7为例。Windows系统需要特别注意文件路径和换行符问题。我推荐使用以下版本组合经过实际生产验证$ docker --version Docker version 20.10.17, build 100c701 $ docker-compose --version docker-compose version 1.29.2, build 5becea4c2.2 项目结构设计合理的项目结构能大幅降低后期维护成本。我们的项目结构如下project-root/ ├── backend/ # Spring Boot项目 │ ├── src/ │ ├── Dockerfile │ └── pom.xml ├── frontend/ # Vue项目 │ ├── public/ │ ├── src/ │ ├── Dockerfile │ └── package.json ├── nginx/ # Nginx配置 │ └── default.conf └── docker-compose.yml # 编排文件这种结构将前后端完全分离每个组件有自己的Dockerfile最终通过docker-compose统一管理。相比将前后端打包到一个容器中的方案这种设计更符合微服务理念也便于独立扩展。3. Spring Boot后端容器化3.1 Dockerfile编写后端Dockerfile有几个关键点需要注意# 使用多阶段构建减小镜像体积 FROM maven:3.8.6-jdk-11 AS build WORKDIR /app COPY pom.xml . # 先单独复制pom.xml并下载依赖利用Docker缓存 RUN mvn dependency:go-offline COPY src ./src RUN mvn package -DskipTests # 运行时阶段 FROM openjdk:11-jre-slim WORKDIR /app COPY --frombuild /app/target/*.jar app.jar # 时区设置 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 健康检查 HEALTHCHECK --interval30s --timeout3s \ CMD curl -f http://localhost:8080/actuator/health || exit 1 EXPOSE 8080 ENTRYPOINT [java, -jar, app.jar]这个Dockerfile有几个优化点使用多阶段构建最终镜像只包含JRE而非完整的JDK体积从300MB减少到100MB左右先单独复制pom.xml下载依赖利用Docker缓存机制加速后续构建添加健康检查方便容器编排系统监控服务状态设置时区避免容器内时间与宿主机不一致的问题3.2 常见问题解决在实际构建过程中可能会遇到以下问题问题1Maven构建缓慢解决方案可以在Dockerfile中添加阿里云镜像RUN sed -i s|https://repo.maven.apache.org|https://maven.aliyun.com/repository/public|g /usr/share/maven/conf/settings.xml问题2时区不正确虽然Dockerfile中设置了时区但某些基础镜像可能缺少时区数据。可以改用RUN apt-get update apt-get install -y tzdata问题3内存不足Spring Boot应用默认会占用较多内存可以在docker-compose中限制deploy: resources: limits: memory: 1024M4. Vue前端容器化4.1 前端Dockerfile优化前端项目的容器化有几个特殊考虑# 构建阶段 FROM node:16-alpine AS build WORKDIR /app COPY package*.json ./ RUN npm install --registryhttps://registry.npm.taobao.org COPY . . RUN npm run build # 生产阶段 FROM nginx:1.21-alpine COPY --frombuild /app/dist /usr/share/nginx/html COPY nginx/default.conf /etc/nginx/conf.d/default.conf EXPOSE 80关键优化点使用Alpine基础镜像大幅减小镜像体积设置国内npm镜像加速构建分离构建阶段和运行阶段最终镜像只包含静态文件和Nginx自定义Nginx配置解决前端路由问题4.2 Nginx关键配置前端项目通常需要特殊处理路由问题以下是nginx/default.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; } }这个配置实现了两个重要功能处理Vue Router的history模式通过try_files确保刷新页面不返回404将/api开头的请求代理到后端服务解决跨域问题5. Docker Compose编排5.1 完整编排文件docker-compose.yml将前后端服务整合version: 3.8 services: backend: build: ./backend container_name: app-backend restart: unless-stopped ports: - 8080:8080 environment: - SPRING_PROFILES_ACTIVEprod - TZAsia/Shanghai networks: - app-network frontend: build: ./frontend container_name: app-frontend restart: unless-stopped ports: - 80:80 depends_on: - backend networks: - app-network networks: app-network: driver: bridge5.2 编排技巧解析网络配置创建自定义网络app-network使容器间可以通过服务名通信如backend:8080依赖管理通过depends_on控制启动顺序但要注意这不能确保服务已完全就绪环境变量传递Spring Boot的profile配置和时区设置重启策略unless-stopped确保容器异常退出时自动重启重要提示生产环境应该添加资源限制和健康检查完整示例deploy: resources: limits: cpus: 0.5 memory: 512M restart_policy: condition: on-failure6. 部署与运维实践6.1 一键部署命令完整的部署流程只需要三个步骤# 1. 构建镜像 docker-compose build # 2. 启动服务 docker-compose up -d # 3. 查看日志 docker-compose logs -f6.2 生产环境优化建议镜像管理使用docker-compose pull获取最新镜像定期清理无用镜像docker image prune -a -f日志收集logging: driver: json-file options: max-size: 10m max-file: 3数据持久化 如果应用有文件上传功能需要挂载卷volumes: - ./uploads:/app/uploads健康检查 在docker-compose中扩展健康检查healthcheck: test: [CMD, curl, -f, http://localhost:8080/actuator/health] interval: 30s timeout: 10s retries: 36.3 性能监控方案建议部署以下监控组件cAdvisor容器资源监控docker run -d --namecadvisor \ -v /:/rootfs:ro \ -v /var/run:/var/run:ro \ -v /sys:/sys:ro \ -v /var/lib/docker/:/var/lib/docker:ro \ -p 8081:8080 \ google/cadvisorPortainer可视化容器管理docker run -d -p 9000:9000 \ -v /var/run/docker.sock:/var/run/docker.sock \ portainer/portainer7. 常见问题排查指南7.1 启动问题排查问题容器启动后立即退出排查步骤查看日志docker logs container_id检查端口冲突netstat -tulnp | grep 8080检查依赖服务是否就绪docker-compose logs backend问题前端无法访问后端API解决方案确保docker-compose中使用了自定义网络检查Nginx配置中的proxy_pass地址是否正确在容器内测试连通性docker exec -it frontend curl http://backend:8080/api/health7.2 性能问题排查问题应用响应缓慢排查命令# 查看容器资源使用 docker stats # 进入容器分析 docker exec -it backend bash top -H -p $(pgrep java)优化建议调整JVM参数-Xmx512m -Xms512m增加容器资源限制检查数据库连接池配置7.3 安全加固措施避免使用root用户运行容器USER 1000:1000定期更新基础镜像docker-compose build --no-cache --pull敏感信息管理env_file: - .env.production8. 进阶优化方案8.1 使用CI/CD自动化流程推荐GitLab CI示例配置stages: - build - deploy build_backend: stage: build script: - docker build -t backend-image ./backend deploy_prod: stage: deploy only: - master script: - scp docker-compose.yml userserver:/app - ssh userserver cd /app docker-compose pull docker-compose up -d8.2 镜像瘦身进阶技巧使用JLink定制JRERUN jlink --add-modules java.base,java.logging \ --strip-debug \ --no-man-pages \ --no-header-files \ --compress2 \ --output /opt/jre-minimal前端使用多阶段构建压缩RUN npm install -g compression-webpack-plugin \ npm run build -- --mode production8.3 灰度发布方案通过docker-compose实现蓝绿部署services: backend-v1: image: backend:1.0 networks: - app-network backend-v2: image: backend:2.0 networks: - app-network frontend: depends_on: - backend-v2切换流量只需更新frontend的depends_on并重启。9. 项目迁移与扩展9.1 传统项目迁移指南迁移已有项目到Docker的步骤分析现有依赖ldd /path/to/binary创建Dockerfile逐步添加依赖测试容器内功能完整性调整配置文件路径9.2 微服务扩展方案当需要扩展为微服务架构时每个服务独立Dockerfile使用docker-compose.override.yml管理不同环境添加API网关服务集成服务发现Consul/Eureka示例扩展结构project-root/ ├── auth-service/ ├── user-service/ ├── product-service/ ├── gateway/ └── docker-compose.yml9.3 数据库容器化建议生产环境数据库部署建议db: image: postgres:13-alpine volumes: - pg_data:/var/lib/postgresql/data environment: POSTGRES_PASSWORD_FILE: /run/secrets/db_password secrets: - db_password secrets: db_password: file: ./secrets/db_password.txt关键注意事项必须配置数据卷持久化使用secrets管理敏感信息建议单独部署数据库容器定期备份卷数据

相关新闻

Kubernetes微服务CORS问题解决方案

Kubernetes微服务CORS问题解决方案

1. 问题背景与现象描述最近在部署基于Kubernetes的微服务架构时,遇到了一个典型的跨域访问问题。具体场景是:前端应用通过浏览器访问部署在Kubernetes集群中的mcp-server-chart服务时,控制台持续报出"CORS policy"相关错误&#xf…

2026/8/22 8:45:55 阅读更多 →
MCAN模块与CAN FD技术:从经典到高速的演进与实战配置

MCAN模块与CAN FD技术:从经典到高速的演进与实战配置

1. MCAN模块与CAN FD技术:从经典到高速的演进之路在汽车电子和工业控制领域,实时、可靠的通信是系统的生命线。控制器局域网(Controller Area Network, CAN)自诞生以来,凭借其卓越的抗干扰能力、多主架构和基于优先级的…

2026/8/22 8:51:22 阅读更多 →
AUTOSAR智能测试:AI提升汽车电子验证效率

AUTOSAR智能测试:AI提升汽车电子验证效率

1. 项目背景与核心价值在汽车电子领域,AUTOSAR(Automotive Open System Architecture)标准已成为行业基石。作为一套开放的汽车软件架构,它定义了从基础软件到应用层的完整规范。但在实际开发中,AUTOSAR模块的测试验证…

2026/8/19 15:14:45 阅读更多 →

最新新闻

【Docker项目实战】Docker环境下部署immich照片管理系统

【Docker项目实战】Docker环境下部署immich照片管理系统

【Docker项目实战】Docker环境下部署immich照片管理系统一、immich介绍1.1 immich简介1.2 immich注意事项1.3 immich使用场景二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、下载i…

2026/8/22 16:11:31 阅读更多 →
Go微服务链路追踪从Jaeger到OpenTelemetry的完整实践

Go微服务链路追踪从Jaeger到OpenTelemetry的完整实践

Go微服务链路追踪Jaeger-OpenTelemetry集成实战 文章导语 在微服务架构中,一个用户请求可能经过10个服务。当出现延迟或错误时,如何快速定位问题?分布式链路追踪就是为此而生。本文基于Jaeger和OpenTelemetry,在Go微服务中实现完整…

2026/8/22 16:11:31 阅读更多 →
前端js2

前端js2

值传递和引用传递值传递是传递变量的值,并不会改变方法外变量的值;引用传递是传递对象的地址,会改变对象本身的值;值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应…

2026/8/22 16:11:31 阅读更多 →
Go微服务网关设计与实现从路由转发到限流熔断

Go微服务网关设计与实现从路由转发到限流熔断

Go微服务网关设计与实现从路由转发到限流熔断 文章导语 API网关是微服务架构的入口,承担着路由转发、认证鉴权、限流熔断、日志监控等职责。本文基于Go构建一个轻量级API网关,覆盖核心功能的实现。 一、反向代理核心 func NewGateway(config GatewayConf…

2026/8/22 16:11:31 阅读更多 →
Go微服务配置中心实现从静态配置到动态热更新

Go微服务配置中心实现从静态配置到动态热更新

Go微服务配置中心实现从静态配置到动态热更新 文章导语 配置管理是微服务治理的核心环节。硬编码配置→配置文件→环境变量→配置中心,是技术演进的必经之路。本文基于ViperNacos,实现Go微服务的动态配置管理。 一、Viper配置管理 func InitConfig() *vi…

2026/8/22 16:11:30 阅读更多 →
ol-ext 上手实操手册:OpenLayers 地图扩展库核心能力拆解

ol-ext 上手实操手册:OpenLayers 地图扩展库核心能力拆解

ol-ext 上手实操手册:OpenLayers 地图扩展库核心能力拆解 【免费下载链接】ol-ext Cool extensions for Openlayers (ol) - animated clusters, CSS popup, Font Awesome symbol renderer, charts for statistical map (pie/bar), layer switcher, wikipedia layer,…

2026/8/22 16:10:30 阅读更多 →

日新闻

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

沉金PCB工艺实战指南:从设计到SMT焊接的可靠性保障

在电子硬件开发领域,PCB(印制电路板)的沉金工艺是提升产品可靠性和焊接质量的关键环节。对于需要高密度互连、长期稳定运行或高频信号传输的板卡,如“黍姐仿通行证”这类可能涉及身份识别、数据交互的硬件项目,选择正确…

2026/8/22 0:00:11 阅读更多 →
电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

电气考研电路八月强化四步法:从知识体系到真题实战的闭环攻略

这次我们来看一个针对电气考研电路科目的学习规划项目。它不是软件工具,而是一套聚焦于8月份关键节点的备考策略。对于电气工程考研的同学来说,电路分析是专业课的重中之重,也是拉开分差的关键。进入8月,复习进入强化阶段&#xf…

2026/8/22 0:00:11 阅读更多 →
消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

消除AI代码的“AI味”:Claude Code设计优化技能配置与实战指南

大家好,我是专注于前端开发与AI工具实践的技术博主。在日常使用 Claude Code 等AI编程助手时,你是否也遇到过这样的困扰:生成的代码功能上没问题,但代码风格、组件设计、交互逻辑总透着一股“AI味”——布局单调、样式简陋、交互生…

2026/8/22 0:00:11 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/21 3:21:33 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/22 8:09:09 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/21 6:07:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/21 16:42:28 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/22 7:31:03 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →