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:

bash 复制代码
docker swarm init --advertise-addr <node1-IP>

输出示例:

bash 复制代码
docker swarm join --token SWMTKN-1-xxxxxxxxx <node1-IP>:2377

在其他 Worker 节点加入集群:

bash 复制代码
docker swarm join --token SWMTKN-1-xxxxxxx <node1-IP>:2377

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

bash 复制代码
docker node ls

四、Swarm 服务部署

创建服务(如 nginx):

bash 复制代码
docker service create \
  --name web \
  --replicas 3 \
  --publish 80:80 \
  nginx

说明:

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

查看服务状态:

bash 复制代码
docker service ls
docker service ps web

扩缩容服务:

bash 复制代码
docker service scale web=5

删除服务:

bash 复制代码
docker service rm web

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

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

六、Swarm 的内置优势

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

七、Swarm vs Kubernetes

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

总结一句话

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


相关推荐
星恒随风10 分钟前
Linux 权限详解:从 rwx、chmod 到 umask、目录权限与粘滞位
linux·运维·服务器·笔记·学习
拳里剑气11 分钟前
Linux:进程间通信
linux·运维·数据库·进程
运维大师13 分钟前
【K8S 运维实战】31-Helm包管理
运维·算法·kubernetes
阳光九叶草LXGZXJ29 分钟前
达梦数据库-报错-12-[-7184]:对象定义[XXX]被修改,版本检查失败
linux·运维·服务器·数据库·sql·学习
AI大佬的小弟30 分钟前
私有化 Dify 应用开发(3):Docker 核心原理与零基础实战
运维·docker·容器技术·ai 应用开发·私有化 ai 部署·docker 教程·dify 运维
JXCY13S50538 分钟前
集群及lvs基础知识
运维·服务器
小此方39 分钟前
Re:Linux系统篇(四十九)线程篇 · 二:为什么现代操作系统选择分页式存储?分页如何解决物理内存碎片?分页结构如何演化到页表、页目录、MMU?
linux·运维·驱动开发
Huangjin007_1 小时前
【Linux 系统篇(十一)】基础开发工具(六) —— 版本控制器 Git
linux·运维·git
j7~2 小时前
【Linux】二十六.线程篇三《Linux多线程编程:线程控制、线程ID以及进程地址空间分布、线程局部存储__thread以及clone系统调用》---详解
linux·运维·服务器·开发语言·c++·多线程编辑·线程的控制
weixin_446260854 小时前
claude desktop对metasploitable3自动化渗透技能研究
运维·自动化