iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何理解docker中的网络模式和跨主机通信
  • 941
分享到

如何理解docker中的网络模式和跨主机通信

2023-06-05 23:06:20 941人浏览 泡泡鱼
摘要

今天就跟大家聊聊有关如何理解Docker中的网络模式和跨主机通信,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Docker的四种网络模式Bridge模式当Docker进程启动时,会在

今天就跟大家聊聊有关如何理解Docker中的网络模式和跨主机通信,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

Docker的四种网络模式Bridge模式

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

如何理解docker中的网络模式和跨主机通信

Docker的四种网络模式

Bridge模式
如何理解docker中的网络模式和跨主机通信

当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中的网络模式和跨主机通信

演示:

如何理解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

如何理解docker中的网络模式和跨主机通信

Host模式
如何理解docker中的网络模式和跨主机通信

如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

Host模式如下图所示:

如何理解docker中的网络模式和跨主机通信

演示:

如何理解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

如何理解docker中的网络模式和跨主机通信

Container模式
如何理解docker中的网络模式和跨主机通信

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

Container模式示意图:

如何理解docker中的网络模式和跨主机通信

演示:

如何理解docker中的网络模式和跨主机通信

#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

如何理解docker中的网络模式和跨主机通信

None模式
如何理解docker中的网络模式和跨主机通信

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

node模式示意图:

如何理解docker中的网络模式和跨主机通信

演示:

#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中的网络模式和跨主机通信

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

如何理解docker中的网络模式和跨主机通信

Pipework

如何理解docker中的网络模式和跨主机通信

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

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

  • bri0网桥与缺省的docker0网桥的区别:bri0和主机eth0之间是veth pair

如何理解docker中的网络模式和跨主机通信

Flannel(Flannel + UDP 或者 Flannel + VxLAN)

如何理解docker中的网络模式和跨主机通信

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模式如下图所示: 
如何理解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

看完上述内容,你们对如何理解docker中的网络模式和跨主机通信有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网精选频道,感谢大家的支持。

--结束END--

本文标题: 如何理解docker中的网络模式和跨主机通信

本文链接: https://www.lsjlt.com/news/245253.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何理解docker中的网络模式和跨主机通信
    今天就跟大家聊聊有关如何理解docker中的网络模式和跨主机通信,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Docker的四种网络模式Bridge模式当Docker进程启动时,会在...
    99+
    2023-06-05
  • Docker如何跨主机通信
    今天小编给大家分享一下Docker如何跨主机通信的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。设有三台虚拟机 &n...
    99+
    2023-06-27
  • Docker容器跨主机通信overlay网络的解决方案
    目录一、Docker主机间容器通信的解决方案二、Docker Overlay Network三、使用键值存储搭建Docker主机集群4.1 系统环境4.2 安装Consul4.3 节...
    99+
    2024-04-02
  • Docker容器与主机网络互通如何实现
    Docker容器与主机网络互通可以通过以下几种方式实现: 使用端口映射:通过在Docker容器启动时使用-p参数将容器内部的端口映...
    99+
    2024-05-07
    Docker
  • C#中如何处理网络通信问题
    C#中如何处理网络通信问题,需要具体代码示例网络通信在现代编程中是一项非常重要的技术。无论是开发网络应用程序、网络游戏还是进行远程数据交互,我们都需要了解如何在C#中处理网络通信问题。本文将介绍C#中处理网络通信的一些常见方式,并提供相应的...
    99+
    2023-10-22
    网络通信 问题解决 C#处理
  • 云主机外部网络ping不通如何解决
    云主机外部网络无法ping通可能有以下几种原因:1. 云主机的防火墙规则设置不正确。可以检查云主机的安全组或防火墙配置,确保允许外部...
    99+
    2023-09-21
    云主机
  • 如何解决PHP开发中的网络通信和传输速度
    随着互联网的快速发展,网络通信和传输速度变得越来越重要。在PHP开发中,如何优化网络通信和传输速度,成为了开发者不可忽视的问题。本文将介绍一些有效的方法和具体的代码示例,帮助你解决PHP开发中的网络通信和传输速度问题。一、使用缓存技术缓存技...
    99+
    2023-10-21
    网络通信 传输速度 - HTTP - WebSocket - TCP/IP
  • 云服务器如何配置路由模式信息和网络
    云服务器可以配置路由模式信息以确保其在不同的路由器之间进行路由。在配置路由模式之前,您需要了解您需要在云服务器上部署的路由模型和规则。以下是一个基本的路由模式配置步骤: 确定您要使用的云服务器的类型:不同类型的云服务器适用于不同的路由模...
    99+
    2023-10-27
    路由 模式 服务器
  • VMware虚拟机的三种网络模式(桥接模式Bridged、地址转换模式NAT、仅主机模式Host-Only)详解
    目录一、Bridged(桥接模式)1、什么是桥接模式?2、如何设置桥接模式。3、测试4、总结二、NAT(地址转换模式)1、什么是NAT模式?2、如何设置NAT模式。3、测试4、小结:...
    99+
    2024-04-02
  • 如何调优PHP开发中的网络通信性能
    随着互联网的发展,网络通信性能对于PHP开发变得越来越重要。优化网络通信性能可以加快应用程序的响应速度,提升用户体验,同时也能减少服务器负载。本文将介绍几种优化网络通信性能的方法,并提供具体的代码示例。使用HTTP/2协议HTTP/2是HT...
    99+
    2023-10-21
    调优 PHP 网络通信
  • VirtualBox如何进行在NAT模式下虚拟机与宿主机互相通信实验
    这期内容当中小编将会给大家带来有关VirtualBox如何进行在NAT模式下虚拟机与宿主机互相通信实验,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。VirtualBox在NAT模式下虚拟机与宿主机互相通信...
    99+
    2023-06-05
  • VMware VMnet8 模式共享主机网络配置静态 IP 和 DNS的实例分析
    本篇文章为大家展示了VMware VMnet8 模式共享主机网络配置静态 IP 和 DNS的实例分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、简介NAT网络模式:1. 宿主机可以看做一个路由...
    99+
    2023-06-05
  • 如何理解Backbone.js 的技巧和模式
    这篇文章将为大家详细讲解有关如何理解Backbone.js 的技巧和模式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Backbone.js是一个开源Jav...
    99+
    2024-04-02
  • 如何理解分布式中的TCC模式
    这篇文章主要介绍“如何理解分布式中的TCC模式”,在日常操作中,相信很多人在如何理解分布式中的TCC模式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解分布式中的TCC...
    99+
    2024-04-02
  • C#中常见的网络通信和安全性问题及解决方法
    C#中常见的网络通信和安全性问题及解决方法在当今互联网时代,网络通信已经成为了软件开发中必不可少的一部分。在C#中,我们通常会遇到一些网络通信的问题,例如数据传输的安全性、网络连接的稳定性等。本文将针对C#中常见的网络通信和安全性问题进行详...
    99+
    2023-10-22
    Http 加密 socket 网络通信:TCP/IP 安全性问题:身份验证
  • 解决:centos7如何解决网络不可达和wget: 无法解析主机地址 “downloads.mysql.com”
    遇到此类问题可能会有多重解决方法,需要一个一个的去排除。 查看自己的网络设置是不是设置的NAT模式,设置完成后再去ping一下网络地址。  2、ping一下百度看能不能拼成功,下图是ping成功的样式。(如果不行继续往下走) [root@l...
    99+
    2023-09-27
    centos
  • Go语言在云计算中如何实现高速的网络通信?
    随着云计算技术的广泛应用,网络通信在云计算中扮演着越来越重要的角色。而对于一门编程语言来说,高速的网络通信能力已经成为其必备的特性之一。在众多编程语言中,Go语言因其具有高效率、高并发性和高性能等优势,已被广泛应用在云计算中,并成为了云计算...
    99+
    2023-05-16
    云计算 Go语言 网络通信
  • 如何深入理解Java设计模式的中介者模式
    这期内容当中小编将会给大家带来有关如何深入理解Java设计模式的中介者模式,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、什么是中介者模式用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地...
    99+
    2023-06-25
  • windows主机中如何使用批处理命令检查网卡网络自动重启网卡
    这篇文章主要为大家展示了“windows主机中如何使用批处理命令检查网卡网络自动重启网卡”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“windows主机中如何使用批处理命令检查网卡网络自动重启网...
    99+
    2023-06-04
  • 如何理解网络Fedora gcc编译中的问题
    如何理解网络Fedora gcc编译中的问题,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。全面介绍Fedora gcc编译, 这里我发表一下个人理解,这里将介绍Fedora...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作