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: nginx
    ports:
      - "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。


### Docker Swarm 容器编排使用指南 #### 启动并初始化 Swarm 模式集群 为了启动一个 Swarm 集群,需要先确保 Docker 引擎版本不低于 1.12.0[^1]。通过执行命令 `docker swarm init` 来初始化一个新的 Swarm 群集,在此之后可以查看节点状态。 ```bash $ docker swarm init --advertise-addr <MANAGER-IP> Swarm initialized: current node (dxn1zf8p6m9vrzv4jk51g7bwi) is now a manager. ``` #### 添加工作节点到 Swarm 中 一旦有了管理节点,就可以向其中加入工作者节点了。这一步骤可以通过获取上一操作返回的令牌来完成,或者利用 `docker swarm join-token worker` 获取最新的令牌信息,并将其提供给目标机器上的 Docker Daemon: ```bash $ docker swarm join --token SWMTKN-1-... 192.168.1.100:2377 This node joined a swarm as a worker. ``` #### 创建和部署服务栈 创建好 Swarm 集群后,便能够定义应用程序的服务描述文件(通常是 YAML 格式的 Compose 文件)。接着借助于 `docker stack deploy` 命令依据该配置文件中的设定发布整个应用堆栈[^2]。 ```yaml version: '3' services: web: image: nginx ports: - "80:80" redis: image: redis ``` ```bash $ docker stack deploy -c docker-compose.yml mystack Creating network mystack_default Creating service mystack_web Creating service mystack_redis ``` #### 查看运行状况和服务列表 要监控当前 Swarm 上正在运作的服务以及它们的状态,可运用如下指令: ```bash $ docker service ls ID NAME MODE REPLICAS IMAGE PORTS qjdvkrrhbxr mystack_web replicated 1/1 nginx:latest *:80->80/tcp yf0w3u5tqozi mystack_redis replicated 1/1 redis:latest ``` #### 更新现有服务或删除不再需要的服务 当有变更需求时,比如调整副本数量或是替换镜像标签,则只需修改对应的 compose 文件再重复一次 `docker stack deploy` 的过程即可实现平滑升级;而移除某个特定的应用则可通过指定其名称调用 `docker stack rm` 实现。 ```bash $ docker stack rm mystack Removing service mystack_web Removing service mystack_redis Removing network mystack_default ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思静鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值