| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> docker原生网络 -> 正文阅读 |
|
[系统运维]docker原生网络 |
一般来讲,我们安装完docker,就会查看到docker的网络,如下
下面我们就介绍一下docker这些原生的网络是什么意思? 1. none网路啥都没有,IPAM(IP address manager网络管理)也是空的。 运行一个容器,没有ip地址,也ping不通百度,没有对外通讯的网卡,也没有DNS。能够ping通172.0.0.1,说明能做一个本地环回的封装,它存在的意义在于安全性高,因为与外界隔离了。 2. host网络我们运行一个容器看看,跟宿主机的网路是一模一样的 ,连hostname也是一样的。 好处是性能非常的好,如果容器对网络的性能要求极其的高,那么就可以使用这个网络模式。 缺点就是牺牲一些灵活性,比如说端口冲突。 3. join网络这个网络是我们看不到的,使用docker network ls 实际的应用场景就是,比如说我们运行一个Apache的容器,想要看容器的ip地址,但是httpd这个镜像里面没有ip,ifconfig,yum命令。 这个时候可以通过我们的join网络,具体操作如下: 即让我们两个容器使用相同的网络配置。。 我们使用docker inspect web这个命令也可以看到该容器的IP地址,所以这个网络的话,基本用不到,只做了解即可。 4. bridge网络我们使用brctl命令可以看到宿主机的桥接卡信息
网络必须满足三个条件才能通讯:一个网段=一个广播域=一个VLAN(所有的主机要在一个网段,一个广播域,一个VLAN中),但是这个也不是绝对的,例如:flannel网络可以实现所有网段都可以通信。 默认情况下,我们启动一个容器,该容器的网卡都会连到docker0这个网桥去。 我们知道docker0的网桥ip地址是172.17.0.1,这里我们看看我们起的httpd容器的IP地址。 看到容器里面的网卡eth0连接到7号这个网卡,我们看一下宿主机上7号网卡veth2e29983,刚好也是显示连接到6号这个网卡(容器内部的那个网卡) 使用brctl show命令,veth2e29983连接到docker0上
查看一下bridge网卡信息 网段是172.17.0.0/16 网关是172.17.0.1 发现docker0充当的是这个bridge网桥的网关地址。。。 ?veth pair连接的是不同空间的,同一个空间相连的就用桥接关系,我们这里的空间指的是网络空间,即 ip netns,关于ip netns的说明,可以参考我的另一篇docker namespaces详解 那么我们的docker0又是如何与宿主机网卡相连的呢,即我们的容器如何访问外的呢? 依靠的是路由表(ip_forward),路由表的作用是把数据跨网段进行转发,sysctl -p是查看是否开启路由转发功能,若未开启,可根据下面的方式修改即可。 ??打开之后,我们可以根据ip r(或route -n)看到的路由表能进行数据转发了。 上面的是默认的情况下,下面我们介绍一下通过自定义的网络
我们创建的docker网络,是172.18.x.x,这个是docker默认给我们分配的,注意要是我们再create一个,就是172.19.x.x,这个规律还是显而易见的。 现在如果我想自己定义网段那些的话,通过如下命令即可: 查看一下网桥,br-4da9e772021c这个网卡就是我们刚才自定义出来的网卡。 我们发现我们创建的那个docker桥接网卡(my_net2)的Gateway网关(172.22.16.1)就是在物理机创建的网卡的ip地址(br-4da9e772021c的ip)。 现在我们做个试验,让我们刚才新创建的网卡去ping docker默认docker0管理创建的容器ip,即不同的桥接卡下的veth pair容器看看能否通讯。答案是肯定不能通讯的,因为都不在同一个网段上,如下我们演示的两个不同的容器bbox1和bbox2,它两不能通讯,但是能够ping通网关ip。 但是我们额外测试一个注意的情况 由于我们知道172.17.0.1是docker0的IP地址,这里我们通过my_net这个bridge卡创建一个bbox1的容器,然后172.17.0.2是我们刚开始后台起的httpd服务的容器地址,发现172.17.0.1(这个也是bbox1容器的网关ip)可以通,172.17.0.2不可以通,也就是说我们可以ping通这是怎么回事呢? 我们ping不通172.17.0.2是符合常理的,因为不在同一个网段中,但是它的网关通了 ,原因是防火墙的规则在作用着,使用iptables-save命令查看一下物理机的防火墙 docker0到br-4da9e772021c,br-c15eb9e22ac2网桥的流量都被DROP掉了,防火墙挡住了。 如果想要连接到httpd这个服务容器(也就是web这个容器)的话,解决办法就是让httpd容器多一个网卡。
?此时再去ping httpd服务的容器(即web这个容器) 总结:
我的第一个微单 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 9:59:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |