首页/新闻资讯/正文详情

Docker Compose部署.NET与Vue全栈应用实践

发布时间:2026/11/9 21:12:45 来源:云帆数科 栏目:资讯中心
Docker Compose部署.NET与Vue全栈应用实践
1. 项目背景与核心挑战在现代化Web应用开发中前后端分离架构已成为主流选择。最近我在一个企业级项目中遇到了这样的需求需要同时部署多个.NET后端API服务和多个Vue前端Web应用并且要支持多种数据库的灵活扩展。经过反复实践我总结出了一套基于Docker Compose的完整解决方案这里将详细记录整个过程。这个方案主要解决了以下几个核心问题多个.NET API服务之间的端口隔离与通信多个Vue应用的静态资源部署与路由处理Nginx作为反向代理的统一入口配置多种数据库(MySQL, MongoDB等)的容器化集成开发、测试、生产环境的一致性问题提示这套方案特别适合中小型团队快速搭建微服务架构避免了传统部署方式中环境配置复杂、依赖管理困难等问题。2. 环境准备与基础配置2.1 系统要求与工具安装首先确保你的开发环境满足以下基本要求Docker Engine 20.10Docker Compose 2.0.NET 8 SDKNode.js 16 (用于Vue开发)推荐使用Linux或WSL2环境(Windows下)安装Docker Compose的最新版本# 对于Linux系统 sudo curl -L https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose2.2 项目结构设计合理的项目结构是成功部署的基础。我采用的目录结构如下project-root/ ├── docker-compose.yml # 主配置文件 ├── nginx/ │ └── nginx.conf # Nginx配置 ├── api-service1/ # 第一个.NET API服务 │ ├── Dockerfile │ └── ... ├── api-service2/ # 第二个.NET API服务 │ ├── Dockerfile │ └── ... ├── web-app1/ # 第一个Vue应用 │ ├── Dockerfile │ └── ... ├── web-app2/ # 第二个Vue应用 │ ├── Dockerfile │ └── ... └── databases/ # 数据库相关配置 ├── mysql/ └── mongodb/3. .NET API服务的容器化3.1 编写Dockerfile对于.NET 8 API服务典型的Dockerfile如下FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build WORKDIR /src COPY . . RUN dotnet restore RUN dotnet publish -c Release -o /app FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime WORKDIR /app COPY --frombuild /app . ENV ASPNETCORE_URLShttp://:5000 EXPOSE 5000 ENTRYPOINT [dotnet, YourApiService.dll]3.2 多服务配置要点当有多个API服务时需要注意每个服务使用不同的内部端口(如5000,5001等)在docker-compose.yml中为每个服务配置独立的网络别名环境变量前缀要区分不同服务示例配置片段services: api-service1: build: ./api-service1 ports: - 5000:5000 networks: - app-network environment: - ConnectionStrings__DefaultServermysql;Databasedb1;Uiduser;Pwdpassword api-service2: build: ./api-service2 ports: - 5001:5000 networks: - app-network environment: - ConnectionStrings__DefaultServermysql;Databasedb2;Uiduser;Pwdpassword4. Vue应用的容器化部署4.1 Vue应用的DockerfileVue应用的Dockerfile通常分为构建阶段和运行阶段# 构建阶段 FROM node:16 AS build WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build # 运行阶段 FROM nginx:alpine COPY --frombuild /app/dist /usr/share/nginx/html COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 804.2 多应用路由处理当有多个Vue应用时Nginx配置是关键。以下是处理两个Vue应用的Nginx配置示例server { listen 80; location /app1 { alias /usr/share/nginx/html/app1; try_files $uri $uri/ /app1/index.html; } location /app2 { alias /usr/share/nginx/html/app2; try_files $uri $uri/ /app2/index.html; } location /api/service1 { proxy_pass http://api-service1:5000; } location /api/service2 { proxy_pass http://api-service2:5001; } }5. 数据库容器化与扩展5.1 MySQL数据库配置在docker-compose.yml中添加MySQL服务services: mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: app_db MYSQL_USER: app_user MYSQL_PASSWORD: userpassword volumes: - mysql-data:/var/lib/mysql networks: - app-network healthcheck: test: [CMD, mysqladmin, ping, -h, localhost] interval: 5s timeout: 5s retries: 5 volumes: mysql-data:5.2 MongoDB集成如果需要添加MongoDB支持services: mongodb: image: mongo:6.0 environment: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: example volumes: - mongodb-data:/data/db networks: - app-network ports: - 27017:27017 volumes: mongodb-data:6. 完整的docker-compose.yml示例以下是整合了所有组件的完整配置示例version: 3.8 services: # API服务 api-service1: build: ./api-service1 ports: - 5000:5000 networks: - app-network depends_on: mysql: condition: service_healthy environment: - ConnectionStrings__DefaultServermysql;Databasedb1;Uiduser;Pwdpassword api-service2: build: ./api-service2 ports: - 5001:5000 networks: - app-network depends_on: mongodb: condition: service_started environment: - MongoDB__ConnectionStringmongodb://root:examplemongodb:27017 # Web应用 web-app1: build: ./web-app1 networks: - app-network depends_on: - api-service1 web-app2: build: ./web-app2 networks: - app-network depends_on: - api-service2 # 反向代理 nginx: image: nginx:alpine ports: - 80:80 - 443:443 volumes: - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf - ./web-app1/dist:/usr/share/nginx/html/app1 - ./web-app2/dist:/usr/share/nginx/html/app2 networks: - app-network depends_on: - web-app1 - web-app2 # 数据库服务 mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: app_db MYSQL_USER: app_user MYSQL_PASSWORD: userpassword volumes: - mysql-data:/var/lib/mysql networks: - app-network healthcheck: test: [CMD, mysqladmin, ping, -h, localhost] interval: 5s timeout: 5s retries: 5 mongodb: image: mongo:6.0 environment: MONGO_INITDB_ROOT_USERNAME: root MONGO_INITDB_ROOT_PASSWORD: example volumes: - mongodb-data:/data/db networks: - app-network volumes: mysql-data: mongodb-data: networks: app-network: driver: bridge7. 部署与运维实践7.1 启动与停止服务启动所有服务docker-compose up -d --build停止服务并清理docker-compose down -v7.2 常见问题排查端口冲突问题使用docker ps查看已占用的端口修改docker-compose.yml中的端口映射容器启动顺序问题使用depends_on和健康检查确保依赖服务就绪在应用代码中添加连接重试逻辑Nginx配置错误检查Nginx日志docker logs nginx-container-id使用nginx -t测试配置语法数据库连接问题确保使用容器名称而非localhost连接检查数据库容器的健康状态7.3 性能优化建议资源限制services: api-service1: deploy: resources: limits: cpus: 0.5 memory: 512M多阶段构建优化使用.dockerignore文件排除不必要的文件利用构建缓存加速构建过程日志管理services: api-service1: logging: driver: json-file options: max-size: 10m max-file: 38. 实际应用场景扩展8.1 CI/CD集成可以将此方案集成到CI/CD流程中在GitHub Actions或GitLab CI中配置自动构建使用环境变量区分不同环境的配置自动化测试后部署到服务器8.2 多环境配置通过环境变量和多个compose文件支持不同环境# 开发环境 docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d # 生产环境 docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d8.3 监控与日志添加Prometheus和Grafana监控services: prometheus: image: prom/prometheus ports: - 9090:9090 volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml networks: - app-network grafana: image: grafana/grafana ports: - 3000:3000 networks: - app-network这套方案在实际项目中运行稳定特别是在需要频繁部署更新和扩展服务的场景下Docker Compose提供的声明式配置大大简化了运维工作。通过合理的网络规划和Nginx配置多个前后端服务可以无缝协作而数据库的容器化则确保了数据持久化和环境一致性。

相关推荐

Win7 Excel崩溃与winaip文档服务器停止工作排查修复
Win7 Excel崩溃与winaip文档服务器停止工作排查修复

上周又接到一通电话,说财务那台老机器开机打开 Excel 直接弹“Excel 已停止工作”,点关闭的时候又崩一次,同一时间服务器上 winaip 文档服务器也提示“已停止工作”。这类组合报错一年要处理十几回,表面看是三件事,实际… · 2026/11/8 19:47:33

状态向量:系统动态行为的数学描述与应用
状态向量:系统动态行为的数学描述与应用

1. 状态向量的基本概念状态向量是描述系统在某一时刻全部状态信息的数学表示。在控制理论、物理学和工程学中,状态向量通常由一组能够完全表征系统动态行为的变量组成。这些变量可以是位置、速度、温度、压力等物理量,也可以是更抽象的数学量。1.1 状态向… · 2026/11/9 5:15:37

安全大模型:从被动防御到主动预警的技术突破
安全大模型:从被动防御到主动预警的技术突破

1. 安全大模型的核心价值与转型背景 传统安全防护体系长期处于"事后诸葛亮"的被动状态,当安全事件发生后,防御方往往需要耗费大量资源进行溯源分析和损失控制。根据Verizon《2023年数据泄露调查报告》,企业平均需要277天才能识别和… · 2026/11/8 13:00:21

电工是不是要电工证 官方报名入口怎么找
电工是不是要电工证 官方报名入口怎么找

电工是不是要电工证 官方报名入口怎么找 你是不是也遇到过这种情况,去工地干活,甲方一开口就问“你有电工证吗?”你心里一紧,不知道这证是不是真得要,更怕自己被中介忽悠,花冤枉钱还考不到证。今天咱们就聊聊【电工是不是要电工证】这个事,以及怎么找… · 2026/11/10 21:08:18

低压电工证号查询官网怎么转异地?异地证转过来多少钱?
低压电工证号查询官网怎么转异地?异地证转过来多少钱?

低压电工证号查询官网怎么转异地?异地证转过来多少钱? 之前考的证在外省能不能转过来?这是很多电工朋友在换工作、换城市时最头疼的问题。特别是在南阳,不少初次报考低压电工证的朋友,拿到证后又面临换城市工作的现实,担心证不能用。其实,低压电工证… · 2026/11/10 21:08:18

电工证没到手就别想上岗 亳州电工证报名入口保姆级教程来了
电工证没到手就别想上岗 亳州电工证报名入口保姆级教程来了

电工证没到手就别想上岗 亳州电工证报名入口保姆级教程来了 你是不是还在为找不到工作发愁?是不是正被“必须持有特种作业操作证才能上岗”这句话逼得喘不过气?别急,今天这波【亳州电工证报名入口保姆级教程】,就是为了帮你把电工证拿到手,顺利找到工作… · 2026/11/10 21:08:18

普陀高压电工证考试上岗必备,实操考试心里没底怕挂科怎么办?
普陀高压电工证考试上岗必备,实操考试心里没底怕挂科怎么办?

普陀高压电工证考试上岗必备,实操考试心里没底怕挂科怎么办? 实操考试心里没底怕挂科,这个痛点几乎是每个准备考【普陀高压电工证考试】的人都会遇到的。尤其是初次报考的新人,面对高压电工的实操环节,不知道从哪里下手,更担心一不小心就挂科,白白浪费… · 2026/11/10 21:08:17

容县哪里能考电工证值不值得考
容县哪里能考电工证值不值得考

容县哪里能考电工证值不值得考 学历不高怕报不上名?别急,容县电工证报考门槛其实没你想象的高,关键看你怎么准备。 ### 容县哪里能考电工证?官方机构在哪? 容县本地考电工证,最靠谱的是通过 容县应急管理局… · 2026/11/10 21:08:17

重点单位电工证多久拿证?工地太忙根本没时间复习考试怎么办
重点单位电工证多久拿证?工地太忙根本没时间复习考试怎么办

重点单位电工证多久拿证?工地太忙根本没时间复习考试怎么办 工地太忙根本没时间复习考试,这是很多一线电工的真实写照,尤其是那些在郑州公路工程一线打拼的朋友,天天跟混凝土、钢筋、电缆打交道,根本没空系统学习电工知识,更别提考重点单位电工证了。很… · 2026/11/10 21:07:17

电工证丢失还能补吗?千万别踩坑,丢了证等于失业
电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/10 2:16:10

电力电缆作业证直播报名入口与办理流程良心建议
电力电缆作业证直播报名入口与办理流程良心建议

电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/10 17:46:39

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/10 17:11:43

丹寨电工证怎么考?内部消息透露报考条件和流程
丹寨电工证怎么考?内部消息透露报考条件和流程

丹寨电工证怎么考?内部消息透露报考条件和流程 急需特种作业证才能上岗找工作,这是很多电工朋友最真实的焦虑。尤其是像丹寨电工证这样的证书,直接影响你的职业发展和薪资待遇。但你知道吗?很多人都在报考过程中踩坑,有的甚至花了几千块最后白忙一场。今… · 2026/11/10 0:00:13

成都建筑电工证办理郑州报考避坑指南
成都建筑电工证办理郑州报考避坑指南

成都建筑电工证办理郑州报考避坑指南 证书过期了不知道怎么复审延期?别慌!这篇文章手把手带你解决成都建筑电工证办理的难题,顺便避掉郑州报考的那些坑。不管你是刚拿到证的新手,还是准备复审的老电工,这波干货都别错过。… · 2026/11/10 0:00:13

梅州低压电工证怎么考?怕被中介坑?手把手教你全国通用流程
梅州低压电工证怎么考?怕被中介坑?手把手教你全国通用流程

梅州低压电工证怎么考?怕被中介坑?手把手教你全国通用流程 你是不是正为梅州低压电工证发愁?不知道去哪报名,怕被中介骗钱,又担心证书是不是全国通用?其实,这些顾虑都是正常人会有的。今天我就从一个在开封房建工程一线干了几年的电工角度,手把手教你… · 2026/11/10 0:00:13

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 20:19:29

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 19:22:45

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/10 17:00:47

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码