本文档概述了使用 Docker 和 Docker Compose 部署 Mall 电商系统的过程。它涵盖了基础设施服务(数据库、消息队列等)和应用程序服务(mall-admin、mall-portal、mall-search)的容器化。有关特定于环境的配置参数,请参阅 环境配置。
Mall 系统使用 Docker 容器进行部署,并使用 Docker Compose 进行编排。这种方法确保了开发、测试和生产环境之间的一致性,同时简化了部署过程。
来源: document/docker/docker-compose-env.yml document/docker/docker-compose-app.yml
Mall 系统依赖于多个基础设施服务,这些服务被部署为 Docker 容器。这些服务为应用程序的功能提供了基础。
基础设施服务在 docker-compose-env.yml 文件中定义,该文件指定了所有必需服务的容器配置。
来源: document/docker/docker-compose-env.yml
下表详细介绍了各项基础设施服务、其用途以及重要的配置方面。
| 服务 | 图片 | 目的 | 配置亮点 |
|---|---|---|---|
| MySQL | mysql:5.7 | 主关系数据库 | - Root密码: root - 字符集: utf8mb4 - 数据目录: /mydata/mysql/data |
| Redis | redis:7 | 缓存和会话存储 | - 开启AOF持久化 - 数据目录: /mydata/redis/data |
| Nginx | nginx:1.22 | Web服务器和反向代理 | - 配置目录: /mydata/nginx/conf - HTML目录: /mydata/nginx/html |
| RabbitMQ | rabbitmq:3.9.11-management | 用于异步处理的消息队列 | - 管理UI端口: 15672 - 数据目录: /mydata/rabbitmq/data |
| Elasticsearch | elasticsearch:7.17.3 | 搜索引擎和日志存储 | - 单节点模式 - JVM内存: 512m-1024m - 数据目录: /mydata/elasticsearch/data |
| Logstash | logstash:7.17.3 | 日志处理管道 | - 自定义管道配置 - 与Elasticsearch关联 |
| Kibana | kibana:7.17.3 | 日志和指标可视化 | - 连接到Elasticsearch - Web UI端口: 5601 |
| MongoDB | mongo:4 | 用于灵活数据的文档数据库 | - 数据目录: /mydata/mongo/db |
| MinIO | minio/minio | S3兼容的对象存储 | - 访问凭证: minioadmin/minioadmin - 控制台端口: 9001 - API端口: 9090 |
来源: document/docker/docker-compose-env.yml
基础设施服务使用 Docker 卷在容器生命周期之外持久化数据。配置了以下卷映射:
来源: document/docker/docker-compose-env.yml
Mall 应用服务被部署为独立的 Docker 容器,它们连接到基础设施服务。
应用服务在 docker-compose-app.yml 文件中定义,该文件指定了 Mall 模块的容器配置。
来源: document/docker/docker-compose-app.yml
下表详细介绍了各项应用服务、其用途以及重要的配置方面。
| 服务 | 图片 | 目的 | 依赖项 | 端口 |
|---|---|---|---|---|
| mall-admin | mall/mall-admin:1.0-SNAPSHOT | 后台管理 API | - MySQL | 8080 |
| mall-search | mall/mall-search:1.0-SNAPSHOT | 商品搜索功能 | - MySQL - Elasticsearch | 8081 |
| mall-portal | mall/mall-portal:1.0-SNAPSHOT | 面向客户的 API | - MySQL - Redis - MongoDB - RabbitMQ | 8085 |
来源: document/docker/docker-compose-app.yml
应用服务通过 Docker 的 external_links 功能连接到基础设施服务,该功能允许容器使用域名进行通信。
| 服务 | 外部链接 |
|---|---|
| mall-admin | mysql:db |
| mall-search | mysql:db, elasticsearch:es |
| mall-portal | mysql:db, redis:redis, mongo:mongo, rabbitmq:rabbit |
来源: document/docker/docker-compose-app.yml
在部署 Docker 上的 Mall 系统之前,请确保:
为卷挂载创建必要的主机目录。
首先部署基础设施服务。
部署 Mall 应用服务。
默认的 Nginx 配置提供了服务静态内容的基本设置。对于生产环境,请自定义 Nginx 配置文件。
将基础 Nginx 配置复制到主机卷。
根据需要自定义配置,以服务 Mall 前端应用程序并将请求代理到后端服务。
来源: document/docker/nginx.conf
部署成功后,可以通过以下地址访问服务:
| 服务 | 地址 | 凭证(如果适用) |
|---|---|---|
| MySQL | localhost:3306 | root/root |
| Redis | localhost:6379 | 不适用 |
| Nginx | localhost:80 | 不适用 |
| RabbitMQ | localhost:5672 localhost:15672 (管理 UI) | guest/guest |
| Elasticsearch | localhost:9200 localhost:9300 | 不适用 |
| Kibana | localhost:5601 | 不适用 |
| MongoDB | localhost:27017 | 不适用 |
| MinIO | localhost:9090 (API) localhost:9001 (控制台) | minioadmin/minioadmin |
| mall-admin | localhost:8080 | 取决于应用设置 |
| mall-search | localhost:8081 | 取决于应用设置 |
| mall-portal | localhost:8085 | 取决于应用设置 |
对于生产部署,请为数据卷实施定期的备份策略。
定期监控数据卷的磁盘使用情况,并根据需要执行维护。
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 容器启动失败 | 端口冲突 | 在 docker-compose 文件中更改主机端口映射。 |
| 容器立即退出 | 内存不足 | 增加容器内存限制或主机内存。 |
| 数据库连接失败 | MySQL 未正确初始化 | 检查 MySQL 日志和容器状态。 |
| Elasticsearch 启动失败 | 虚拟内存不足 | 在主机上运行 sysctl -w vm.max_map_count=262144。 |
| 应用程序无法连接到服务 | 网络问题或服务名称错误 | 验证 external_links 和容器名称。 |
要调试问题,请检查容器日志。
对于特定于应用程序的日志,请检查已挂载的日志目录。
对于生产部署,请考虑实施:
这些配置需要超出本文档中描述的基本 Docker Compose 部署的额外设置。