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

docker同宿主机容器和不同宿主机容器之间怎么通信?

第一部分 docker有四种网络模式
第一种:bridge 模式
当docker进程启动时,主机上会创建一个名为docker0的虚拟网桥,容器内部会创建一个只能容器内部看到的接口eth0,eth0 和docker0工作方式就像物理二层交换机一样,可以互相通信。

docker同宿主机容器和不同宿主机容器之间怎么通信?

命令执行过程:
#docker run -tid --net=bridge --name docker_bri1 ubuntu-base:v3
#docker run -tid --net=bridge --name docker_bri2 ubuntu-base:v3

#brctl show
#docker exec -ti docker_bri1 /bin/bash
#docker exec -ti docker_bri1 /bin/bash

#ifconfig –a
#route –n

第二种:host模式
容器启动时候用host模式,那么容器不会像第一张那样有个独立Network NameSpace。而是和主机共享一个Network NameSpace。
使用宿主机的ip和端口,但是容器的系统,进程列表等还是和主机隔离。

docker同宿主机容器和不同宿主机容器之间怎么通信?

命令执行:
#docker run -tid --net=host --name docker_host1 ubuntu-base:v3
#docker run -tid --net=host --name docker_host2 ubuntu-base:v3

#docker exec -ti docker_host1 /bin/bash
#docker exec -ti docker_host1 /bin/bash

#ifconfig –a
#route –n

第三种模式 Container
congtainer容器指定和已经存在的容器共享一个network namespace。
不配置ip,指一个已经存在容器共享ip,其他
docker同宿主机容器和不同宿主机容器之间怎么通信?

第四种:none模式
none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。

docker同宿主机容器和不同宿主机容器之间怎么通信?
#docker run -tid --net=none --name docker_non1 ubuntu-base:v3
#docker exec -ti docker_non1 /bin/bash

#ifconfig –a
#route -n

第二部分 跨主机通信
单台主机上面的docker容器通过docker0来通信。不同主机上面的容器只能在主机上做端口映射来完成。种端口映射方式对很多集群应用来说极不方便。

方法一:现在用docker主机上添加静态路由直接实现跨宿主机容器之间通信:
docker同宿主机容器和不同宿主机容器之间怎么通信?

方法二:借助pipework容器网络配置工具。
通过使用ip、brctl、ovs-vsctl等命令来为Docker容器配置自定义的网桥、网卡、路由等。

使用新建的bri0网桥代替缺省的docker0网桥

docker同宿主机容器和不同宿主机容器之间怎么通信?

第三种:Flannel(Flannel + UDP 或者 Flannel + VxLAN)

Flannel实现的容器的跨主机通信通过如下过程实现:

每个主机上安装并运行etcd和flannel;
在etcd中规划配置所有主机的docker0子网范围;
每个主机上的flanneld根据etcd中的配置,为本主机的docker0分配子网,保证所有主机上的docker0网段不重复,并将结果(即本主机上的docker0子网信息和本主机IP的对应关系)存入etcd库中,这样etcd库中就保存了所有主机上的docker子网信息和本主机IP的对应关系;
当需要与其他主机上的容器进行通信时,查找etcd数据库,找到目的容器的子网所对应的outip(目的宿主机的IP);
将原始数据包封装在VXLAN或UDP数据包中,IP层以outip为目的IP进行封装;
由于目的IP是宿主机IP,因此路由是可达的;
VXLAN或UDP数据包到达目的宿主机解封装,解出原始数据包,最终到达目的容器

docker同宿主机容器和不同宿主机容器之间怎么通信?

#/opt/bin/etcdctl get /coreos.com/network/config
#/opt/bin/etcdctl ls /coreos.com/network/subnets
#/opt/bin/etcdctl get /coreos.com/network/subnets/172.16.49.0-24

转载于:https://blog.51cto.com/2367685/2349762

相关文章:

  • Android自定义搜索框,封装了 历史搜索记录功能和样式
  • VuePress 静态网站生成
  • Android中View内部类MeasureSpec研究
  • Java多线程父子线程关系 多线程中篇(六)
  • 使用Nginx、Nginx Plus抵御DDOS攻击
  • 前嗅ForeSpider中数据浏览界面介绍
  • NPOI 笔记
  • webpy简单入门---1
  • 印刷名片用什么格式的文件好?
  • spring boot + vue + element-ui全栈开发入门——主页面开发
  • 技术胖1-4季视频复习— (看视频笔记)
  • 如何查找Fiori UI上某个字段对应的后台存储表的名称
  • 日志切割
  • Visual Studio 代码折叠快捷键(摘要)
  • 中小型研发团队架构实践九:任务调度Job
  • [译]CSS 居中(Center)方法大合集
  • js递归,无限分级树形折叠菜单
  • Linux快速复制或删除大量小文件
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • PAT A1092
  • PHP 7 修改了什么呢 -- 2
  • tensorflow学习笔记3——MNIST应用篇
  • Zepto.js源码学习之二
  • 深度学习中的信息论知识详解
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • #DBA杂记1
  • (003)SlickEdit Unity的补全
  • (Java)【深基9.例1】选举学生会
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (Python) SOAP Web Service (HTTP POST)
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (Ruby)Ubuntu12.04安装Rails环境
  • (安卓)跳转应用市场APP详情页的方式
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (离散数学)逻辑连接词
  • (十六)串口UART
  • (转)Google的Objective-C编码规范
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • ***监测系统的构建(chkrootkit )
  • . Flume面试题
  • .NET 8.0 发布到 IIS
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .net(C#)中String.Format如何使用
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET构架之我见
  • ::什么意思
  • @private @protected @public
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [ 手记 ] 关于tomcat开机启动设置问题