用 docker swarm 搭建 java 微服务集群的核心是将服务定义与节点调度交由 swarm 管理,通过标准镜像、声明式 service 创建、内置 dns 服务发现及统一日志实现可伸缩、自愈的微服务运行态。

用 Docker Swarm 搭建 Java 微服务简易集群,核心是把“服务定义”和“节点调度”交给 Swarm 管理,而不是手动启容器。重点不在复杂配置,而在让每个微服务变成可声明、可伸缩、可自愈的 Service。
Java 服务先打包成标准镜像
每个 Spring Boot(或 Micronaut/Quarkus)服务要能独立运行,且不依赖本地环境:
- 用
mvn clean package或./gradlew bootJar打出 fat-jar - Dockerfile 基于轻量基础镜像(如
eclipse/jetty:11-jre17或quay.io/quarkus/jvm),COPY jar 后直接 CMD 运行 - 避免在镜像里写死 IP 或端口,用
spring.profiles.active和环境变量控制配置 - 镜像 tag 建议带版本(如
order-service:v1.2),方便后续滚动更新
三节点 Swarm 集群快速初始化
不需要五台机器,三台干净的 Linux 主机(Docker Engine ≥ 24.0)就能跑出高可用雏形:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
- 在第一台执行:
docker swarm init --advertise-addr=本机IP,得到 manager token - 另两台分别运行该 token 的
docker swarm join --token SWMTKN-... 本机IP:2377 - 执行
docker node ls确认三个节点状态为 Ready,其中一个是 Leader - 默认所有节点都可调度(manager 也运行 task),如需分离角色,用
docker node update --role worker node-id
用 service create 直接部署微服务
跳过 docker-compose.yml,用一条命令把 Java 服务变成集群内可发现的服务:
docker service create --name user-service --replicas 2 -p 8081:8080 user-service:v1.0-
--replicas 2表示至少两个实例,Swarm 自动分发到不同节点;故障时自动重建 -
-p 8081:8080绑定宿主机端口,实际走的是 ingress 网络,外部访问任意节点 IP:8081 即可负载均衡 - 多个服务之间用服务名通信(如
http://order-service:8080/api),Swarm 内置 DNS 自动解析
服务间调用与基础可观测性
Java 微服务在 Swarm 里不靠注册中心也能互通,但需注意几点:
- 确保各服务监听
0.0.0.0:8080而非localhost:8080 - 跨服务 HTTP 调用直接用 service 名作 host(Docker DNS 默认启用),无需额外配置
- 查日志统一用
docker service logs user-service,比登录每台机器看文件快得多 - 扩容缩容只需
docker service scale user-service=3,秒级生效
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










