Skip to content

容器化部署

**本文引用的文件** - [lemes-web/Dockerfile](file://dm/lemes-web/Dockerfile) - [lemes-cloud/src/devops/Dockerfile](file://lemes-cloud/src/devops/Dockerfile) - [lemes-cloud/src/devops/docker-compose/docker-compose.yml](file://lemes-cloud/src/devops/docker-compose/docker-compose.yml) - [lemes-cloud/src/devops/docker-compose/base.yml](file://lemes-cloud/src/devops/docker-compose/base.yml) - [lemes-cloud/src/devops/docker-compose/nacos.yml](file://lemes-cloud/src/devops/docker-compose/nacos.yml) - [lemes-cloud/src/devops/docker-compose/nacos-standalone.yml](file://lemes-cloud/src/devops/docker-compose/nacos-standalone.yml) - [lemes-cloud/src/devops/docker-compose/docker-compose-pcg.yml](file://lemes-cloud/src/devops/docker-compose/docker-compose-pcg.yml) - [lemes-cloud/src/devops/docker-compose/wotai/docker-compose.yml](file://lemes-cloud/src/devops/docker-compose/wotai/docker-compose.yml) - [lemes-cloud/src/devops/docker-compose/qyj/docker-compose.yml](file://lemes-cloud/src/devops/docker-compose/qyj/docker-compose.yml) - [lemes-cloud/src/devops/docker-compose/install.sh](file://lemes-cloud/src/devops/docker-compose/install.sh) - [lemes-cloud/src/devops/docker-compose/load-config.sh](file://lemes-cloud/src/devops/docker-compose/load-config.sh) - [lemes-cloud/src/devops/JenkinsCommon.groovy](file://lemes-cloud/src/devops/JenkinsCommon.groovy)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖分析
  7. 性能考虑
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件面向开发者与运维人员,系统性梳理 DeviceMate 所属的 lemes-cloud 生态在容器化方面的实践,涵盖 Docker 镜像构建(含多阶段与分层优化)、docker-compose 编排(服务依赖、网络与卷)、容器运行期配置(资源、健康检查、重启策略)、本地与生产差异化部署方案,以及监控、日志与故障排查建议。文档严格基于仓库中的 Dockerfile、compose 配置与 CI 脚本进行分析与总结。

项目结构

围绕容器化部署的关键文件主要分布在以下位置:

  • 前端静态站点镜像:dm/lemes-web/Dockerfile
  • Java 后端镜像(多阶段分层):lemes-cloud/src/devops/Dockerfile
  • 多套 docker-compose 编排:
    • lemes-cloud/src/devops/docker-compose/docker-compose.yml(通用)
    • lemes-cloud/src/devops/docker-compose/base.yml(基础中间件)
    • lemes-cloud/src/devops/docker-compose/nacos.yml / nacos-standalone.yml(Nacos 配置)
    • lemes-cloud/src/devops/docker-compose/docker-compose-pcg.yml(PCG 场景)
    • lemes-cloud/src/devops/docker-compose/wotai/docker-compose.yml(wotai 场景)
    • lemes-cloud/src/devops/docker-compose/qyj/docker-compose.yml(qyj 场景)
  • 环境准备与配置加载脚本:
    • lemes-cloud/src/devops/docker-compose/install.sh
    • lemes-cloud/src/devops/docker-compose/load-config.sh
  • CI 发布脚本:lemes-cloud/src/devops/JenkinsCommon.groovy

图表来源

章节来源

核心组件

  • 前端静态站点镜像(lemes-web)
    • 基于定制 nginx 镜像,构建产物 dist 直接拷贝至 /data,通过 nginx.conf 与站点 conf 注入运行时变量,暴露 80 端口。
    • 关键点:支持通过环境变量注入网关地址、前缀等,启动时动态生成 conf 并以前台守护进程方式运行。
  • Java 后端镜像(多阶段分层)
    • 使用 Amazon Corretto 镜像作为 builder 与运行时镜像,利用 Spring Boot Layertools 提取分层,分离依赖与应用代码,减少更新传播体积。
    • 运行时通过环境变量拼装 JVM 参数与 Nacos 配置元数据,统一入口启动 JarLauncher。
  • 编排与中间件
    • base.yml 提供 Redis 集群与 Nacos 服务,gateway 与 auth 依赖 Nacos。
    • docker-compose.yml 为通用编排,包含 lemes-service-*、lemes-web、lemes-gateway、lemes-auth 等服务。
    • PCG、wotai、qyj 等场景提供专用 compose,覆盖不同业务域与部署形态。
  • CI 发布
    • JenkinsCommon.groovy 实现镜像构建、登录、推送与 Rancher 自动升级流程,支持多集群发布。

章节来源

架构总览

下图展示 lemes-cloud 在 docker-compose 中的整体拓扑:Nacos 作为注册中心与配置中心,Redis 作为缓存,Gateway 与 Auth 依赖 Nacos,各业务服务通过 Nacos 发现,前端 lemes-web 通过网关对外提供访问。

图表来源

详细组件分析

前端静态站点镜像(lemes-web)

  • 构建与运行
    • 基于 nginx:1.20,复制 dist 到 /data,注入自定义 nginx.conf 与站点 conf,支持通过环境变量动态替换网关地址与前缀。
    • CMD 启动时打印关键变量,调用脚本生成最终 conf,然后以前台守护方式运行 nginx。
  • 多阶段与分层优化
    • 本镜像为纯静态资源镜像,未采用多阶段构建;若需进一步优化可结合 CDN/边缘节点与缓存策略。
  • 运行时配置
    • 通过环境变量注入 NACOS_ADDR、NABFWEB_ADDR、PREFIX、GATEWAY_ADDR 等,实现不同环境的灵活切换。

图表来源

章节来源

Java 后端镜像(多阶段分层与启动)

  • 多阶段构建
    • 第一阶段使用 Amazon Corretto 作为 builder,提取 Spring Boot 分层(dependencies/snapshot-dependencies/spring-boot-loader/application),仅保留必要文件。
    • 第二阶段使用相同运行时镜像,按层顺序拷贝,确保更新只影响应用层,减少传输与构建时间。
  • 运行时启动
    • 通过环境变量拼装 JVM 参数(如 NACOS_ADDR、NACOS_GROUP、NACOS_NAMESPACE、HOST_IP 等),并选择 JarLauncher 启动。
    • 支持通过 JAVA_OPTS 注入额外参数,便于 APM 与调试。

图表来源

章节来源

docker-compose 编排与服务依赖

  • 通用编排(docker-compose.yml)
    • 包含 lemes-service-*、lemes-web、lemes-gateway、lemes-auth 等服务,均设置 restart: always,端口映射与日志卷挂载。
    • lemes-gateway、lemes-auth 通过 env_file 引入 .env,且依赖 lemes-nacos。
  • 基础中间件(base.yml)
    • lemes-redis1/2 使用 host 网络模式,挂载持久化目录,设置端口与数据目录。
    • lemes-nacos 使用官方镜像,暴露多端口,通过环境变量配置数据库与集群参数。
  • 场景化编排
    • docker-compose-pcg.yml:面向 PCG 场景的服务集合与端口映射差异。
    • wotai/docker-compose.yml:示例场景,包含 Nacos/Redis/Gateway/Auth/Service/Web 等。
    • qyj/docker-compose.yml:示例场景,包含 Nacos/Redis/Gateway/Auth/Service/Websocket/Web 等。

图表来源

章节来源

CI 发布与镜像策略

  • 镜像标签
    • 采用分支+时间戳格式,master 分支同时推送 latest 标签,便于 docker-compose 快速升级。
  • 构建与推送
    • 前端:使用公共 Dockerfile,构建后登录私有仓库并推送。
    • Java:通过 Maven 插件构建并推送镜像,支持多模块与子目录。
  • 自动部署
    • 通过 Rancher 接口按集群与命名空间升级 Pod,支持批量与条件判断。

图表来源

章节来源

依赖分析

  • 服务间依赖
    • gateway/auth/service 等均依赖 nacos,需先启动 nacos。
    • redis 作为共享缓存,被多个服务复用。
  • 网络与卷
    • base.yml 中 redis 使用 host 网络模式并挂载持久化目录。
    • 各服务通过 env_file 引入 .env,日志目录挂载到宿主机指定路径。
  • 环境变量
    • NACOS_ADDR、NABFWEB_ADDR、PREFIX、GATEWAY_ADDR、HOST_IP 等贯穿前端与后端,用于动态配置。

图表来源

章节来源

性能考虑

  • Java 镜像分层优化
    • 通过 layertools 分离依赖与应用,更新代码层时无需重建依赖层,显著降低传输与构建时间。
  • 前端镜像
    • 当前为静态资源镜像,建议配合 CDN 与缓存头策略,减少带宽与延迟。
  • 编排层面
    • 使用 restart: always 保证服务可用性;合理设置日志卷大小与清理策略,避免磁盘膨胀。
  • 环境变量注入
    • 通过环境变量控制网关与前缀,避免硬编码,提升部署灵活性。

故障排查指南

  • 环境准备
    • 使用 install.sh 安装 Docker 与 docker-compose,并配置私有仓库与镜像存储路径。
    • 使用 load-config.sh 加载 base.yml、.env 与 docker-compose.yml,并支持解析参数(Nacos 地址、数据库、组件集等)。
  • 常见问题定位
    • 端口冲突:检查 compose 中端口映射是否与宿主机占用冲突。
    • 依赖未就绪:确认 lemes-nacos 已启动并可访问,gateway/auth/service 依赖其可用。
    • 日志定位:各服务挂载日志目录到宿主机,可在对应路径查看;前端可通过容器日志查看 nginx 启动输出。
    • 网关路由:确认 lemes-web 注入的网关地址与前缀正确,避免 404 或跨域问题。

章节来源

结论

本项目在容器化方面已形成较为完善的体系:前端静态站点镜像简洁高效,后端采用多阶段分层构建以优化更新效率;docker-compose 提供了通用与多场景的编排方案,并通过 CI 实现自动化构建、推送与升级。建议在生产环境中进一步完善资源限制、健康检查与滚动更新策略,并结合监控与日志采集体系,持续提升稳定性与可观测性。

附录

  • 本地开发环境
    • 使用 load-config.sh 加载配置并启动 docker-compose,确保 Nacos 地址与数据库参数正确。
    • 如需单机运行,可传入 -a 参数加载单机配置覆盖。
  • 生产环境
    • 使用 JenkinsCommon.groovy 完成镜像构建与推送,并通过 Rancher 接口进行升级。
    • 建议为各服务设置合理的资源限制与重启策略,启用健康检查与日志采集。