当前位置: 首页 > news >正文

Docker Swarm

Docker Swarm 是 Docker 原生的容器编排工具,可以把多台 Docker 主机组成一个集群(Swarm 集群),实现服务部署、负载均衡、高可用和滚动更新。

下面我会从基础到实战,带你全面理解 Docker Swarm


一、什么是 Docker Swarm?

Swarm 是 Docker 官方提供的容器编排系统,用于统一管理多台 Docker 主机,实现分布式服务部署与自动调度。

它的作用类似于 Kubernetes,但更轻量、易上手。


二、Swarm 的核心概念

概念说明
节点 Node组成 Swarm 的 Docker 主机,有两类:Manager / Worker
Manager 节点负责集群管理、服务调度和选举
Worker 节点执行容器任务(服务实例)
服务 Service类似 docker run 的升级版,可在多个节点运行
任务 Task服务的具体运行单元(即容器)
栈 Stack一组服务的集合(类似 docker-compose 项目)

三、搭建 Swarm 集群(实操)

假设你有三台服务器:

  • node1:Manager 节点
  • node2:Worker 节点
  • node3:Worker 节点

在 Manager 节点初始化 Swarm:

docker swarm init --advertise-addr <node1-IP>

输出示例:

docker swarm join --token SWMTKN-1-xxxxxxxxx <node1-IP>:2377

在其他 Worker 节点加入集群:

docker swarm join --token SWMTKN-1-xxxxxxx <node1-IP>:2377

查看节点列表(在 Manager 上执行):

docker node ls

四、Swarm 服务部署

创建服务(如 nginx):

docker service create \--name web \--replicas 3 \--publish 80:80 \nginx

说明:

  • --replicas 3:启动 3 个 nginx 容器
  • 自动分布到多个节点,具备负载均衡

查看服务状态:

docker service ls
docker service ps web

扩缩容服务:

docker service scale web=5

删除服务:

docker service rm web

五、使用 Stack 管理多个服务(类似 docker-compose)

  1. 写一个 docker-compose.yml 文件:
version: '3'
services:web:image: nginxports:- "80:80"redis:image: redis
  1. 部署为 Stack:
docker stack deploy -c docker-compose.yml mystack
  1. 查看:
docker stack ls
docker stack services mystack
docker stack ps mystack
  1. 删除:
docker stack rm mystack

六、Swarm 的内置优势

特性描述
自动负载均衡服务自动分配到不同节点
服务发现与 DNS容器通过服务名自动解析
服务自愈节点挂掉后自动重新调度容器
滚动更新可无停机部署更新
高可用支持多 Manager 热备(Raft 协议)
原生 Docker 支持无需额外组件,安装简单

七、Swarm vs Kubernetes

特性Docker SwarmKubernetes
安装与配置简单,一行命令即可较复杂,需安装多个组件
学习曲线平缓,Docker 原生语法陡峭,需学习 K8s 资源模型
生态兼容性限于 Docker 环境更通用,云原生生态支持广
高可用部署支持更强大(自带调度、伸缩策略等)
社区活跃度较少维护(已被 K8s 取代)活跃,是 CNCF 支持的主流平台

总结一句话

Docker Swarm 是轻量级、原生支持的容器编排方案,适合中小型项目、开发环境快速部署;如需更复杂调度策略或云原生集成,推荐用 Kubernetes。


http://www.lqws.cn/news/453475.html

相关文章:

  • 如何轻松地将音乐从 iPhone 传输到 Mac?
  • Element UI 表格中实现搜索关键字高亮的
  • 华为OD机考-亲子游戏-BFS(JAVA 2025B卷 200分)
  • OCCT基础类库介绍:Modeling Algorithm - Sewing
  • 如何正确处理音频数据:16位整数与32位浮点数
  • Agent轻松通-P3:分析我们的Agent
  • CppCon 2017 学习:Mocking Frameworks Considered
  • 您的元服务存在问题,不符合元服务UX设计规范
  • 从零开始:飞牛云NAS+Docker搭建WordPress全流程
  • (链表:哈希表 + 双向链表)146.LRU 缓存
  • XML在线格式化工具
  • MySQL基础多表查询
  • docker安装datax详细步骤
  • AUTOSAR实战教程--OS调试利器ORTI文件使用说明OSEK调试方法
  • OBCP第二章 OceanBase 存储引擎高级技术学习笔记
  • 63 网络交互的过程中目标设备的选择
  • PROFIBUS DP 转 EtherCAT 网关:冶金自动化高效协同的基石
  • 深入剖析HashMap与LinkedHashMap应用
  • 前端页面Javascript数组
  • python之使用cv2.matchTemplate识别缺口滑块验证码---实现最佳图像匹配
  • 主流测距技术深度解析:激光雷达、UWB、微波与视觉方案的全面对比
  • 今日行情明日机会——20250620
  • 响应式数据可视化大屏解决方案,重构工业交互体验
  • 【深度学习基础与概念】笔记(一)深度学习革命
  • 【Golang】go build 命令选项-ldflags用法
  • Spring @ModelAttribute注解全解析:数据绑定与模型管理
  • ceph 通过 crush rule 修改故障域
  • DataWhale-零基础络网爬虫技术(二er数据的解析与提取)
  • LeetCode热题100—— 169. 多数元素
  • leetcode 291. Word Pattern II和290. Word Pattern