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

在 Ubuntu 上部署 Docker Swarm 集群(完整指南)

本文适用于 Ubuntu 20.04 / 22.04 LTS,手把手教你搭建一个高可用的 Docker Swarm 集群,包含 1 个管理节点和 2 个工作节点。

Docker Swarm 集群解析

核心概念与架构

Docker Swarm 是 Docker 官方提供的原生容器编排工具,可将多个 Docker 主机(物理服务器、虚拟机、云实例等)抽象为一个统一的虚拟主机,实现集群化管理和服务编排。其架构采用经典的“管理节点(Manager)-工作节点(Worker)”模式:

  1. 管理节点(Manager)
    • 职责:维护集群状态、调度任务、管理配置、负载均衡、故障检测与恢复。
    • 高可用性:支持多管理节点(建议奇数个,如3-5个),通过 Raft 共识算法保持状态同步,避免“脑裂”问题。
    • 安全性:内置 TLS 加密通信、节点认证、角色授权,支持自动密钥轮换。
  2. 工作节点(Worker)
    • 职责:执行管理节点分配的任务(如运行容器),通过代理(Agent)汇报任务状态。
    • 设计哲学:简单可靠,无需感知全局状态,专注于任务执行。

核心优势

  1. 极简操作体验
    • 原生支持:无需额外安装软件,Docker 1.12+ 版本内置 Swarm 功能,直接使用标准 Docker 命令管理集群。
    • 声明式服务模型:通过 Docker Compose 文件格式定义服务,支持滚动更新、扩缩容、健康检查等高级特性。
    • 服务发现:服务间通过服务名直接通信,无需关心节点位置。
  2. 高可用性与容错性
    • 自动故障转移:节点或容器故障时,自动在其他健康节点重启服务,确保业务连续性。
    • 多副本机制:通过设置服务副本数量(--replicas),确保服务在节点故障时快速恢复。
  3. 负载均衡与资源优化
    • 内置负载均衡:自动分配容器到不同节点,支持轮询、最小连接等策略。
    • 智能调度:综合考虑节点资源利用率、网络位置等因素,选择最佳节点运行容器。
  4. 安全性
    • 加密通信:所有节点间通信通过 TLS 加密,防止中间人攻击。
    • 网络隔离:支持 Overlay 网络,实现跨节点容器通信,同时隔离不同服务。

适用场景

  1. 中小规模集群
    • 适合需要快速搭建、简单管理的容器化应用,如 Web 服务、微服务架构。
    • 对比 Kubernetes(K8s),Swarm 更轻量,学习成本低,适合资源有限或团队熟悉 Docker 的场景。
  2. 边缘计算与物联网
    • 支持资源受限的设备(如树莓派),适合边缘节点分散、需要统一管理的场景。
  3. 开发与测试环境
    • 快速模拟生产环境,验证服务高可用性和负载均衡能力。

一、环境准备

1. 节点规划

角色主机名IP 地址
管理节点manager192.168.22.103
工作节点1worker1192.168.22.131
工作节点2worker2192.168.22.215

2. 基础配置(所有节点执行)

(1)设置主机名
sudo hostnamectl set-hostname manager   # 在 manager 节点
sudo hostnamectl set-hostname worker1   # 在 worker1 节点
sudo hostnamectl set-hostname worker2   # 在 worker2 节点
(2)配置 hosts 解析(所有节点)
cat << EOF | sudo tee /etc/hosts
127.0.0.1 localhost
192.168.22.103 manager
192.168.22.131 worker1
192.168.22.215 worker2
EOF
(3)关闭交换分区(Swarm 推荐)
sudo swapoff -a
# 永久关闭:注释掉 /etc/fstab 中的 swap 行
sudo sed -i '/ swap / s/^/#/' /etc/fstab
(4)允许转发(Docker 网络需要)
cat <<EOF | sudo tee /etc/sysctl.d/99-docker-swarm.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOFsudo sysctl --system

二、安装 Docker Engine(所有节点)

点击安装docker文章

三、初始化 Docker Swarm 集群(仅在 manager 节点)

# 初始化 Swarm,指定本机 IP 用于集群通信
docker swarm init --advertise-addr 192.168.22.135

成功后会输出类似:


🔑 请复制好这个 join 命令,下一步要用。

验证集群状态:

docker info | grep -A 5 "Swarm"
# 或
docker node ls

四、添加工作节点(在 worker1 和 worker2 上执行)

在每个工作节点上运行上一步中生成的 docker swarm join 命令,例如:

docker swarm join --token SWMTKN-1-1r8pzafwz111nuuadiny7c9svywve6sll7w8yahrgt3szlyzgl-aiqy7vj7gd1j0oaibj2zeb6gt 192.168.22.103:2377

成功提示:

This node joined a swarm as a worker.

回到 manager 节点,查看节点状态:

docker node ls

输出(状态应为 Ready):

五、部署测试服务

1. 创建 Overlay 网络(跨主机通信)

docker network create --driver overlay my-overlay

2. 部署 Nginx 服务(3 副本)

docker service create \--name web \--publish published=8080,target=80 \--network my-overlay \--replicas 3 \nginx:latest

3. 验证服务

docker service ls        # 查看服务列表
docker service ps web    # 查看副本分布

4. 访问服务

在任意节点(包括 manager、worker1、worker2)上访问:

http://<任意节点IP>:8080

看到 Nginx 欢迎页。

💡 Docker Swarm 的路由网格(Routing Mesh)会自动将请求转发到任意副本。

✅ 至此,你已在 Ubuntu 上成功搭建了一个功能完整的 Docker Swarm 集群!

http://www.dtcms.com/a/593650.html

相关文章:

  • 网站开发需要代码吗百度推广落地页
  • C++中测试无锁队列的正确性和性能
  • seo网站快速排名网站的按钮怎么做 视频
  • TortoiseSVN客户端(小乌龟)安装与使用
  • “十防”标准的技术赋能:基于传感器网络的档案环境精准调控研究
  • 建设网站教程视频视频房地产店铺首页设计过程
  • SQL 注入复习
  • 网站开发工具有哪些wordpress网址跳转
  • Uni微信小程序如何对接百度翻译
  • 蓝牙钥匙 第77次 蓝牙与边缘计算融合:重新定义物联网的智能边界
  • CodexField 如何构建自增长的内容资产生态?
  • 逻辑服务编排的定义变量,将数据和逻辑解耦,配置化实现数据驱动流程!
  • 代码随想录 Q89.跳跃游戏Ⅱ
  • 那个网站是专门做渔具的网站设计与建设难吗
  • Bootstrap4 导航栏
  • ESLint: Expected indentation of * spaces but found *. (style/indent)
  • 前端根据文件后缀名智能识别文件类型的实用函数
  • 文山 网站建设 滇icp成都优化官网推广
  • 线性代数 - 矩阵乘法能换括号,不能换顺序;满足结合律,不满足交换律
  • ScaleRL:掌握大语言模型强化学习的规模化艺术
  • AI MCP体系化开发指南:从诞生背景到技术实现
  • QSS选择器详解:让你的Qt应用界面焕然一新
  • 【底层机制】Android低内存管理机制深度解析
  • 商务网站建设目的电子商务网站开发的预期目标
  • 知识管理的复利效应:从“碎钞机”到“印钞机”的认知升级
  • 2025 年世界职业院校技能大赛汽车制造与维修赛道备赛方案
  • IO 多路复用技术演进与原理深度解析
  • 指纹浏览器字体模拟实践
  • 接口在领域层,实现在基础设施层
  • 【LeetCode刷题】移动零