Docker开发环境
引用文件
本文引用的文件
- deploy/docker/kafka/docker-compose.yml
- deploy/docker/canal/dk_canal_kafka/docker-compose.yml
- deploy/docker/canal/dk_canal_kafka/.env
- script/docker/docker-compose.yml
- deploy/docker/test/docker-build.md
- deploy/docker/test/docker-run.md
- deploy/docker/test/docker-run_local_ycs.md
- yudao-gateway/Dockerfile
- yudao-module-infra/yudao-module-infra-biz/Dockerfile
- yudao-module-system/yudao-module-system-biz/Dockerfile
- yudao-module-bpm/yudao-module-bpm-biz/Dockerfile
- yudao-module-device/yudao-module-device-biz/Dockerfile
- yudao-module-blacklist/yudao-module-blacklist-biz/Dockerfile
- .env
- datasource.yaml
目录
简介
本指南面向本地与开发环境的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:环境变量与数据库连接配置
章节来源
- deploy/docker/kafka/docker-compose.yml
- deploy/docker/canal/dk_canal_kafka/docker-compose.yml
- script/docker/docker-compose.yml
核心组件
- Kafka集群与UI:提供消息队列能力及可视化界面
- Canal:用于MySQL增量数据同步至Kafka
- Nacos(通过环境变量指向):服务注册与配置中心
- SkyWalking Agent:Java应用探针,用于链路追踪与性能监控
- 各业务模块biz服务:基于OpenJDK 17构建的Spring Cloud微服务镜像
章节来源
- deploy/docker/kafka/docker-compose.yml
- deploy/docker/canal/dk_canal_kafka/docker-compose.yml
- script/docker/docker-compose.yml
- .env
架构总览
下图展示了开发环境中常用组件的交互关系:Kafka作为消息中枢,Canal从MySQL捕获变更并写入Kafka;各微服务biz容器通过Nacos进行注册发现;SkyWalking Agent采集链 路数据;前端Web容器对外提供HTTP服务。
图表来源
- deploy/docker/kafka/docker-compose.yml
- deploy/docker/canal/dk_canal_kafka/docker-compose.yml
- script/docker/docker-compose.yml
- .env
详细组件分析
Kafka集群与Kafdrop编排
- 版本与镜像:使用Bitnami Kafka 3.7.0
- 端口映射:外部访问9092、控制器通信9093、Broker内部通信9094
- 安全与认证:启用SASL PLAIN,配置客户端用户与密码
- 存储:挂载数据与日志目录
- 网络:自定义桥接网络,支持容器内解析宿主机IP
- UI:Kafdrop提供Web控制台,连接指定Broker地址
图表来源
章节来源
Canal到Kafka编排
- 版本与镜像:canal/canal-server:v1.1.8-alpha-3
- 环境变量:MySQL地址、账号、密码、字符集、TSDB开关、GTID开关
- 网络:加入自定义网络
- 端口映射:默认暴露11111(可由环境变量覆盖)
- 卷挂载:日志目录、配置文件目录
图表来源
章节来源
微服务biz容器编排(主机网络模式)
- 网络模式:host(便于与宿主服务互通)
- 健康检查:针对部分服务配置了健康检查命令
- 依赖顺序:通过depends_on与健康检查实现启动顺序控制
- SkyWalking :统一注入Agent,配置采集后端地址与忽略路径
- 日志与探针:挂载SkyWalking Agent目录与日志目录
图表来源
章节来源
Dockerfile编写与多阶段构建要点
- 基础镜像:统一使用OpenJDK 17(oraclelinux8)
- 工作目录:为每个服务创建独立工作目录
- 资源限制:通过EXPOSE声明端口,ENV设置时区与JVM参数
- 启动方式:使用java -jar启动,结合JAVA_OPTS进行内存调优
- 多阶段构建建议:可拆分为构建阶段(如Maven/Gradle打包)与运行阶段(仅包含JRE),以减小镜像体积
图表来源
- yudao-gateway/Dockerfile
- yudao-module-infra/yudao-module-infra-biz/Dockerfile
- yudao-module-system/yudao-module-system-biz/Dockerfile
- yudao-module-bpm/yudao-module-bpm-biz/Dockerfile
- yudao-module-device/yudao-module-device-biz/Dockerfile
- yudao-module-blacklist/yudao-module-blacklist-biz/Dockerfile
章节来源
- yudao-gateway/Dockerfile
- yudao-module-infra/yudao-module-infra-biz/Dockerfile
- yudao-module-system/yudao-module-system-biz/Dockerfile
- yudao-module-bpm/yudao-module-bpm-biz/Dockerfile
- yudao-module-device/yudao-module-device-biz/Dockerfile
- yudao-module-blacklist/yudao-module-blacklist-biz/Dockerfile
环境变量与数据库配置
- Nacos相关:命名空间、分组、服务地址、用户名/密码、发现IP与端口
- SkyWalking:采集后端地址
- 数据库:MySQL连接URL、用户名、密码、Druid连接池参数
章节来源
依赖关系分析
- 服务发现与配置:各biz服务依赖Nacos(通过环境变量配置)
- 链路追踪:统一通过SkyWalking Agent采集
- 消息通路:Canal将数据库变更写入Kafka,供下游消费
- 网络互通:Kafka/Kafdrop/Canal均处于自定义桥接网络,容器间可按服务名互访
图表来源
- script/docker/docker-compose.yml
- deploy/docker/kafka/docker-compose.yml
- deploy/docker/canal/dk_canal_kafka/docker-compose.yml
章节来源
- script/docker/docker-compose.yml
- deploy/docker/kafka/docker-compose.yml
- deploy/docker/canal/dk_canal_kafka/docker-compose.yml
性能考虑
- JVM内存:通过ENV设置初始与最大堆大小,结合实际负载调整
- 端口与网络:host模式简化网络但可能带来端口冲突,建议在开发机上谨慎使用;生产建议使用自定义桥接网络并显式端口映射
- Kafka分区与副本:根据吞吐量与可用性需求调整分区数与副本因子
- Canal资源:通过mem_limit限制容器内存,避免过度占用宿主资源
- SkyWalking Agent:合理配置 忽略路径与采样策略,降低对业务的影响
[本节为通用指导,无需列出具体文件来源]
故障排查指南
- 容器无法启动
- 查看容器日志:docker logs -f <容器名>
- 检查端口占用:确认宿主机端口未被占用
- 校验环境变量:确认Nacos地址、命名空间、用户名密码正确
- 服务注册失败
- 确认Nacos可达性与鉴权信息
- 检查服务端口是否正确暴露
- Kafka无法连接
- 校验Kafka监听器与广告地址配置
- 确认SASL认证参数与客户端用户一致
- Canal无法写入Kafka
- 校验MySQL连接信息与binlog配置
- 检查Kafka连通性与主题权限
- SkyWalking无数据
- 校验Agent挂载路径与采集后端地址
- 检查忽略路径配置是否过宽
章节来源
- deploy/docker/test/docker-run.md
- deploy/docker/test/docker-run_local_ycs.md
- script/docker/docker-compose.yml
结论
通过上述编排与配置,可在本地快速搭建包含消息队列、数据同步、服务注册与配置、链路追踪的完整开发环境。建议优先采用自定义桥接网络与显式端口映射,配合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采集后端
章节来源
- deploy/docker/kafka/docker-compose.yml
- deploy/docker/canal/dk_canal_kafka/docker-compose.yml
- script/docker/docker-compose.yml
镜像构建与推送流程
- 构建:在各模块biz目录执行docker build生成镜像
- 推送:推送到私有仓库(示例使用192.168.1.87:8005/ik-v2/...)
- 运行:可选择docker run或docker-compose两种方式
章节来源
- deploy/docker/test/docker-build.md
- deploy/docker/test/docker-run.md
- deploy/docker/test/docker-run_local_ycs.md
容器管理与维护
- 日志查看:docker logs -f <容器名>
- 健康检查:通过healthcheck与depends_on实现有序启动
- 监控:SkyWalking Agent采集链路数据;Kafdrop监控Kafka主题
- 故障排查:核对环境变量、端口映射、网络连通性与权限配置
章节来源
本地开发网络配置
- 自定义桥接网络:确保容器间可通过服务名互访
- 主机网络模式:host模式可简化端口映射,但需注意端口冲 突
- DNS与hosts:必要时通过extra_hosts或hosts文件解析域名
章节来源