从零开始:使用Docker+Kubernetes实现newbee-mall电商系统容器化部署
newbee-mall是一套功能完善的电商系统,包含前台商城和后台管理两大模块,支持商品展示、购物车、订单管理等核心电商功能。本文将详细介绍如何通过Docker和Kubernetes实现该系统的容器化部署,帮助开发者快速搭建高可用的电商服务架构。## 📌 为什么选择容器化部署?容器化部署已成为现代应用开发的标准实践,尤其对于电商系统这类需要高可用性和弹性扩展的应用而言,具有以下显著优势:
从零开始:使用Docker+Kubernetes实现newbee-mall电商系统容器化部署
newbee-mall是一套功能完善的电商系统,包含前台商城和后台管理两大模块,支持商品展示、购物车、订单管理等核心电商功能。本文将详细介绍如何通过Docker和Kubernetes实现该系统的容器化部署,帮助开发者快速搭建高可用的电商服务架构。
📌 为什么选择容器化部署?
容器化部署已成为现代应用开发的标准实践,尤其对于电商系统这类需要高可用性和弹性扩展的应用而言,具有以下显著优势:
- 环境一致性:消除"开发环境能运行,生产环境跑不起来"的问题
- 快速部署:相比传统部署方式,容器化部署可将上线时间从小时级缩短到分钟级
- 弹性伸缩:配合Kubernetes可实现流量高峰时自动扩容,低谷时自动缩容
- 资源隔离:每个组件独立运行在隔离环境中,避免相互干扰
图:newbee-mall容器化部署架构示意图(使用系统轮播图资源展示电商系统界面)
📋 准备工作:环境与工具
在开始容器化部署前,请确保您的环境中已安装以下工具:
必备工具清单
- Docker:用于构建和运行容器镜像(推荐版本20.10+)
- Kubernetes集群:可使用Minikube(本地开发)、K3s或云服务商提供的K8s服务
- kubectl:Kubernetes命令行工具
- Git:用于拉取项目代码
环境检查命令
# 检查Docker是否安装成功
docker --version
# 检查kubectl是否配置正确
kubectl get nodes
# 克隆项目代码
git clone https://gitcode.com/gh_mirrors/ne/newbee-mall
cd newbee-mall
🐳 Docker容器化实践
1. 创建Dockerfile
由于项目默认未提供Dockerfile,我们需要在项目根目录创建一个:
# 构建阶段
FROM maven:3.8.5-openjdk-8 AS builder
WORKDIR /app
COPY pom.xml .
# 缓存Maven依赖
RUN mvn dependency:go-offline
COPY src ./src
RUN mvn package -DskipTests
# 运行阶段
FROM openjdk:8-jre-slim
WORKDIR /app
COPY --from=builder /app/target/*.jar app.jar
# 暴露端口(与application.properties中server.port保持一致)
EXPOSE 28089
# 设置环境变量
ENV SPRING_PROFILES_ACTIVE=prod
# 启动命令
ENTRYPOINT ["java", "-jar", "app.jar"]
2. 构建Docker镜像
在项目根目录执行以下命令构建镜像:
docker build -t newbee-mall:v1.0 .
3. 本地测试Docker镜像
构建完成后,我们可以先在本地运行容器进行测试:
# 运行容器
docker run -d -p 28089:28089 --name newbee-mall-test newbee-mall:v1.0
# 查看容器日志
docker logs -f newbee-mall-test
测试成功后访问 http://localhost:28089 即可看到newbee-mall的前台界面,访问 http://localhost:28089/admin/login 可进入后台管理系统。
☸️ Kubernetes部署配置
1. 创建命名空间
为newbee-mall创建独立的命名空间,便于资源管理:
# namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
name: newbee-mall
执行命令创建命名空间:
kubectl apply -f namespace.yaml
2. 部署MySQL数据库
电商系统需要数据库支持,我们先部署MySQL:
# mysql-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
namespace: newbee-mall
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "root"
- name: MYSQL_DATABASE
value: "newbee_mall_db"
volumeMounts:
- name: mysql-data
mountPath: /var/lib/mysql
volumes:
- name: mysql-data
persistentVolumeClaim:
claimName: mysql-pvc
---
# mysql-service.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: newbee-mall
spec:
selector:
app: mysql
ports:
- port: 3306
targetPort: 3306
clusterIP: None # 使用Headless Service
3. 部署newbee-mall应用
创建应用部署配置文件:
# newbee-mall-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: newbee-mall
namespace: newbee-mall
spec:
replicas: 2 # 部署2个副本保证高可用
selector:
matchLabels:
app: newbee-mall
template:
metadata:
labels:
app: newbee-mall
spec:
containers:
- name: newbee-mall
image: newbee-mall:v1.0 # 替换为您的镜像地址
ports:
- containerPort: 28089
env:
- name: SPRING_DATASOURCE_URL
value: "jdbc:mysql://mysql:3306/newbee_mall_db?useUnicode=true&characterEncoding=utf8"
- name: SPRING_DATASOURCE_USERNAME
value: "root"
- name: SPRING_DATASOURCE_PASSWORD
value: "root"
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1000m"
---
# newbee-mall-service.yaml
apiVersion: v1
kind: Service
metadata:
name: newbee-mall
namespace: newbee-mall
spec:
selector:
app: newbee-mall
ports:
- port: 80
targetPort: 28089
type: NodePort # 开发环境使用NodePort,生产环境建议使用Ingress
4. 应用部署命令
# 部署MySQL
kubectl apply -f mysql-deployment.yaml
kubectl apply -f mysql-service.yaml
# 部署应用
kubectl apply -f newbee-mall-deployment.yaml
5. 检查部署状态
# 查看Pod状态
kubectl get pods -n newbee-mall
# 查看服务状态
kubectl get svc -n newbee-mall
# 查看部署日志
kubectl logs -f deployment/newbee-mall -n newbee-mall
🔄 数据库初始化
部署完成后,需要初始化数据库:
# 进入MySQL容器
kubectl exec -it $(kubectl get pods -n newbee-mall | grep mysql | awk '{print $1}') -n newbee-mall -- bash
# 在容器内执行SQL脚本(假设已将SQL文件拷贝到容器内)
mysql -u root -p newbee_mall_db < /path/to/newbee_mall_schema.sql
mysql -u root -p newbee_mall_db < /path/to/newbee_mall_data.sql
⚠️ 注意:实际部署时,建议使用ConfigMap或Secret管理数据库密码等敏感信息,避免明文存储。
🌐 访问应用
开发环境访问
通过NodePort访问:
# 获取NodePort
kubectl get svc newbee-mall -n newbee-mall
# 访问地址:http://<node-ip>:<node-port>
生产环境配置
生产环境建议使用Ingress配置域名访问:
# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: newbee-mall-ingress
namespace: newbee-mall
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: mall.yourdomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: newbee-mall
port:
number: 80
📊 部署架构说明
newbee-mall容器化部署架构主要包含以下组件:
- 前端层:通过Ingress接收外部请求
- 应用层:多副本部署的newbee-mall应用,实现负载均衡和高可用
- 数据层:MySQL数据库,建议生产环境使用主从架构
- 存储层:使用PersistentVolume存储应用数据
图:newbee-mall后台管理系统界面(系统商品分类展示)
🛠️ 常用运维命令
# 查看部署状态
kubectl get deployments -n newbee-mall
# 扩展应用副本数
kubectl scale deployment newbee-mall --replicas=3 -n newbee-mall
# 查看Pod详细信息
kubectl describe pod <pod-name> -n newbee-mall
# 重启部署
kubectl rollout restart deployment newbee-mall -n newbee-mall
📚 项目资源与文档
- 官方文档:docs/DEVELOPMENT.md
- 项目配置:src/main/resources/application.properties
- 核心功能:src/main/java/ltd/newbee/mall/controller/mall/
🔍 问题排查指南
如果部署过程中遇到问题,可以从以下方面排查:
- 容器日志:使用
kubectl logs命令查看应用输出 - 资源状态:检查Pod、Service、Deployment状态是否正常
- 网络连接:确认应用是否能正常连接数据库
- 配置文件:检查环境变量和配置参数是否正确
🎯 总结
通过Docker和Kubernetes实现newbee-mall的容器化部署,不仅简化了部署流程,还提高了系统的可扩展性和可靠性。这种部署方式特别适合电商系统这种需要应对流量波动的应用场景。
随着业务发展,您还可以进一步优化:
- 实现CI/CD流水线自动构建部署
- 配置监控告警系统
- 使用Helm管理Kubernetes应用
- 实现多环境部署策略
希望本文能帮助您顺利完成newbee-mall的容器化部署,打造稳定高效的电商平台!
更多推荐


所有评论(0)