如何在Linux上配置Docker Swarm容器编排平台?

来源:3D模型作者:缅甸程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《如何在Linux上配置Docker Swarm容器编排平台?》,敬请观看详情。把多台Linux服务器组成一个可统一调度的集群时,单靠Docker单机模式很难应对服务扩缩容和故障转移。Docker Swarm作为原生编排方案,用极轻量的控制平面降低了门槛。在Linux上初始化Swarm只需一条命令,但生产环境要考虑防火墙端口、节点角色划分与Overlay网络。本文说明从初始化管理节点到加入工作节点的完整步骤,并对比Swarm与手动部署在可用性上的差异,帮你避开证书信任和脑裂配置误区。

在Linux环境中搭建容器编排能力,不一定非要引入复杂的Kubernetes。Docker Swarm作为Docker原生的集群管理工具,能够以极小的运维负担把多台机器组织成一个虚拟资源池。下面以常见的Ubuntu与CentOS为例,说明从零开始配置Swarm集群的具体做法。

如何在Linux上配置Docker Swarm容器编排平台?

一、环境准备与端口开放

在真正初始化Swarm之前,必须保证各节点之间网络互通,且特定端口未被防火墙拦截。Swarm管理平面依赖TCP 2377进行集群通信,节点之间的Overlay网络使用UDP 4789,容器网络发现使用TCP/UDP 7946。如果遗漏这些端口,节点虽然能加入但服务无法跨主机联通。

以Ubuntu使用的UFW为例,需要在每个节点执行如下命令放通端口。CentOS则应改用firewalld的富规则或直接在iptables中放行。很多初学者只在管理节点开放端口,导致工作节点上的容器无法被调度,这是典型的配置盲区。

# Ubuntu节点开放Swarm所需端口
sudo ufw allow 2377/tcp
sudo ufw allow 7946/tcp
sudo ufw allow 7946/udp
sudo ufw allow 4789/udp
sudo ufw reload

二、初始化管理节点

选取一台性能相对稳定、网络可靠的Linux主机作为管理节点(Manager)。在这台机器上执行docker swarm init命令即可拉起内置的Raft一致性模块。该命令会输出一个包含令牌的docker swarm join指令,后续工作节点凭此令牌加入。

如果服务器拥有多块网卡,必须使用--advertise-addr指定对外通信的IP,否则Swarm可能绑定到内部网桥地址,使其他节点无法连接。下面的示例显式声明了广告地址为192.168.0.10。

# 在管理节点初始化Swarm并指定广告地址
docker swarm init --advertise-addr 192.168.0.10

# 命令成功后会打印类似如下加入命令
# docker swarm join --token SWMTKN-1-xxx 192.168.0.10:2377

初始化完成后,可通过docker node ls查看当前集群仅包含管理节点自身,状态应为Ready。此时控制平面已经具备高可用基础,但还没有真正的工作负载节点。

三、工作节点加入集群

在计划作为工作节点的Linux主机上,粘贴管理节点初始化时给出的join命令。该命令中的令牌是节点身份认证凭据,泄露可能导致未授权机器加入集群,因此不建议明文写入公用脚本。

若初始化时的令牌丢失,可在管理节点运行docker swarm join-token worker重新获取。加入成功后再次在管理节点执行docker node ls,就能看到新节点处于Active状态。

# 在工作节点执行(令牌为示例,请替换为实际值)
docker swarm join --token SWMTKN-1-0abc 192.168.0.10:2377

# 回到管理节点确认
docker node ls

四、部署服务与Overlay网络

Swarm使用服务(Service)概念而非直接运行容器。通过docker service create可以指定副本数、网络和端口映射。当服务跨多台主机时,Swarm会自动创建名为ingress的Overlay网络,实现外部访问的负载均衡。

下面的代码创建了一个Nginx服务,副本数为3,并将容器80端口映射到集群的8080端口。无论请求打到哪台节点,Swarm路由网格都会把流量转发到实际运行的容器。

# 创建跨节点Nginx服务
docker service create 
  --name web 
  --replicas 3 
  --publish published=8080,target=80 
  nginx:stable

# 查看服务分布
docker service ps web

如果业务需要自定义Overlay网络以便服务间通过名称互通,可先创建网络再挂载。注意自定义Overlay网络在Swarm外部无法直接被单机容器使用,这是与bridge网络的重要区别。

# 创建自定义Overlay网络
docker network create --driver overlay --attachable mynet

# 在服务中引用该网络
docker service create --name api --network mynet myapi:1.0

五、常见误区与维护建议

第一个常见误区是混淆<input>标签与函数调用,在Shell里把docker swarm init()当成命令输入,实际上init是子命令而非函数。第二个误区是只配置单管理节点,一旦该机宕机集群将无法变更调度,生产环境应配置3或5个奇数个管理节点以容忍故障。

日常维护中,可用docker node update --availability drain 节点名将节点置为维护状态,Swarm会把上面运行的任务迁移走。升级Docker版本时建议逐节点排空再操作,避免服务整体中断。

操作项推荐做法风险做法
管理节点数3或5个奇数仅1个
令牌管理保密存储于配置中心写公开脚本
节点维护先drain再升级直接关机
Swarm的优势在于几乎零额外组件,但它调度粒度与生态扩展不如Kubernetes。若业务规模扩大,可在此基础上平滑迁移至更重的编排系统。

通过上述步骤,你已经在Linux上完成了Docker Swarm的基础配置,并能够部署具备跨主机调度能力的容器服务。后续可结合监控与日志方案进一步完善生产集群。

Docker_Swarm容器编排Linux配置修改时间:2026-08-08 18:42:50

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。