【赵渝强老师】Docker容器的跨节点通信

简介: 本文详解Docker容器跨主机通信的三种方案,重点介绍基于Overlay网络的实现:通过ZooKeeper注册中心配置Docker集群,创建overlay网络,使不同主机上的容器能用虚拟IP直接互通,并提供完整部署步骤与验证方法。(239字)

b439.png

在同一台宿主机上,不同的Docker容器可以借助docker0的网桥直接进行通信。而在实际的项目中,一个复杂的系统往往需要部署多个组件。为了提高组件的运行的效率往往这些组件需要部署到不同的主机上。那么在Docker中如何实现容器的跨主机通信呢?目前主要可以通过3种不同的方式来实现Docker容器跨主机通信的功能:


  • 方式一:通过容器在宿主机上的端口映射来完成通信。


但使用这种方式在跨主机通信时,由于需要宿主机的转发,使用起来会非常不方便。


  • 方式二:通过借助Docker Overlay网络来实现。


这种方式可以直接使用容器本身的虚拟IP地址进行相互通信,这与运行在同一台宿主机上的不同容器通信方式完全一样。Docker原生的Overlay网络则是这样的一个解决方案,它也是目前实现容器跨节点通信的主流的数据传输和路由方案。要使用Overlay网络还需要有注册中心的支持。


  • 方式三:通过借助第三方网络来实现容器的跨节点通信,如flannel网络等。


下面着重介绍方式二的实现过程。


Overlay网络是在不改变现有网络的前提下,对IP报文上进行数据格式的封装,从而利用IP路由协议实现了数据的转发功能。在Overlay网络中通过扩展标识位,可以支持高达16M的用户。Docker的Swarm集群便是Overlay网络的一个实现,而使用Overlay网络需要注册中的支持。注册中心能够提供服务的注册与发现功能。Docker支持的注册中心有ZooKeeper、Consul和Etcd。


视频讲解如下:


下面以ZooKeepper为例来进行介绍。在ZooKeeper网站上提供了ZooKeeper的安装介质。由于ZooKeeper基于的Java语言,因此,在安装ZooKeeper之前需要先安装Java的JDK环境。下面的步骤将部署一个单节点的ZooKeeper实例。


(1)解压缩JDK的安装介质,这里使用的版本是jdk-8u181-linux-x64.tar.gz。

$ tar -zxvf jdk-8u181-linux-x64.tar.gz -C /root/


(2)编辑文件“/root/.bash_profile”设置Java的环境变量。输入下面的内容:

JAVA_HOME=/root/jdk1.8.0_181
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH


(3)生效Java的环境变量。

$ source /root/.bash_profile


(4)解压缩ZooKeeper的安装介质,这里使用的版本是zookeeper-3.4.10.tar.gz。

$ tar -zxvf zookeeper-3.4.10.tar.gz -C /root


(5)进入ZooKeeper目录生成ZooKeeper的配置文件。

$ cd zookeeper-3.4.10
$ cp conf/zoo_sample.cfg conf/zoo.cfg


(6)启动ZooKeeper实例。

$ bin/zkServer.sh start


(7)查看ZooKeeper实例的状态,如下图所示。这时ZooKeeper是standalone状态,说明这是一个单节点的ZooKeeper实例。

有了ZooKeeper注册中心的支持,就可以进一步实现Docker容器的跨节点通信了。 image.png

下表显示了部署的环境信息。

image.png

具体的操作步骤如下:


(1)在master节点上修改文件“/usr/lib/systemd/system/docker.service”的内容,将参数“ExecStart”改为下面的内容。

ExecStart=/usr/bin/dockerd-current \
  --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
  --default-runtime=docker-runc \
  --exec-opt native.cgroupdriver=systemd \
  --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
  --init-path=/usr/libexec/docker/docker-init-current \
  --seccomp-profile=/etc/docker/seccomp.json \
  -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \
  --cluster-store zk://192.168.79.11:2181 \
  --cluster-advertise 192.168.79.11:2375 \
  $OPTIONS \
  $DOCKER_STORAGE_OPTIONS \
  $DOCKER_NETWORK_OPTIONS \
  $ADD_REGISTRY \
  $BLOCK_REGISTRY \
  $INSECURE_REGISTRY \
  $REGISTRIES
  
# 其中增加的主要参数如下。
# --cluster-store:指定ZooKeeper的地址和端口。
# --cluster-advertise:将Docker注册到ZooKeeper中的地址信息。


(2)重启master节点上的Docker服务。

$ systemctl daemon-reload
$ systemctl restart docker


(3)在node1节点上修改文件“/usr/lib/systemd/system/docker.service”的内容,将参数“ExecStart”改为下面的内容。

ExecStart=/usr/bin/dockerd-current \
  --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
  --default-runtime=docker-runc \
  --exec-opt native.cgroupdriver=systemd \
  --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
  --init-path=/usr/libexec/docker/docker-init-current \
  --seccomp-profile=/etc/docker/seccomp.json \
  -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \
  --cluster-store zk://192.168.79.11:2181 \
  --cluster-advertise 192.168.79.12:2375 \
  $OPTIONS \
  $DOCKER_STORAGE_OPTIONS \
  $DOCKER_NETWORK_OPTIONS \
  $ADD_REGISTRY \
  $BLOCK_REGISTRY \
  $INSECURE_REGISTRY \
  $REGISTRIES


(4)重启node1节点上的Docker服务。

$ systemctl daemon-reload
$ systemctl restart docker


(5)进入ZooKeeper目录,启动ZooKeeper命令行客户端。

$ cd /root/zookeeper-3.4.10
$ bin/zkCli.sh


(6)查看master和node1在ZooKeeper中的注册信息,如下图所示。

image.png


(7)在任意节点上创建overlay网络,例如在master上执行下面的语句。

$ docker network create -d overlay my_multi_hosts
# 其中的参数-d 用于指定创建网络的类型,这里指定的是overlay。
# 在node1节点上此时会自动同步新创建的网络my_multi_hosts。


(8)在master或者node1上查看Docker的网络信息,如下图所示。这时可以看到新创建的网络“my_multi_hosts”。

image.png


(9)在master节点上,使用my_multi_hosts的overlay网络启动一个容器,并确定容器的IP地址,如下图所示。从图中可以看成box1的IP地址是“10.0.0.2”。

$ docker run -it --net=my_multi_hosts --name box1 busybox
$ ifconfig eth0

image.png

(10)在node1节点上,使用my_multi_hosts的overlay网络启动一个容器,并确定容器的IP地址,如下图所示。从图中可以看成box2的IP地址是“10.0.0.3”。

$ docker run -it --net=my_multi_hosts --name box2 busybox
$ ifconfig eth0

image.png


(11)现在box1和box2既可以通过虚拟IP地址进行通信,也可以通过DNS Server进行通信,如下图所示。

image.png

(12)使用ZooKeeper的图形化工具ZooInspector登录ZooKeeper。这时就可以完整看到Overlay网络在ZooKeeper中的注册信息,如下图所示。

image.png

相关文章
|
5天前
|
存储 弹性计算 缓存
阿里云服务器租赁费用:新版租赁收费标准及活动报价参考
本文更新了2026年阿里云全系列云服务器租赁活动报价,所有特惠资源均可前往阿里云活动中心选购,整体覆盖从个人入门到企业级高性能场景的全梯度需求。其中轻量应用服务器主打极致性价比,2核2G峰值200M带宽配置每日10点、15点限时抢购价仅38元/年,2核4G配置379元/年起;高性价比的经济型e实例、通用算力型u2i实例覆盖2核4G至4核32G全档位,适配开发测试与中小型企业业务;搭载英特尔至强6处理器的第九代c9i企业级实例算力较上代提升20%,支撑高并发生产环境,不同实例规格价差清晰,用户可根据自身业务负载与预算灵活选型。
1570 111
|
12天前
|
云安全 人工智能 运维
阿里云联动百位企业安全专家,共识Agent防御最佳实践
当Agent成为新员工,你的安全边界在哪里?
1939 8
阿里云联动百位企业安全专家,共识Agent防御最佳实践
|
6天前
|
人工智能 程序员 API
Codex 接入 DeepSeek-V4-Flash:还能补上识图,提供两套方案
Codex 接入 DeepSeek-V4-Flash 怎么配?本文覆盖 CLI 与桌面端,再用 qwen3-vl-flash 补识图,两套方案可直接照做
|
6天前
|
编解码 人工智能 安全
2核4G/4核8G/8核16G阿里云服务器如何选择实例?经济型e、通用算力型u2i与计算型c9i选哪个?
本文介绍了阿里云2核4G、4核8G、8核16G三档主流配置下经济型e、通用算力型u2i和计算型c9i三种实例的最新活动价格与适用场景。同配置下三者价差显著,以2核4G为例,经济型e低至599.93元/年,计算型c9i则高达1742.08元/年。文章详细解析了各实例的性能定位:经济型e适合轻负载入门场景,u2i兼顾稳定算力与性价比,c9i凭借第9代至强处理器与芯片级安全能力支撑高性能业务。同时提示用户可叠加满减优惠券享受折上折,建议根据业务负载与预算综合决策。
526 112
|
18天前
|
人工智能 前端开发 Linux
Codex 桌面版安装 + CC Switch 接入第三方 API 完整教程(2026 最新)
2026最新教程:手把手教你安装Codex桌面版,通过CC Switch v3.17.0一键接入Fenno等国产API(兼容OpenAI Responses格式),跳过账号登录,完整启用代码审查、多步任务与上下文感知功能。零基础友好,全程图文实操。(239字)
2557 4
|
10天前
|
存储 人工智能 关系型数据库
阿里云AI产品与云产品最新组合套餐:Token Plan、AI coding及云服务器和建站等组合优惠价
阿里云推出全新“算力+模型+应用”一站式云与AI组合套餐活动,覆盖从个人开发者到中大型企业的全场景需求。核心亮点为分三档定价的Token Plan订阅服务,支持Qwen3.8-Max-Preview大模型调用,错峰时段最低可享0.2折优惠。活动同步推出AI Coding、智能体部署、云电脑托管、0代码建站等十余类场景化组合,搭配99元/年的普惠云服务器、88元/年的入门数据库等经典特惠产品,还为企业提供1V1定制化AI转型方案,大幅降低了不同用户群体拥抱AI的技术门槛与采购成本。
720 111
|
20天前
|
人工智能 JSON 安全
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
阿里云AI安全产品联动防御Fastjson攻击
2634 13
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
|
6天前
|
人工智能 JSON Shell
2026AI漫剧本地全开源方案(附各个软件模型链接),8G显卡也能流畅运行
这是一套完全本地化部署的AI漫剧生成技术链路:涵盖LLM剧本分镜生成、FLUX文生图(IP-Adapter人脸锁定)、StoryDiffusion时序连贯控制、LTX-2.3唇形同步视频生成,及ComfyUI全流程调度。零云端费用,仅耗硬件算力,单集2–4小时可产出竖屏短视频,适配抖音/B站分发。
|
7天前
Qoder 一周年 × Qwen3.8-Max 正式上线,多重好礼限时领
8月3日,Qwen3.8-Max 正式上线Qoder,迎来Qoder一周年。新老用户可领800次免费调用,下单再赠2000次;夜间(22:00–08:00)调用5折;邀请好友双方得积分与调用额度。
445 1