跳到主要内容

Docker容器化部署

目录

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

简介

本文件面向生产级Docker容器化部署,围绕以下目标展开:解析docker-compose.yml的服务编排策略(网关服务、业务模块服务、中间件服务)、详解Dockerfile构建过程(多阶段构建优化、镜像层级管理、安全基线)、说明容器网络与数据卷、环境变量传递、健康检查与重启策略、资源限制最佳实践;并提供日志收集、调试技巧、故障排查方法,以及SkyWalking Agent在Docker环境中的配置与使用建议,最后给出生产环境的安全加固与合规检查清单。

项目结构

仓库采用“多模块微服务 + Docker容器化”的组织方式,核心容器化相关目录如下:

  • deploy/docker:集中存放中间件(Kafka、Canal)与示例编排
  • script/docker:业务服务统一编排(gateway与各biz模块)
  • 各业务模块根目录下的Dockerfile:单模块镜像构建脚本
  • .env与中间件.env:环境变量集中管理

Mermaid Diagram Code:

graph TB
subgraph "编排层"
SDC["script/docker/docker-compose.yml"]
DKC["deploy/docker/kafka/docker-compose.yml"]
DCC["deploy/docker/canal/dk_canal_kafka/docker-compose.yml"]
end
subgraph "业务镜像构建"
GWDF["yudao-gateway/Dockerfile"]
GWDF_SW["yudao-gateway/Dockerfile_skywalking"]
DEVDF["yudao-module-device/.../Dockerfile"]
BPMDF["yudao-module-bpm/.../Dockerfile"]
INFDF["yudao-module-infra/.../Dockerfile"]
end
subgraph "环境变量"
ENV[".env"]
DCC_ENV["deploy/docker/canal/dk_canal_kafka/.env"]
end
SDC --> GWDF
SDC --> DEVDF
SDC --> BPMDF
SDC --> INFDF
DKC --> DCC
ENV -.-> SDC
DCC_ENV -.-> DCC

图表来源

章节来源

核心组件

  • 网关服务(yudao-gateway):统一入口,负责路由与聚合,承载SkyWalking Agent探针。
  • 业务模块服务(yudao-*-biz):各功能域的业务实现,如系统、基础设施、报表、流程管理、设备等。
  • 中间件服务:Kafka消息队列与Canal数据同步链路,支撑异步解耦与数据变更捕获。

关键特性:

  • 统一通过docker-compose编排,支持健康检查、重启策略、主机网络模式。
  • SkyWalking Agent通过环境变量注入,支持忽略路径与后端采集地址配置。
  • 环境变量集中于.env与中间件专用.env,便于跨环境切换。

章节来源

架构总览

下图展示容器化部署的整体拓扑:网关位于前端入口,业务模块通过Nacos注册发现与配置中心联动;Kafka与Canal构成数据通道,支撑异步处理与增量同步。

Mermaid Diagram Code:

graph TB
subgraph "前端与网关"
GW["yudao-gateway"]
WEB["Web前端(可选)"]
end
subgraph "业务模块"
SYS["yudao-module-system-biz"]
INF["yudao-module-infra-biz"]
REP["yudao-module-report-biz"]
BPM["yudao-module-bpm-biz"]
DEV["yudao-module-device-biz"]
PAY["yudao-module-pay-biz"]
MP["yudao-module-mp-biz"]
end
subgraph "中间件"
NACOS["Nacos(注册/配置)"]
KAFKA["Kafka"]
CANAL["Canal"]
ES["Elasticsearch(可选)"]
end
WEB --> GW
GW --> SYS
GW --> INF
GW --> REP
GW --> BPM
GW --> DEV
GW --> PAY
GW --> MP
SYS --- NACOS
INF --- NACOS
REP --- NACOS
BPM --- NACOS
DEV --- NACOS
PAY --- NACOS
MP --- NACOS
DEV -. 变更捕获 .-> CANAL
CANAL --> KAFKA
KAFKA --> SYS
KAFKA --> INF
KAFKA --> REP
KAFKA --> BPM
KAFKA --> DEV
KAFKA --> PAY
KAFKA --> MP
CANAL -. 可选ES同步 .-> ES

图表来源

详细组件分析

网关服务(yudao-gateway)

  • 容器编排要点
    • 主机网络模式:network_mode: host,简化端口映射与网络互通。
    • SkyWalking Agent:通过JAVA_TOOL_OPTIONS注入探针,配置采集后端地址、服务名与忽略路径。
    • 健康检查:基于HTTP探测,周期与超时合理设置,避免误判。
    • 重启策略:always,保证高可用。
    • 数据卷:挂载日志目录与Agent目录,便于观测与探针持久化。
  • Dockerfile构建要点
    • 基础镜像:openjdk:17.0.2-oraclelinux8,稳定且符合生产要求。
    • 时区与JVM参数:ENV统一设置TZ与内存参数,便于容器内一致性。
    • 端口暴露:EXPOSE 48080,配合主机网络模式使用。
    • SkyWalking版本:Dockerfile_skywalking示例展示了探针插件移动与环境变量注入方式。

Mermaid Diagram Code:

flowchart TD
Start(["启动容器"]) --> Mount["挂载日志与Agent目录"]
Mount --> Env["注入环境变量<br/>JAVA_TOOL_OPTIONS/SKYWALKING_*"]
Env --> Health["健康检查配置"]
Health --> Run["启动Java应用"]
Run --> Observe["日志与链路观测"]

图表来源

章节来源

业务模块服务(yudao-*-biz)

  • 编排策略
    • 统一使用主机网络模式,便于与网关与中间件直连。
    • SkyWalking Agent注入与网关一致,确保链路完整。
    • 健康检查:不同模块端口不同,需按模块配置独立探测。
    • 依赖顺序:通过depends_on与service_healthy形成启动依赖链。
  • Dockerfile构建策略
    • 统一基础镜像openjdk:17.0.2-oraclelinux8,确保运行时一致性。
    • 暴露端口与JVM参数按模块实际需求调整。
    • SkyWalking版本与插件:可参考网关的skywalking版本与插件移动方式。

Mermaid Diagram Code:

sequenceDiagram
participant Compose as "docker-compose"
participant Biz as "业务模块容器"
participant Nacos as "Nacos"
participant Kafka as "Kafka"
Compose->>Biz : 启动容器(主机网络)
Biz->>Nacos : 注册服务/拉取配置
Biz->>Biz : 健康检查(HTTP)
Biz->>Kafka : 消费/生产消息
Biz-->>Compose : 健康状态上报

图表来源

章节来源

中间件服务(Kafka与Canal)

  • Kafka
    • 使用Bitnami Kafka镜像,配置KRaft模式与SASL认证。
    • 监听器与对外地址分离,支持控制器与Broker间通信。
    • 数据与日志目录挂载至宿主机,便于运维与备份。
    • 提供Kafdrop UI用于可视化管理。
  • Canal
    • 连接MySQL,配置实例地址、用户名密码、字符集与TSDB开关。
    • 支持动态Topic与分区配置(示例注释),便于按表粒度路由。
    • 数据与配置目录挂载,便于持久化与调试。

Mermaid Diagram Code:

graph LR
MYSQL["MySQL"] --> CANAL["Canal"]
CANAL --> KAFKA["Kafka"]
KAFKA --> CONSUMER["业务消费者(各biz模块)"]
KAFDROP["Kafdrop UI"] --> KAFKA

图表来源

章节来源

Dockerfile构建过程与多阶段优化

  • 基础镜像选择
    • 生产镜像:openjdk:17.0.2-oraclelinux8,稳定、体积适中。
    • SkyWalking探针镜像:apache/skywalking-java-agent:9.4.0-java17,便于集成探针插件。
  • 多阶段构建建议
    • 阶段1:使用Maven/Gradle构建产物,仅拷贝必要文件。
    • 阶段2:仅包含运行时依赖的基础镜像,减少攻击面。
    • 插件移动:将apm-spring-cloud-gateway-4.x-plugin与apm-trace-ignore-plugin移动至plugins目录,确保探针对应场景生效。
  • 镜像层级管理
    • 合理合并RUN指令,减少层数。
    • 将变动频繁的层(如依赖下载)置于较低层,有利于缓存命中。
  • 安全基线
    • 非root用户运行(若应用允许)。
    • 清理包管理器缓存与临时文件。
    • 固定镜像标签,避免使用latest。

章节来源

容器网络配置、数据卷与环境变量

  • 网络
    • 主机网络模式:network_mode: host,简化端口与服务发现。
    • 自定义网络:可选使用自定义bridge网络隔离业务与中间件。
  • 数据卷
    • 日志目录:/docker/yudao-cloud/logs,便于集中收集与落盘。
    • SkyWalking Agent:/data/skywalking/skywalking-agent,确保探针持久化。
  • 环境变量
    • 时区:TZ=Asia/Shanghai,统一应用时区。
    • SkyWalking:SW_AGENT_NAME、SW_AGENT_COLLECTOR_BACKEND_SERVICES、SW_AGENT_TRACE_IGNORE_PATH。
    • 配置中心:SPRING_CLOUD_NACOS_*(地址、命名空间、组、用户名/密码)。
    • 运行环境:SPRING_PROFILES_ACTIVE。
    • 中间件变量:Kafka与Canal的环境变量由各自compose文件管理。

章节来源

健康检查、重启策略与资源限制

  • 健康检查
    • 网关:对48080端口进行HTTP探测。
    • 业务模块:对各自端口进行HTTP探测,间隔与超时合理配置。
    • 建议:结合Spring Actuator或应用内置健康端点。
  • 重启策略
    • always:保证服务异常退出后自动恢复。
  • 资源限制
    • 建议:为每个容器设置memory限制与CPU配额,防止资源争抢。
    • JVM堆大小与容器内存保持合理比例,预留GC与系统开销。

章节来源

日志收集、调试技巧与故障排查

  • 日志收集
    • 容器日志:通过挂载日志目录到宿主机,结合集中式日志系统(如ELK/Fluentd)采集。
    • SkyWalking Agent日志:确保Agent目录挂载,避免容器重建导致丢失。
  • 调试技巧
    • 临时进入容器:docker exec -it <container> /bin/bash。
    • 端口连通性:使用nc或telnet验证与Nacos/Kafka/MySQL的连通。
    • 健康检查失败:查看容器日志与应用日志,确认端口与依赖服务状态。
  • 常见问题
    • 网关无法访问:检查主机网络模式与端口映射。
    • SkyWalking无链路:确认SW_AGENT_COLLECTOR_BACKEND_SERVICES与Agent挂载路径。
    • Kafka认证失败:核对SASL用户名/密码与监听器配置。

章节来源

SkyWalking Agent在Docker环境中的配置与使用

  • 注入方式
    • 通过JAVA_TOOL_OPTIONS或Dockerfile ENV注入Agent路径与参数。
    • 建议将Agent目录挂载到宿主机,避免容器重建丢失。
  • 关键参数
    • agent.name:服务名,便于区分模块。
    • collector.backend_service:SkyWalking OAP地址。
    • trace.ignore_path:忽略心跳与监控端点,降低噪音。
  • 插件启用
    • 将apm-spring-cloud-gateway-4.x-plugin与apm-trace-ignore-plugin移动到plugins目录,确保对应场景生效。
  • 版本匹配
    • Agent版本与JDK版本匹配,推荐使用官方提供的skywalking-java-agent镜像。

章节来源

依赖关系分析

  • 服务依赖
    • 业务模块之间存在启动依赖链:如yudao-report依赖yudao-infra健康,yudao-bpm依赖yudao-infra健康等。
  • 外部依赖
    • Nacos:注册与配置中心,所有服务均依赖。
    • Kafka:消息通道,承载各模块异步处理。
    • Canal:MySQL增量同步,驱动下游消费。

Mermaid Diagram Code:

graph TD
SYS["yudao-module-system-biz"] --> NACOS["Nacos"]
INF["yudao-module-infra-biz"] --> NACOS
REP["yudao-module-report-biz"] --> NACOS
BPM["yudao-module-bpm-biz"] --> NACOS
DEV["yudao-module-device-biz"] --> NACOS
PAY["yudao-module-pay-biz"] --> NACOS
MP["yudao-module-mp-biz"] --> NACOS
DEV --> CANAL["Canal"]
CANAL --> KAFKA["Kafka"]
KAFKA --> SYS
KAFKA --> INF
KAFKA --> REP
KAFKA --> BPM
KAFKA --> DEV
KAFKA --> PAY
KAFKA --> MP

图表来源

章节来源

性能考量

  • JVM与容器内存
    • 容器memory_limit与JVM -Xmx保持合理比例,避免OOM与频繁GC。
  • 端口与网络
    • 主机网络模式简化部署,但需关注端口冲突;必要时改用自定义bridge网络。
  • Kafka与Canal
    • 合理设置分区数与副本因子,避免单点瓶颈。
    • Canal过滤规则与动态Topic配置,提升路由效率。

[本节为通用指导,无需列出具体文件来源]

故障排查指南

  • 服务不可达
    • 检查主机网络模式与端口映射;确认防火墙放行。
  • 健康检查失败
    • 查看容器日志与应用日志;确认端口与依赖服务状态。
  • SkyWalking无数据
    • 核对collector地址、Agent挂载路径与插件启用。
  • Kafka认证失败
    • 核对SASL用户名/密码与监听器配置;确认客户端连接串。

章节来源

结论

本方案通过统一的docker-compose编排、标准化的Dockerfile构建与环境变量管理,实现了网关与业务模块的高效协同,配合Kafka与Canal中间件,满足异步解耦与增量同步需求。SkyWalking Agent的容器化集成提供了完整的链路观测能力。建议在生产环境中进一步完善资源限制、安全加固与合规检查,确保系统的稳定性与安全性。

[本节为总结性内容,无需列出具体文件来源]

附录

A. 构建与运行命令示例

  • 构建镜像与推送:参考构建脚本,逐模块构建并推送到私有仓库。
  • 运行容器:参考运行脚本,指定网络、端口映射与环境变量。

章节来源

B. 环境变量清单

  • 通用
    • TZ:时区
    • SPRING_PROFILES_ACTIVE:运行环境
    • SPRING_CLOUD_NACOS_*:注册与配置中心
    • SW_AGENT_*:SkyWalking探针
  • 中间件
    • Kafka:KAFKA_CFG_、KAFKA_CLIENT_、SASL配置
    • Canal:DB连接、过滤规则、TSDB开关

章节来源

C. 生产环境安全加固与合规检查清单

  • 镜像安全
    • 使用固定版本镜像,定期扫描漏洞。
    • 最小化镜像:移除不必要的软件与插件。
  • 运行安全
    • 非root用户运行(若应用兼容)。
    • 只读根文件系统与最小权限挂载。
  • 网络与访问控制
    • 使用自定义bridge网络隔离服务。
    • 限制容器间访问,启用网络安全策略。
  • 配置与密钥
    • 使用Secrets管理敏感配置,避免硬编码。
    • 定期轮换Nacos与Kafka的认证凭据。
  • 监控与审计
    • 启用容器与应用日志审计。
    • SkyWalking与指标监控告警联动。

[本节为通用指导,无需列出具体文件来源]

用户文档
AI 助手
Agent 列表
请选择一个 Agent 开始对话
AI 问答