eShopOnWeb项目Docker容器化部署指南
2025-07-06 06:01:22作者:彭桢灵Jeremy
项目概述
eShopOnWeb是一个基于.NET技术的电子商务示例应用,展示了现代化Web应用的架构设计。本文将详细解析其Docker Compose配置文件,帮助开发者理解如何容器化部署这个应用。
Docker Compose文件解析
基础配置
该文件采用Docker Compose 3.4版本规范,定义了三个核心服务:
- Web MVC应用服务 (eshopwebmvc)
- 公共API服务 (eshoppublicapi)
- SQL Server数据库服务 (sqlserver)
服务详解
1. Web MVC应用服务
eshopwebmvc:
image: ${DOCKER_REGISTRY-}eshopwebmvc
build:
context: .
dockerfile: src/Web/Dockerfile
depends_on:
- "sqlserver"
- 镜像构建:使用项目根目录作为构建上下文,基于
src/Web/Dockerfile
构建镜像 - 依赖关系:明确依赖SQL Server服务,确保数据库先启动
- 灵活性:支持通过环境变量
DOCKER_REGISTRY
指定私有镜像仓库
2. 公共API服务
eshoppublicapi:
image: ${DOCKER_REGISTRY-}eshoppublicapi
build:
context: .
dockerfile: src/PublicApi/Dockerfile
depends_on:
- "sqlserver"
- 结构与Web MVC服务类似,但构建的是API服务
- 同样依赖SQL Server数据库
- 使用独立的Dockerfile进行构建
3. SQL Server数据库服务
sqlserver:
image: mcr.microsoft.com/azure-sql-edge
ports:
- "1433:1433"
environment:
- SA_PASSWORD=@someThingComplicated1234
- ACCEPT_EULA=Y
- 使用微软官方的Azure SQL Edge镜像
- 暴露标准SQL Server端口1433
- 环境变量配置:
SA_PASSWORD
:设置强密码的SA账户ACCEPT_EULA
:接受最终用户许可协议
部署实践建议
1. 安全增强
- 密码管理:生产环境应将SA密码移出compose文件,使用Docker secrets或环境变量文件
- 网络隔离:可添加自定义网络,限制服务间通信
2. 性能优化
- 资源限制:为各服务添加CPU和内存限制
- 持久化存储:为SQL Server添加volume,确保数据持久化
3. 开发环境调整
- 热重载:开发时可挂载源代码目录,启用热重载功能
- 调试支持:配置适当的调试端口和工具
典型部署流程
- 安装Docker和Docker Compose
- 克隆项目代码
- 在项目根目录执行:
docker-compose up -d
- 访问Web应用(通常为http://localhost)
架构设计思考
这种容器化部署方式体现了现代微服务架构的多个优点:
- 服务隔离:Web前端和API服务独立部署
- 环境一致性:开发、测试、生产环境使用相同镜像
- 可扩展性:可轻松扩展API服务实例数量
常见问题排查
- 数据库连接失败:检查SQL Server日志,确认SA密码正确
- 构建失败:确认Dockerfile路径和上下文正确
- 端口冲突:检查1433端口是否被占用
通过理解这个Docker Compose配置,开发者可以掌握.NET应用容器化部署的核心要点,并应用于自己的项目中。