Appearance
容器化部署
**本文引用的文件** - [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)目录
简介
本文件面向开发者与运维人员,系统性梳理 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/Dockerfile:1-26
- lemes-cloud/src/devops/Dockerfile:1-52
- lemes-cloud/src/devops/docker-compose/docker-compose.yml:1-136
- lemes-cloud/src/devops/docker-compose/base.yml:1-70
- lemes-cloud/src/devops/docker-compose/nacos.yml:1-25
- lemes-cloud/src/devops/docker-compose/nacos-standalone.yml:1-25
- lemes-cloud/src/devops/docker-compose/docker-compose-pcg.yml:1-220
- lemes-cloud/src/devops/docker-compose/wotai/docker-compose.yml:1-99
- lemes-cloud/src/devops/docker-compose/qyj/docker-compose.yml:1-129
- lemes-cloud/src/devops/docker-compose/install.sh:1-37
- lemes-cloud/src/devops/docker-compose/load-config.sh:1-91
- lemes-cloud/src/devops/JenkinsCommon.groovy:1-319
章节来源
- lemes-web/Dockerfile:1-26
- lemes-cloud/src/devops/Dockerfile:1-52
- lemes-cloud/src/devops/docker-compose/docker-compose.yml:1-136
- lemes-cloud/src/devops/docker-compose/base.yml:1-70
- lemes-cloud/src/devops/docker-compose/nacos.yml:1-25
- lemes-cloud/src/devops/docker-compose/nacos-standalone.yml:1-25
- lemes-cloud/src/devops/docker-compose/docker-compose-pcg.yml:1-220
- lemes-cloud/src/devops/docker-compose/wotai/docker-compose.yml:1-99
- lemes-cloud/src/devops/docker-compose/qyj/docker-compose.yml:1-129
- lemes-cloud/src/devops/docker-compose/install.sh:1-37
- lemes-cloud/src/devops/docker-compose/load-config.sh:1-91
- lemes-cloud/src/devops/JenkinsCommon.groovy:1-319
核心组件
- 前端静态站点镜像(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-web/Dockerfile:1-26
- lemes-cloud/src/devops/Dockerfile:1-52
- lemes-cloud/src/devops/docker-compose/base.yml:1-70
- lemes-cloud/src/devops/docker-compose/docker-compose.yml:1-136
- lemes-cloud/src/devops/docker-compose/docker-compose-pcg.yml:1-220
- lemes-cloud/src/devops/docker-compose/wotai/docker-compose.yml:1-99
- lemes-cloud/src/devops/docker-compose/qyj/docker-compose.yml:1-129
- lemes-cloud/src/devops/JenkinsCommon.groovy:1-319
架构总览
下图展示 lemes-cloud 在 docker-compose 中的整体拓扑:Nacos 作为注册中心与配置中心,Redis 作为缓存,Gateway 与 Auth 依赖 Nacos,各业务服务通过 Nacos 发现,前端 lemes-web 通过网关对外提供访问。
图表来源
- lemes-cloud/src/devops/docker-compose/base.yml:1-70
- lemes-cloud/src/devops/docker-compose/docker-compose.yml:1-136
- lemes-cloud/src/devops/docker-compose/docker-compose-pcg.yml:1-220
- lemes-cloud/src/devops/docker-compose/wotai/docker-compose.yml:1-99
- lemes-cloud/src/devops/docker-compose/qyj/docker-compose.yml:1-129
详细组件分析
前端静态站点镜像(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 等。
图表来源
- lemes-cloud/src/devops/docker-compose/docker-compose.yml:1-136
- lemes-cloud/src/devops/docker-compose/base.yml:1-70
章节来源
- lemes-cloud/src/devops/docker-compose/docker-compose.yml:1-136
- lemes-cloud/src/devops/docker-compose/base.yml:1-70
- lemes-cloud/src/devops/docker-compose/docker-compose-pcg.yml:1-220
- lemes-cloud/src/devops/docker-compose/wotai/docker-compose.yml:1-99
- lemes-cloud/src/devops/docker-compose/qyj/docker-compose.yml:1-129
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 等贯穿前端与后端,用于动态配置。
图表来源
- lemes-cloud/src/devops/docker-compose/base.yml:1-70
- lemes-cloud/src/devops/docker-compose/docker-compose.yml:1-136
章节来源
- lemes-cloud/src/devops/docker-compose/base.yml:1-70
- lemes-cloud/src/devops/docker-compose/docker-compose.yml:1-136
性能考虑
- 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 或跨域问题。
章节来源
- lemes-cloud/src/devops/docker-compose/install.sh:1-37
- lemes-cloud/src/devops/docker-compose/load-config.sh:1-91
- lemes-cloud/src/devops/docker-compose/docker-compose.yml:1-136
结论
本项目在容器化方面已形成较为完善的体系:前端静态站点镜像简洁高效,后端采用多阶段分层构建以优化更新效率;docker-compose 提供了通用与多场景的编排方案,并通过 CI 实现自动化构建、推送与升级。建议在生产环境中进一步完善资源限制、健康检查与滚动更新策略,并结合监控与日志采集体系,持续提升稳定性与可观测性。
附录
- 本地开发环境
- 使用 load-config.sh 加载配置并启动 docker-compose,确保 Nacos 地址与数据库参数正确。
- 如需单机运行,可传入 -a 参数加载单机配置覆盖。
- 生产环境
- 使用 JenkinsCommon.groovy 完成镜像构建与推送,并通过 Rancher 接口进行升级。
- 建议为各服务设置合理的资源限制与重启策略,启用健康检查与日志采集。