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

使用 Docker Swarm 纳管节点并实现容器通信

1. 前提条件

  • 两个节点(192.168.1.11 和 192.168.1.12)已安装 Docker(建议使用最新版本,例如 20.10 或更高)。
  • 两节点网络互通,防火墙允许以下端口:
    • TCP 2377(Swarm 管理)
    • TCP/UDP 7946(节点通信)
    • UDP 4789(覆盖网络数据)
  • 确保两节点可以通过 IP 或主机名互相访问。

2. 初始化 Docker Swarm

在主节点(以 192.168.1.11 为例)上初始化 Swarm。

docker swarm init --advertise-addr 192.168.1.11

执行后会返回一个 docker swarm join 命令,类似:

docker swarm join --token SWMTKN-1-xxxx 192.168.1.11:2377

记录此命令,用于后续加入从节点。

3. 加入从节点

在从节点(192.168.1.12)上执行主节点返回的 join 命令:

docker swarm join --token SWMTKN-1-xxxx 192.168.1.11:2377

验证节点是否成功加入,在主节点运行:

docker node ls

输出应显示两个节点,状态为 Ready

4. 创建覆盖网络

为了实现跨节点容器通信,需创建 Overlay 网络:

docker network create --driver overlay --attachable my-overlay-network
  • --driver overlay:使用 Overlay 网络,支持跨节点通信。
  • --attachable:允许手动附加容器到网络。

验证网络创建:

docker network ls

5. 部署服务

在 Swarm 中通过服务部署容器,服务会自动分配到不同节点。以下示例部署两个 Nginx 容器,并连接到 Overlay 网络。

在主节点运行:

docker service create --name web1 --network my-overlay-network --replicas 1 nginx
docker service create --name web2 --network my-overlay-network --replicas 1 nginx

验证服务:

docker service ls

查看容器分布:

docker service ps web1
docker service ps web2

6. 测试容器通信

Overlay 网络支持容器通过服务名进行通信。假设 web1web2 分别运行在不同节点,测试通信:

  1. 进入 web1 容器:

    docker exec -it $(docker ps -q -f name=web1) /bin/bash
    
  2. 在容器内 ping 另一个服务:

    ping web2
    

    或使用 curl 测试:

    curl http://web2
    

    服务名(如 web2)会自动解析为目标容器的 IP。

7. 注意事项

  • 防火墙:确保节点间防火墙规则允许 Swarm 相关端口通信。
  • 服务发现:Overlay 网络内置 DNS,容器可通过服务名通信,无需手动指定 IP。
  • 扩展性:可通过 docker service scale web1=3 扩展服务实例,Swarm 会自动分配到可用节点。
  • 故障排查
    • 检查节点状态:docker node ls
    • 检查网络:docker network inspect my-overlay-network
    • 查看服务日志:docker service logs web1

8. 清理(可选)

如果需要移除服务或 Swarm:

  • 删除服务:
    docker service rm web1 web2
    
  • 离开 Swarm(从节点):
    docker swarm leave
    
  • 解散 Swarm(主节点):
    docker swarm leave --force
    

相关文章:

  • 【网络】数据链路层知识梳理
  • Hi3518E官方录像例程源码流程分析(四)
  • 【NLP 62、实践 ⑮、基于RAG + 智谱语言模型的Dota2英雄故事与技能介绍系统】
  • 13【生命周期·进阶】省略规则与静态生命周期 (`‘static`)
  • 08【工具赋能】深入 Cargo:依赖管理、构建配置与工作空间 (Workspace)
  • C++类继承关键点总结
  • MySQL数据库(基础篇)
  • 量子计算与经典计算融合:开启计算新时代
  • 读一篇AI论文并理解——通过幻觉诱导优化缓解大型视觉语言模型中的幻觉
  • UE5 UI 教程系列全集
  • llama factory
  • 7、sentinel
  • 微信小程序通过mqtt控制esp32
  • 手写call,bind,apply
  • Jetson Orin Nano GPIO 实战,用 devmem 玩转 Pinmux 引脚复用配置
  • 【数据可视化-19】智能手机用户行为可视化分析
  • AI与思维模型【71】——断裂点理论
  • 第五章 SQLite数据库:5、SQLite 进阶用法:ALTER 命令、TRUNCATE 操作、视图创建、事务控制和子查询的操作
  • 【Java面试系列】Spring Cloud微服务架构中的分布式事务解决方案与Seata实现原理详解 - 3-5年Java开发必备知识
  • 每日算法-250420
  • 深化应用型人才培养,这所高校聘任行业企业专家深度参与专业设置
  • 为什么要研制大型水陆两栖飞机?AG600总设计师给出答案
  • 上海崇明“人鸟争食”何解?检察机关推动各方寻找最优解
  • 为震慑违法违规行为,市监总局发布一批直播电商领域典型案例
  • 美国佛罗里达州立大学发生枪击事件
  • 大外交|习近平时隔9年访柬,专家:中柬铁杆友谊的地区意义日渐凸显