Docker Compose是单机容器集群编排工具,本质通过YAML文件定义多服务依赖、网络、卷及环境变量,一键启动具备服务发现、负载均衡和节点通信能力的类集群环境。

单机上部署“容器集群环境”,本质是用一台物理机或虚拟机,通过 Docker 容器模拟多个服务节点协同工作的逻辑结构——它不是真正的分布式集群(无跨主机容错),但能完整复现集群架构下的服务发现、负载均衡、节点通信等关键行为。核心靠 Docker Compose 编排多容器,辅以合理网络与配置设计。
用 Docker Compose 启动多节点服务组
这是最常用、最可靠的方式。Docker Compose 允许你用一个 YAML 文件定义多个容器及其依赖关系、网络、卷和环境变量,实现“一键拉起类集群”:
- 每个服务(如 nacos01/nacos02/nacos03、zookeeper1/zookeeper2/zookeeper3)作为独立容器运行,监听不同宿主机端口或加入自定义桥接网络
- 通过
networks声明共用内部网络(如backend),让容器间用服务名直接通信(例如nacos01:8848) - 用
depends_on控制启动顺序,避免服务因依赖未就绪而失败 - 示例中 Nacos 三节点单机集群,就是靠
NACOS_SERVERS="nacos01:8848 nacos02:8848 nacos03:8848"环境变量 + 自定义网络实现节点互认
配置容器间可通信的自定义网络
默认的 bridge 网络不支持容器名解析,必须显式创建用户定义桥接网络:
- 执行
docker network create cluster-net创建网络 - 在
docker-compose.yml中指定:networks: [cluster-net] - 所有容器自动获得 DNS 解析能力:服务名即主机名(
mysql、redis、nacos01都可直接 ping 通) - 避免使用
host模式——它会绕过 Docker 网络栈,导致端口冲突且失去隔离性
模拟集群关键行为的配置要点
仅启动多个容器还不够,要让它们真正“像集群一样工作”,需关注以下细节:
-
唯一标识:每个节点需有固定身份(如
server.1、server.2),ZooKeeper 的myid文件、Nacos 的cluster.conf都依赖此 -
数据持久化:用
volumes挂载独立目录(如./zoo1/data:/data),防止容器重启后状态丢失 - 端口映射策略:对外暴露时用非重叠端口(如 2181/2182/2183),对内通信走服务名+默认端口(2181)
-
健康检查与重启策略:添加
healthcheck和restart: on-failure,提升本地集群稳定性
哪些场景适合单机容器集群
这不是生产高可用方案,而是高效验证与开发支撑工具:
- 本地功能验证:快速测试 Nacos 注册中心选主、ZooKeeper Watch 机制、Rancher 接入多 K8s 集群流程
- CI/CD 流水线中的集成测试:每次 PR 触发一个临时三节点 Nacos,跑完自动销毁
- 教学演示与架构沙盒:清晰展示服务发现、配置同步、心跳检测等抽象概念的具体表现
- 小团队预研环境:无需申请多台服务器,一台 8G 内存机器即可跑通全套微服务中间件链路


















