菜单

Docker 部署

相关源文件

本文档概述了使用 Docker 和 Docker Compose 部署 Mall 电商系统的过程。它涵盖了基础设施服务(数据库、消息队列等)和应用程序服务(mall-admin、mall-portal、mall-search)的容器化。有关特定于环境的配置参数,请参阅 环境配置

1. 容器化架构概述

Mall 系统使用 Docker 容器进行部署,并使用 Docker Compose 进行编排。这种方法确保了开发、测试和生产环境之间的一致性,同时简化了部署过程。

来源: document/docker/docker-compose-env.yml document/docker/docker-compose-app.yml

2. 基础设施服务部署

Mall 系统依赖于多个基础设施服务,这些服务被部署为 Docker 容器。这些服务为应用程序的功能提供了基础。

2.1 基础设施服务组成

基础设施服务在 docker-compose-env.yml 文件中定义,该文件指定了所有必需服务的容器配置。

来源: document/docker/docker-compose-env.yml

2.2 基础设施服务配置

下表详细介绍了各项基础设施服务、其用途以及重要的配置方面。

服务图片目的配置亮点
MySQLmysql:5.7主关系数据库- Root密码: root
- 字符集: utf8mb4
- 数据目录: /mydata/mysql/data
Redisredis:7缓存和会话存储- 开启AOF持久化
- 数据目录: /mydata/redis/data
Nginxnginx:1.22Web服务器和反向代理- 配置目录: /mydata/nginx/conf
- HTML目录: /mydata/nginx/html
RabbitMQrabbitmq:3.9.11-management用于异步处理的消息队列- 管理UI端口: 15672
- 数据目录: /mydata/rabbitmq/data
Elasticsearchelasticsearch:7.17.3搜索引擎和日志存储- 单节点模式
- JVM内存: 512m-1024m
- 数据目录: /mydata/elasticsearch/data
Logstashlogstash:7.17.3日志处理管道- 自定义管道配置
- 与Elasticsearch关联
Kibanakibana:7.17.3日志和指标可视化- 连接到Elasticsearch
- Web UI端口: 5601
MongoDBmongo:4用于灵活数据的文档数据库- 数据目录: /mydata/mongo/db
MinIOminio/minioS3兼容的对象存储- 访问凭证: minioadmin/minioadmin
- 控制台端口: 9001
- API端口: 9090

来源: document/docker/docker-compose-env.yml

2.3 卷管理

基础设施服务使用 Docker 卷在容器生命周期之外持久化数据。配置了以下卷映射:

来源: document/docker/docker-compose-env.yml

3. 应用服务部署

Mall 应用服务被部署为独立的 Docker 容器,它们连接到基础设施服务。

3.1 应用服务组成

应用服务在 docker-compose-app.yml 文件中定义,该文件指定了 Mall 模块的容器配置。

来源: document/docker/docker-compose-app.yml

3.2 应用服务配置

下表详细介绍了各项应用服务、其用途以及重要的配置方面。

服务图片目的依赖项端口
mall-adminmall/mall-admin:1.0-SNAPSHOT后台管理 API- MySQL8080
mall-searchmall/mall-search:1.0-SNAPSHOT商品搜索功能- MySQL
- Elasticsearch
8081
mall-portalmall/mall-portal:1.0-SNAPSHOT面向客户的 API- MySQL
- Redis
- MongoDB
- RabbitMQ
8085

来源: document/docker/docker-compose-app.yml

应用服务通过 Docker 的 external_links 功能连接到基础设施服务,该功能允许容器使用域名进行通信。

服务外部链接
mall-adminmysql:db
mall-searchmysql:db, elasticsearch:es
mall-portalmysql:db, redis:redis, mongo:mongo, rabbitmq:rabbit

来源: document/docker/docker-compose-app.yml

4. 部署指南

4.1 先决条件

在部署 Docker 上的 Mall 系统之前,请确保:

  1. 已安装 Docker 和 Docker Compose
  2. 有足够的磁盘空间用于数据卷
  3. 服务所需的端口可用

4.2 目录结构设置

为卷挂载创建必要的主机目录。

4.3 基础设施部署

首先部署基础设施服务。

4.4 应用部署

部署 Mall 应用服务。

4.5 Nginx 配置

默认的 Nginx 配置提供了服务静态内容的基本设置。对于生产环境,请自定义 Nginx 配置文件。

  1. 将基础 Nginx 配置复制到主机卷。

  2. 根据需要自定义配置,以服务 Mall 前端应用程序并将请求代理到后端服务。

来源: document/docker/nginx.conf

5. 服务访问信息

部署成功后,可以通过以下地址访问服务:

服务地址凭证(如果适用)
MySQLlocalhost:3306root/root
Redislocalhost:6379不适用
Nginxlocalhost:80不适用
RabbitMQlocalhost:5672
localhost:15672 (管理 UI)
guest/guest
Elasticsearchlocalhost:9200
localhost:9300
不适用
Kibanalocalhost:5601不适用
MongoDBlocalhost:27017不适用
MinIOlocalhost:9090 (API)
localhost:9001 (控制台)
minioadmin/minioadmin
mall-adminlocalhost:8080取决于应用设置
mall-searchlocalhost:8081取决于应用设置
mall-portallocalhost:8085取决于应用设置

6. 卷数据管理

6.1 备份策略

对于生产部署,请为数据卷实施定期的备份策略。

6.2 数据卷维护

定期监控数据卷的磁盘使用情况,并根据需要执行维护。

7. 故障排除

7.1 常见问题

问题可能原因解决方案
容器启动失败端口冲突在 docker-compose 文件中更改主机端口映射。
容器立即退出内存不足增加容器内存限制或主机内存。
数据库连接失败MySQL 未正确初始化检查 MySQL 日志和容器状态。
Elasticsearch 启动失败虚拟内存不足在主机上运行 sysctl -w vm.max_map_count=262144
应用程序无法连接到服务网络问题或服务名称错误验证 external_links 和容器名称。

7.2 查看日志

要调试问题,请检查容器日志。

对于特定于应用程序的日志,请检查已挂载的日志目录。

8. 扩展和高可用性

对于生产部署,请考虑实施:

  1. MySQL 的数据库复制
  2. Redis 集群用于缓存
  3. Elasticsearch 集群用于搜索
  4. 负载均衡器后面的多个应用程序服务实例

这些配置需要超出本文档中描述的基本 Docker Compose 部署的额外设置。