文章转载自:http://www.a-site.cn/article/169899.html

Docker的四种网络模式Bridge模式

当Docker进程启动时,会在主机上创建一个名为docker0...

Docker的四种网络模式

Bridge模式

当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。

从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备,Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。可以通过brctl show命令查看。

bridge模式是docker的默认网络模式,不写--net参数,就是bridge模式。使用docker run -p时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看。

bridge模式如下图所示:

演示:

#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等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

Host模式如下图所示:

演示:

#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模式

这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡设备通信。

Container模式示意图:

演示:

#docker run -tid --net=container:docker_bri1 --name docker_con1 ubuntu-base:v3

#docker exec -ti docker_con1 /bin/bash#docker exec -ti docker_bri1 /bin/bash

#ifconfig –a#route -n

None模式

使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。

Node模式示意图:

演示:

#docker run -tid --net=none --name docker_non1 ubuntu-base:v3#docker exec -ti docker_non1 /bin/bash

#ifconfig –a#route -n

跨主机通信

Docker默认的网络环境下,单台主机上的Docker容器可以通过docker0网桥直接通信,而不同主机上的Docker容器之间只能通过在主机上做端口映射进行通信。这种端口映射方式对很多集群应用来说极不方便。如果能让Docker容器之间直接使用自己的IP地址进行通信,会解决很多问题。按实现原理可分别直接路由方式、桥接方式(如pipework)、Overlay隧道方式(如flannelovs+gre)等。

直接路由

通过在Docker主机上添加静态路由实现跨宿主机通信:

Pipework

Pipework是一个简单易用的Docker容器网络配置工具。由200多行shell脚本实现。通过使用ip、brctl、ovs-vsctl等命令来为Docker容器配置自定义的网桥、网卡、路由等。

  • 使用新建的bri0网桥代替缺省的docker0网桥
  • bri0网桥与缺省的docker0网桥的区别:bri0和主机eth0之间是veth pair

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数据包到达目的宿主机解封装,解出原始数据包,最终到达目的容器。

Flannel模式如下图所示: 

演示:

#/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://www.cnblogs.com/xzlive/p/11075905.html

Docker的网络模式和跨主机通信相关推荐

  1. overlay 如何实现跨主机通信?- 每天5分钟玩转 Docker 容器技术(52)

    上一节我们在 host1 中运行了容器 bbox1,今天将详细讨论 overlay 网络跨主机通信的原理. 在 host2 中运行容器 bbox2: bbox2 IP 为 10.0.0.3,可以直接 ...

  2. 【Docke进阶篇】Docker网络模式与容器间通信

    本篇主要是Docker网络模式与容器间通信. 上一篇:[Docker基础篇]Docker核心概念与指令 文章目录 一.预备知识点 二.Docker网络模式 1.查看Docker网络模式 2.bridg ...

  3. Docker(十四):Docker:网络模式详解

    Docker作为目前最火的轻量级容器技术,牛逼的功能,如Docker的镜像管理,不足的地方网络方面. Docker自身的4种网络工作方式,和一些自定义网络模式 安装Docker时,它会自动创建三个网络 ...

  4. 052、overlay如何实现跨主机通信?(2019-03-19 周二)

    参考https://www.cnblogs.com/CloudMan6/p/7305989.html 今天开始学习 overlay 网络跨主机通信的原理   root@host01:~# ufw al ...

  5. 50-overlay 如何实现跨主机通信?

    上一节我们在 host1 中运行了容器 bbox1,今天将详细讨论 overlay 网络跨主机通信的原理. 在 host2 中运行容器 bbox2: bbox2 IP 为 10.0.0.3,可以直接 ...

  6. Docker容器-------网络模式,数据卷和数据卷容器

    目录 Docker网络实现原理 Docker的网络模式 Host模式 Container模式 none模式 bridge模式 自定义网络 查看网络模式列表 查看容器信息(包含配置.环境.网关.挂载.c ...

  7. Docker:网络模式详解

    http://www.cnblogs.com/zuxing/articles/8780661.html Docker:网络模式详解 袖珍指南 Docker作为目前最火的轻量级容器技术,牛逼的功能,如D ...

  8. 网络模式详解 以及 docker的网络模式

    网桥 桥接.nat.host-only 1.先看图 2.总的来说 桥接 通过使用物理机网卡 具有单独ip NAT 把物理机为路由器进行上网 3.详细说: 桥接模式(bridged): 在bridged ...

  9. Docker之网络模式和数据卷

    目录 引言 一.Docker的网络模式 1.Docker的四种网络模式 2.Docker的自定义网络

最新文章

  1. python回归建模_Python实现回归预测及模型优化
  2. Struts2 中#、@、%和$符号的用途
  3. RedHat Linux网络配置过程笔记
  4. css 图片换行_这个开源库教你写高级的CSS
  5. java not found_java_home not found in your enviroment 问题解决方法
  6. 当我们的代码遇到问题的时候....;要想不遇到问题,写代码的时候要.....
  7. AI公开课丨李楠博士带你入门集成学习(第二期)
  8. Android Studio(十):添加assets目录
  9. CC2540和CC2541蓝牙芯片将升级为蓝牙5.0
  10. revit打开服务器文件格式,Revit文件导出格式大全(下)
  11. 孪生支持向量机基本原理
  12. hist 在matlab中的含义,matlab中hist函数的用法_matlab中hist函数
  13. [USACO10HOL]牛的政治Cow Politics
  14. 给定一个整数,请将该数各个位上数字反转得到一个新数。
  15. 【题解】L1-6 福到了 (15分)
  16. 剖析 Android ART Runtime (2) – dex2oat
  17. Gvim高级操作001--对匹配关键字进行操作--数字运算结果替换
  18. ToLua原理和使用教程
  19. 什么是缓存雪崩、缓存击穿、缓存穿透
  20. 315/433M 无线发射芯片 XL4456 功能和用途简单介绍

热门文章

  1. java web 嵌套播放器_请教一下tableau如何嵌套进自己开发的javaweb 项目中,谢谢了...
  2. oracle 向右去整,使用table表格无端的整体向右偏移一段距离
  3. mysql rpm conflict_解决centos7 yum安装MySQL rpm包出现conflict problem
  4. php fpm xcache,php扩展xcache
  5. android oom 检测工具,Android中UI检测、内存泄露、OOM、等优化处理
  6. c语言个人账册报告的课题来源,C语言个人账簿管理系统报告
  7. location定位_旅游英语必备单词:location
  8. 怎样把python源程序发给别人_如何把Python源码打包成EXE文件?以及bug
  9. 从零开始学习docker(十一)介绍Docker Compose yml文件介绍
  10. 值得学习练手的22个Python迷你程序(附代码)