🗣 Wd提问: 云服务器swarm
🤖 Ai回答: 我们来全面地讲解一下在云服务器上使用 Docker Swarm。
Docker Swarm 是 Docker 官方提供的容器编排工具,它允许你将一组 Docker 主机(包括云服务器)聚合成一个虚拟的、强大的“Docker 主机”,从而轻松地部署和管理多容器的应用程序。
核心概念
1、 节点:
* 管理节点:负责集群的管理工作(分发任务、维护集群状态、服务发现、负载均衡等)。一个集群至少有一个管理节点,建议有多个(奇数个,如 3 个)以实现高可用。
* 工作节点:接收并执行从管理节点分配的任务(运行容器)。工作节点可以动态增加或减少。
2、 服务:这是 Swarm 的核心概念。它定义了要在工作节点上执行的任务,例如运行一个特定镜像的多少个副本、使用哪个端口、需要多少 CPU/内存、如何更新等。
3、 任务:一个任务是 Swarm 中调度的最小单元,它承载着一个 Docker 容器及其运行的命令。
4、 栈:一组相互关联的服务,通常用一个 `docker-compose.yml` 文件来定义。这非常适合部署由多个服务(如 Web 前端、后端 API、数据库)组成的完整应用。
在云服务器上搭建 Swarm 集群的步骤
假设你有三台云服务器(例如来自阿里云、腾讯云、AWS 等),它们的内网 IP 是互通的。
| 主机名 | IP 地址 (公网) | IP 地址 (内网) | 角色 |
| : | : | : | : |
| manager1 | `x.x.x.1` | `192.168.1.1` | 管理节点 |
| worker1 | `x.x.x.2` | `192.168.1.2` | 工作节点 |
| worker2 | `x.x.x.3` | `192.168.1.3` | 工作节点 |
重要前提:
* 所有服务器上均已安装 Docker。
* 确保各云服务器的安全组/防火墙开放以下端口:
* 2377/tcp:用于集群管理通信。
* 7946/tcp & udp:用于容器网络发现。
* 4789/udp:用于 Overlay 网络流量。
步骤 1:初始化 Swarm(在管理节点上执行)
在 `manager1` 上运行:
bash
建议使用内网IP进行初始化,通信更快更安全
docker swarm init advertise-addr 192.168.1.1
命令执行成功后,你会看到类似下面的输出,其中包含一个用于将工作节点加入集群的令牌命令:
bash
Swarm initialized: current node (abcd...xyz1) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join token SWMTKN-1-...very-long-token...-xxx 192.168.1.1:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
步骤 2:将工作节点加入集群(在工作节点上执行)
分别在 `worker1` 和 `worker2` 上,运行上一步输出的命令:
bash
docker swarm join token SWMTKN-1-...very-long-token...-xxx 192.168.1.1:2377
如果成功,你会看到:`This node joined a swarm as a worker.`
步骤 3:验证集群状态(回到管理节点)
在 `manager1` 上运行:
bash
docker node ls
你将看到类似下面的列表,显示所有节点的 ID、主机名、状态和角色:
bash
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
abcd...xyz1 * manager1 Ready Active Leader 20.10.7
efgh...xyz2 worker1 Ready Active 20.10.7
ijkl...xyz3 worker2 Ready Active 20.10.7
至此,一个基础的 Swarm 集群已经搭建完成。
部署服务示例
示例 1:部署一个 Nginx 服务
在 `manager1` 上运行:
bash
创建一个名为 nginx-web 的服务,使用 nginx:alpine 镜像,并映射到主机的 80 端口
docker service create name nginx-web -p 80:80 replicas 3 nginx:alpine
* `replicas 3`:指定这个服务要运行 3 个副本(任务)。Swarm 会智能地将这些容器调度到不同的工作节点上。
检查服务状态:
bash
docker service ls
docker service ps nginx-web 查看每个副本运行在哪个节点上
现在,你可以访问任何一个集群节点的公网 IP 的 80 端口,都会看到 Nginx 的欢迎页面。Swarm 的内置负载均衡器(Ingress 网络)会自动将你的请求路由到某个健康的容器上。
示例 2:使用 Docker Compose 文件部署栈(推荐)
创建一个 `docker-compose.yml` 文件,定义一个更复杂的应用,比如一个带 Web 前端和 Redis 后端的应用。
yaml
docker-compose.yml
version: '3.8'
services:
web:
image: your-web-app-image:latest
ports:
8080:5000
environment:
REDIS_HOST=redis
deploy:
replicas: 3
restart_policy:
condition: on-failure
update_config:
parallelism: 2
delay: 10s
redis:
image: redis:alpine
deploy:
replicas: 1
placement:
constraints: [node.role == manager] 限制 Redis 只运行在管理节点上
在 `manager1` 上部署这个栈:
bash
部署栈,命名为 myapp
docker stack deploy -c docker-compose.yml myapp
查看栈内服务
docker stack services myapp
查看栈内所有任务
docker stack ps myapp
云服务器上的最佳实践与注意事项
1、 使用内网通信:在 `swarm init` 和 `swarm join` 时,务必使用云服务器的内网 IP (`advertise-addr`)。这能保证集群控制层面的通信高效、安全且免费(云服务商内网流量通常免费)。
2、 安全组/防火墙配置:这是最常见的坑。务必为所有节点开放前述的三个核心端口(2377, 7946, 4789)。
3、 数据持久化:
* 容器本身是无状态的。对于数据库或需要保存数据的服务,必须使用卷。
* 在云环境中,最佳实践是使用云提供商提供的块存储服务(如 AWS EBS、阿里云云盘、腾讯云 CBS),并将其挂载到 Docker 卷上。
* 示例:创建一个 NFS 共享存储或使用 `docker volume create` 配合云存储驱动。
4、 高可用管理节点:生产环境至少需要 3 个管理节点,以防止“脑裂”问题。你可以通过 `docker swarm join-token manager` 获取命令,将其他节点提升为管理节点。
5、 密钥管理:对于密码、API 密钥等敏感信息,使用 Docker Secrets 管理,而不是直接写在 Compose 文件或环境变量里。
6、 日志与监控:集中收集所有节点和容器的日志(如 ELK Stack)。使用 `docker service logs` 或第三方工具(如 Prometheus + Grafana)来监控集群健康状态。
7、 滚动更新:利用 `deploy` 配置中的 `update_config` 来实现零停机更新。Swarm 会逐步停止旧容器并启动新容器,确保服务始终可用。
总结
在云服务器上使用 Docker Swarm 是一种轻量级、原生且高效的容器编排方案。它学习曲线平缓,特别适合中小型项目、内部应用或作为向更复杂编排系统(如 Kubernetes)过渡的跳板。只要处理好网络、存储和安全组,它就能在云上提供强大的高可用和弹性伸缩能力。
📣 商家广告 :
👍
0
👎
IP地址: 78.190.207.211
搜索次数: 0
提问时间: 2025-11-02 16:41:34
🛒 域名购买 :
327.net.cn 797.net.cn uq.gs kxtf.cn pmmm.com.cn ousou.cn wddd.com.cn hc.gs 80.gs zhuang.net.cn
❓️ 热门提问 :
网络时钟服务器 ai数字人智慧机房做什么的 美国vps讨论 ck.ua域名 .org域名购买 国外服务器最好 重装云主机 机房托管服务合同 谷歌vps搭建教程 关键词搜索引擎培训 豌豆Ai站群搜索引擎系统
🌐 域名评估 :
dd.gz.cn byd.he.cn z.gz.cn tesla.ln.cn xphone.band rr.sc.cn xg.gs ee.ah.cn ww.fj.cn xjop.cn
⛏ 最新挖掘 :
凯里酸汤鱼 贵阳烤脑花 都匀毛尖茶 花溪牛肉粉 贵阳烤生蚝 贵阳烤豆腐 贵阳纸包鱼 贵阳特色菜
🖌 热门作画 :
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊 :
🔗 友情链接 :
租vps平台
提取文件
ai提问
🧰 站长工具 :Ai工具 whois查询 搜索
📢 温馨提示 :本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持 :本站由豌豆Ai 提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。