从零开始:使用Docker+Kubernetes实现newbee-mall电商系统容器化部署

【免费下载链接】newbee-mall 🔥 🎉newbee-mall是一套电商系统,包括基础版本(Spring Boot+Thymeleaf)、前后端分离版本(Spring Boot+Vue 3+Element-Plus+Vue-Router 4+Pinia+Vant 4) 、秒杀版本、Go语言版本、微服务版本(Spring Cloud Alibaba+Nacos+Sentinel+Seata+Spring Cloud Gateway+OpenFeign+ELK)。 前台商城系统包含首页门户、商品分类、新品上线、首页轮播、商品推荐、商品搜索、商品展示、购物车、订单结算、订单流程、个人订单管理、会员中心、帮助中心等模块。 后台管理系统包含数据面板、轮播图管理、商品管理、订单管理、会员管理、分类管理、设置等模块。 【免费下载链接】newbee-mall 项目地址: https://gitcode.com/gh_mirrors/ne/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 可进入后台管理系统。

newbee-mall前台界面 图:newbee-mall前台商城界面(系统首页轮播图)

☸️ 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容器化部署架构主要包含以下组件:

  1. 前端层:通过Ingress接收外部请求
  2. 应用层:多副本部署的newbee-mall应用,实现负载均衡和高可用
  3. 数据层:MySQL数据库,建议生产环境使用主从架构
  4. 存储层:使用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

📚 项目资源与文档

🔍 问题排查指南

如果部署过程中遇到问题,可以从以下方面排查:

  1. 容器日志:使用kubectl logs命令查看应用输出
  2. 资源状态:检查Pod、Service、Deployment状态是否正常
  3. 网络连接:确认应用是否能正常连接数据库
  4. 配置文件:检查环境变量和配置参数是否正确

🎯 总结

通过Docker和Kubernetes实现newbee-mall的容器化部署,不仅简化了部署流程,还提高了系统的可扩展性和可靠性。这种部署方式特别适合电商系统这种需要应对流量波动的应用场景。

随着业务发展,您还可以进一步优化:

  • 实现CI/CD流水线自动构建部署
  • 配置监控告警系统
  • 使用Helm管理Kubernetes应用
  • 实现多环境部署策略

希望本文能帮助您顺利完成newbee-mall的容器化部署,打造稳定高效的电商平台!

【免费下载链接】newbee-mall 🔥 🎉newbee-mall是一套电商系统,包括基础版本(Spring Boot+Thymeleaf)、前后端分离版本(Spring Boot+Vue 3+Element-Plus+Vue-Router 4+Pinia+Vant 4) 、秒杀版本、Go语言版本、微服务版本(Spring Cloud Alibaba+Nacos+Sentinel+Seata+Spring Cloud Gateway+OpenFeign+ELK)。 前台商城系统包含首页门户、商品分类、新品上线、首页轮播、商品推荐、商品搜索、商品展示、购物车、订单结算、订单流程、个人订单管理、会员中心、帮助中心等模块。 后台管理系统包含数据面板、轮播图管理、商品管理、订单管理、会员管理、分类管理、设置等模块。 【免费下载链接】newbee-mall 项目地址: https://gitcode.com/gh_mirrors/ne/newbee-mall

Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐