首页
/ eShopOnWeb项目Docker容器化部署指南

eShopOnWeb项目Docker容器化部署指南

2025-07-06 06:01:22作者:彭桢灵Jeremy

项目概述

eShopOnWeb是一个基于.NET技术的电子商务示例应用,展示了现代化Web应用的架构设计。本文将详细解析其Docker Compose配置文件,帮助开发者理解如何容器化部署这个应用。

Docker Compose文件解析

基础配置

该文件采用Docker Compose 3.4版本规范,定义了三个核心服务:

  1. Web MVC应用服务 (eshopwebmvc)
  2. 公共API服务 (eshoppublicapi)
  3. 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. 开发环境调整

  • 热重载:开发时可挂载源代码目录,启用热重载功能
  • 调试支持:配置适当的调试端口和工具

典型部署流程

  1. 安装Docker和Docker Compose
  2. 克隆项目代码
  3. 在项目根目录执行:docker-compose up -d
  4. 访问Web应用(通常为http://localhost)

架构设计思考

这种容器化部署方式体现了现代微服务架构的多个优点:

  • 服务隔离:Web前端和API服务独立部署
  • 环境一致性:开发、测试、生产环境使用相同镜像
  • 可扩展性:可轻松扩展API服务实例数量

常见问题排查

  1. 数据库连接失败:检查SQL Server日志,确认SA密码正确
  2. 构建失败:确认Dockerfile路径和上下文正确
  3. 端口冲突:检查1433端口是否被占用

通过理解这个Docker Compose配置,开发者可以掌握.NET应用容器化部署的核心要点,并应用于自己的项目中。