跳到主要内容

Docker开发环境

目录

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

简介

本指南面向本地与开发环境的Docker化部署,涵盖Docker Desktop安装与基础配置、Docker Engine设置、资源分配与网络配置;提供完整的docker-compose.yml配置说明(镜像版本、端口映射、卷挂载、环境变量);给出数据库、缓存、消息队列、注册中心等基础设施的容器化编排方案;说明Docker镜像构建与推送流程(含Dockerfile编写要点与多阶段构建思路)、容器管理与维护(日志、监控、故障排查),以及本地开发网络配置以确保服务间通信。

项目结构

仓库中与Docker开发环境直接相关的文件主要分布在以下位置:

  • deploy/docker:生产级或演示级的编排样例(Kafka、Canal)
  • deploy/docker/test:手动构建与运行的脚本样例
  • script/docker:基于主机网络模式的微服务编排样例
  • 各模块biz工程下的Dockerfile:服务镜像构建基线
  • .env与datasource.yaml:环境变量与数据库连接配置

Mermaid Diagram Code:

graph TB
A["根目录"] --> B["deploy/docker/kafka"]
A --> C["deploy/docker/canal/dk_canal_kafka"]
A --> D["script/docker"]
A --> E["deploy/docker/test"]
A --> F["各模块biz/Dockerfile"]
A --> G[".env"]
A --> H["datasource.yaml"]

章节来源

核心组件

  • Kafka集群与UI:提供消息队列能力及可视化界面
  • Canal:用于MySQL增量数据同步至Kafka
  • Nacos(通过环境变量指向):服务注册与配置中心
  • SkyWalking Agent:Java应用探针,用于链路追踪与性能监控
  • 各业务模块biz服务:基于OpenJDK 17构建的Spring Cloud微服务镜像

章节来源

架构总览

下图展示了开发环境中常用组件的交互关系:Kafka作为消息中枢,Canal从MySQL捕获变更并写入Kafka;各微服务biz容器通过Nacos进行注册发现;SkyWalking Agent采集链路数据;前端Web容器对外提供HTTP服务。

Mermaid Diagram Code:

graph TB
subgraph "开发环境"
MYSQL["MySQL"]
CANAL["Canal"]
KAFKA["Kafka 集群"]
KDROP["Kafdrop UI"]
NACOS["Nacos(注册与配置)"]
SKYWALK["SkyWalking Agent"]
GW["网关(yudao-gateway)"]
SYS["系统(yudao-module-system-biz)"]
INFRA["基础(yudao-module-infra-biz)"]
BPM["流程(yudao-module-bpm-biz)"]
DEV["设备(yudao-module-device-biz)"]
BLK["黑名单(yudao-module-blacklist-biz)"]
WEB["前端Web"]
end
MYSQL --> CANAL --> KAFKA --> KDROP
GW --> NACOS
SYS --> NACOS
INFRA --> NACOS
BPM --> NACOS
DEV --> NACOS
BLK --> NACOS
GW --> SKYWALK
SYS --> SKYWALK
INFRA --> SKYWALK
BPM --> SKYWALK
DEV --> SKYWALK
BLK --> SKYWALK
WEB --> GW

图表来源

详细组件分析

Kafka集群与Kafdrop编排

  • 版本与镜像:使用Bitnami Kafka 3.7.0
  • 端口映射:外部访问9092、控制器通信9093、Broker内部通信9094
  • 安全与认证:启用SASL PLAIN,配置客户端用户与密码
  • 存储:挂载数据与日志目录
  • 网络:自定义桥接网络,支持容器内解析宿主机IP
  • UI:Kafdrop提供Web控制台,连接指定Broker地址

Mermaid Diagram Code:

sequenceDiagram
participant Dev as "开发者"
participant Compose as "docker-compose"
participant Kafka as "Kafka Broker"
participant KDrop as "Kafdrop UI"
Dev->>Compose : 启动编排
Compose->>Kafka : 拉起Kafka容器
Compose->>KDrop : 拉起Kafdrop容器
KDrop->>Kafka : 通过Broker地址建立连接
Dev-->>KDrop : 打开浏览器访问UI

图表来源

章节来源

Canal到Kafka编排

  • 版本与镜像:canal/canal-server:v1.1.8-alpha-3
  • 环境变量:MySQL地址、账号、密码、字符集、TSDB开关、GTID开关
  • 网络:加入自定义网络
  • 端口映射:默认暴露11111(可由环境变量覆盖)
  • 卷挂载:日志目录、配置文件目录

Mermaid Diagram Code:

flowchart TD
Start(["启动Canal"]) --> LoadEnv["加载环境变量<br/>MySQL地址/凭据等"]
LoadEnv --> ConnectDB["连接MySQL实例"]
ConnectDB --> Watch["监听binlog变更"]
Watch --> Produce["写入Kafka主题"]
Produce --> End(["完成"])

图表来源

章节来源

微服务biz容器编排(主机网络模式)

  • 网络模式:host(便于与宿主服务互通)
  • 健康检查:针对部分服务配置了健康检查命令
  • 依赖顺序:通过depends_on与健康检查实现启动顺序控制
  • SkyWalking:统一注入Agent,配置采集后端地址与忽略路径
  • 日志与探针:挂载SkyWalking Agent目录与日志目录

Mermaid Diagram Code:

sequenceDiagram
participant Compose as "docker-compose"
participant Host as "宿主机网络"
participant Nacos as "Nacos"
participant SkyW as "SkyWalking Agent"
participant Svc as "各biz服务"
Compose->>Host : 以host模式启动
Compose->>Svc : 传递环境变量(Nacos地址/命名空间)
Svc->>Nacos : 注册与拉取配置
Svc->>SkyW : 加载Agent并上报
Svc-->>Host : 暴露服务端口

图表来源

章节来源

Dockerfile编写与多阶段构建要点

  • 基础镜像:统一使用OpenJDK 17(oraclelinux8)
  • 工作目录:为每个服务创建独立工作目录
  • 资源限制:通过EXPOSE声明端口,ENV设置时区与JVM参数
  • 启动方式:使用java -jar启动,结合JAVA_OPTS进行内存调优
  • 多阶段构建建议:可拆分为构建阶段(如Maven/Gradle打包)与运行阶段(仅包含JRE),以减小镜像体积

Mermaid Diagram Code:

flowchart TD
Build["构建阶段<br/>编译/打包产物"] --> Runtime["运行阶段<br/>仅JRE+产物"]
Runtime --> Image["最终镜像"]

图表来源

章节来源

环境变量与数据库配置

  • Nacos相关:命名空间、分组、服务地址、用户名/密码、发现IP与端口
  • SkyWalking:采集后端地址
  • 数据库:MySQL连接URL、用户名、密码、Druid连接池参数

章节来源

依赖关系分析

  • 服务发现与配置:各biz服务依赖Nacos(通过环境变量配置)
  • 链路追踪:统一通过SkyWalking Agent采集
  • 消息通路:Canal将数据库变更写入Kafka,供下游消费
  • 网络互通:Kafka/Kafdrop/Canal均处于自定义桥接网络,容器间可按服务名互访

Mermaid Diagram Code:

graph LR
Nacos["Nacos(注册与配置)"] --> Biz["各biz服务"]
SkyW["SkyWalking Agent"] --> Biz
Canal["Canal"] --> Kafka["Kafka"]
Biz --> Kafka
Web["前端Web"] --> Gateway["网关"]
Gateway --> Biz

图表来源

章节来源

性能考虑

  • JVM内存:通过ENV设置初始与最大堆大小,结合实际负载调整
  • 端口与网络:host模式简化网络但可能带来端口冲突,建议在开发机上谨慎使用;生产建议使用自定义桥接网络并显式端口映射
  • Kafka分区与副本:根据吞吐量与可用性需求调整分区数与副本因子
  • Canal资源:通过mem_limit限制容器内存,避免过度占用宿主资源
  • SkyWalking Agent:合理配置忽略路径与采样策略,降低对业务的影响

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

故障排查指南

  • 容器无法启动
    • 查看容器日志:docker logs -f <容器名>
    • 检查端口占用:确认宿主机端口未被占用
    • 校验环境变量:确认Nacos地址、命名空间、用户名密码正确
  • 服务注册失败
    • 确认Nacos可达性与鉴权信息
    • 检查服务端口是否正确暴露
  • Kafka无法连接
    • 校验Kafka监听器与广告地址配置
    • 确认SASL认证参数与客户端用户一致
  • Canal无法写入Kafka
    • 校验MySQL连接信息与binlog配置
    • 检查Kafka连通性与主题权限
  • SkyWalking无数据
    • 校验Agent挂载路径与采集后端地址
    • 检查忽略路径配置是否过宽

章节来源

结论

通过上述编排与配置,可在本地快速搭建包含消息队列、数据同步、服务注册与配置、链路追踪的完整开发环境。建议优先采用自定义桥接网络与显式端口映射,配合SkyWalking Agent与Kafdrop提升可观测性;在镜像层面遵循多阶段构建与最小化原则,持续优化启动速度与资源占用。

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

附录

Docker Desktop安装与基础配置

  • 安装:从官方渠道下载并安装Docker Desktop
  • Docker Engine设置:启用WSL2后端(Windows)或Linux后端(Linux)
  • 资源分配:为Docker Desktop分配足够的CPU与内存,避免容器频繁OOM
  • 网络配置:使用自定义桥接网络,避免host模式带来的端口冲突风险

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

docker-compose.yml配置清单

  • 镜像版本:Kafka使用bitnami/kafka:3.7.0;Canal使用canal/canal-server:v1.1.8-alpha-3
  • 端口映射:Kafka外部9092、控制器9093、Broker内部9094;Canal默认11111
  • 卷挂载:Kafka数据与日志目录;Canal日志与配置目录
  • 环境变量:Kafka安全协议与SASL认证;Canal数据库连接与字符集;Nacos地址与命名空间;SkyWalking采集后端

章节来源

镜像构建与推送流程

  • 构建:在各模块biz目录执行docker build生成镜像
  • 推送:推送到私有仓库(示例使用192.168.1.87:8005/ik-v2/...)
  • 运行:可选择docker run或docker-compose两种方式

章节来源

容器管理与维护

  • 日志查看:docker logs -f <容器名>
  • 健康检查:通过healthcheck与depends_on实现有序启动
  • 监控:SkyWalking Agent采集链路数据;Kafdrop监控Kafka主题
  • 故障排查:核对环境变量、端口映射、网络连通性与权限配置

章节来源

本地开发网络配置

  • 自定义桥接网络:确保容器间可通过服务名互访
  • 主机网络模式:host模式可简化端口映射,但需注意端口冲突
  • DNS与hosts:必要时通过extra_hosts或hosts文件解析域名

章节来源

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