docker swarm 组件详细讲解
以下是 Docker Swarm 核心组件的详细解析,涵盖 Node、Service、Task 等关键概念及其相互关系:
一、Docker Swarm 核心架构图
二、组件深度解析
1. 节点(Node)
| 类型 | 角色说明 | 关键特性 |
|---|---|---|
| Manager | 集群大脑 | - 运行 Raft 共识算法 维护集群状态 - 负责服务调度和API响应 - 推荐3/5/7个(奇数) |
| Worker | 任务执行者 | - 只运行容器任务 - 不能参与集群决策 - 可随时动态加入/退出 |
Manager 高可用原理:
2. 服务(Service)
定义:服务是 Swarm 的核心部署单元,声明了容器的 期望状态。
服务结构:
# docker-compose.yml 示例
services:
web:
image: nginx:alpine
deploy:
replicas: 3
resources:
limits:
cpus: "0.5"
memory: 256M
restart_policy:
condition: on-failure
服务类型:
| 类型 | 特点 | 适用场景 |
|---|---|---|
| Replicated | 固定副本数(默认) | Web服务、API等 |
| Global | 每个Worker节点运行1个副本 | 监控代理、日志收集器等 |
3. 任务(Task)
定义:服务的最小执行单元,1个Task对应1个容器实例。
任务生命周期:
关键字段:
docker service inspect --format='{{.Spec.TaskTemplate}}' web
# 输出示例:
{
"ContainerSpec": {
"Image": "nginx:alpine@sha256:...",
"Args": ["nginx", "-g", "daemon off;"]
},
"Resources": {
"Limits": {"NanoCPUs": 500000000, "MemoryBytes": 268435456}
}
}
4. 容器(Container)
与Task的关系:
-
Task 是 Swarm 的调度单元
-
Container 是 Task 的具体实现
-
1个Task对应1个Container(但Task失败后可能重建新Container)
三、组件交互流程
1. 服务创建过程
2. 服务扩缩容流程
docker service scale web=5
-
Manager 修改服务副本数
-
Scheduler 计算需要新增/删除的Task
-
Worker 执行容器启停操作
-
集群状态最终一致
四、关键数据结构
1. 服务定义(Service Spec)
type ServiceSpec struct {
Annotations Annotations
TaskTemplate TaskSpec // 任务模板
Mode ServiceMode // Replicated/Global
UpdateConfig *UpdateConfig // 更新策略
Networks []NetworkAttachmentConfig
EndpointSpec *EndpointSpec // 暴露端口
}
2. 任务状态(Task Status)
docker service ps web
输出字段说明:
| 字段 | 含义 |
|---|---|
| CURRENT STATE | Running/Preparing/Failed |
| ERROR | 失败原因(如"no suitable node") |
| DESIRED STATE | Shutdown/Running |
五、生产级配置示例
1. 完整服务定义
docker service create \
--name db \
--replicas 3 \
--network my-overlay \
--mount type=volume,source=dbdata,target=/var/lib/postgresql \
--constraint 'node.role==worker' \
--restart-condition on-failure \
--restart-delay 5s \
--update-parallelism 2 \
--update-delay 10s \
--limit-cpu 2 \
--limit-memory 1G \
-e POSTGRES_PASSWORD_FILE=/run/secrets/dbpass \
--secret dbpass \
postgres:14
2. 组件关系验证
# 查看服务详情
docker service inspect --pretty db
# 查看任务列表
docker service ps db
# 查看容器详情
docker inspect $(docker ps -q --filter name=db)
六、常见问题排查
1. Task 持续失败
# 查看失败Task日志
docker logs $(docker ps -aq --filter name=db --filter status=exited)
# 检查调度约束
docker service inspect --format='{{.Spec.TaskTemplate.Placement.Constraints}}' db
2. 服务网络不通
# 测试容器间通信
docker exec -it web.1.xxx ping db
# 检查网络配置
docker network inspect my-overlay
通过理解这些核心组件的设计原理和交互机制,可以更高效地管理和排查 Swarm 集群问题。实际应用中建议结合 docker service/logs/inspect 等命令深入分析组件状态。
郭慕荣博客园





浙公网安备 33010602011771号