Docker搭建分布式系统的核心是可靠通信、协同工作与按需伸缩,而非堆机器;重点在于网络打通(自定义bridge或overlay)、服务编排(Compose或Swarm)及资源与安全管控(限制CPU/内存、非root运行、配置外置)。

分布式系统用 Docker 搭建,核心不是堆机器,而是让多个容器能可靠通信、协同工作、按需伸缩。配置重点在三块:网络打通、服务编排、资源与安全管控。
容器网络必须独立且可控
Docker 默认 bridge 网络只支持单机内互通,分布式场景下必须自定义网络或选用跨主机方案:
- 单机多服务(如微服务本地开发):用
docker network create mynet创建自定义 bridge 网络,所有容器启动时加--network mynet,互相通过服务名直接访问(如curl http://db:5432) - 多机部署(真实分布式):启用 Docker Swarm 或用 overlay 网络。Swarm 初始化后自动创建 ingress 和 overlay 网络,服务发布即跨节点可达
- 避免用 host 模式——虽性能好但端口易冲突,且失去容器隔离优势
用 Compose 或 Swarm 做声明式编排
手动 run 一堆容器不可维护,必须靠配置文件统一管理:
- 开发/测试阶段优先用 Docker Compose:一个
docker-compose.yml定义 Web、API、DB、Cache 等服务,支持环境变量、卷挂载、健康检查、重启策略 - 生产环境推荐 Docker Swarm:把多台物理机/云服务器加入集群,用
docker service create部署服务,自动负载均衡、滚动更新、故障自愈 - 不建议直接裸用 Kubernetes 入门——学习成本高,小规模分布式用 Swarm 更轻量、更贴近 Docker 原生逻辑
资源限制和基础安全不能省
分布式意味着多个服务共存,不设限容易互相挤占:
- 内存和 CPU 必须约束:Compose 中写
deploy.resources.limits,Swarm 中用--limit-memory和--limit-cpu,防止单个服务吃光整机资源 - 容器默认以 root 运行是风险点:Dockerfile 里加
USER 1001,或运行时用--user 1001:1001,降低提权攻击面 - 敏感配置(密码、密钥)别硬编码进镜像:用 Swarm secrets 或 Compose 的
env_file/configs注入,避免泄露到镜像层
数据持久化要分清场景
分布式服务的状态管理很关键,但并非所有数据都要存外置:
- 数据库、消息队列等有状态服务:必须挂载命名卷(
volumes:)或绑定宿主机目录,确保容器重建后数据不丢 - 日志、临时缓存类数据:可用 tmpfs 卷(内存存储),速度快且重启即清,适合无状态中间件
- 服务间共享配置:用 Consul、etcd 等外部配置中心,或通过 Swarm configs 分发,避免每个容器都打包一份


















