【docker系列】四种基础网络模式及自定义网络_docker 自定义网络(1)

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 第三步:查看宿主机网络接口 :另外开一个宿主机访问终端,在宿主机上使用ifconfig命令,我们会看到这样两个网络接口:docker0,veth<随机串>(如:veth1d3961b)这样2个网络接口。其中docker0是docker安装的时候创建的,veth1d3961b是容器启动的时候创建的。

我们可以猜想一定是上面提到的这些网络接口存在网络连接,才会让容器与宿主机之间存在网络联通。我们使用下面的命令验证一下(都在宿主机上执行)。

# ethtool -S veth1d3961b
NIC statistics:
     peer_ifindex: 39

上面的命令说明veth1d3961b相当于一根虚拟网线,一端连接到容器内部的39号网络接口eth0。再看下面的命令,veth1d3961b的另一端连接的是docker0。

# brctl show              
bridge name     bridge id               STP enabled     interfaces
docker0         8000.0242f757aefd       no              veth1d3961b

如果brctl命令不存在,使用yum install bridge-utils安装


结合上面的这张图,再去理解一下上面的操作。

五、none网络模式

使用下面的命令行创建的容器,使用none网络模式,即:默认没有网络配置,不具有网卡、IP、路由信息。

docker run -it --net=none --name test1 centos /bin/bash

这种模式一般又被称为“隔离模式”,常被用于在容器内完成CPU密集型任务,计算完成后将结果保留到磁盘上。在此过程中,不与外界进行网络连接,从网络层面(断开)保证计算执行过程的安全性。

docker0和宿主机的网络命名空间都不变,只是与容器的网络命名空间没有任何连接。容器之间也没有网络连接。

六、host网络模式

使用下面的命令行创建的容器,使用host网络模式。

docker run -it --net=host --name test2 centos /bin/bash

在这种模式下,容器不会获得独立的Network Namespace,与宿主机操作系统共用一个Network Namespace。即:容器不会虚拟自己的网卡,不会配置自己的IP。宿主机的IP就是容器的IP,容器的端口就是宿主机的端口,所以同一个宿主机下的多个容器不能暴漏同一个端口。


显而易见的是这种网络模式简单,没有那么多的网络接口及数据转发,所以它是性能相对比较好的网络模式。

七、container复用模式

使用下面的命令行创建的容器使用container复用模式,添加 --net="container:name or id"启动参数可以复制一个已经存在的容器的网络配置, 被复制的容器与复制容器两者的网络完全相同。

  • 使用下面的命令创建出来的容器都是bridge模式,二者的ip以及网络配置都是一样的(默认bridge模式)
docker run -it  --name test3 centos /bin/bash;
docker run -it  --net="container:test3" --name test4 centos /bin/bash;

  • 使用下面的命令创建出来的容器都是host模式,二者的ip以及网络配置都是一样的(host模式),并且和宿主机一样。
docker run -it  --net=host --name test5 centos /bin/bash;
docker run -it  --net="container:test5" --name test6 centos /bin/bash;

八、自定义bridge模式

bridge模式还支持自定义,如下所示:在宿主机范围内定义了一个名称为zimug-bridge的网络,网络模式是bridge。

docker network create --driver bridge zimug-bridge

自定义完成之后,可以通过命令查看该网络,如下所示:

# docker network ls
NETWORK ID     NAME              DRIVER    SCOPE
cc425782673c   bridge            bridge    local
a5b5700dedb4   host              host      local
fca0cfbdc8f2   none              null      local
27c745cc28a4   zimug-bridge      bridge    local

我们通过下面的2个命令,新建2个容器都加入zimug-bridge网络

docker run -it --network=zimug-bridge --name test5 centos /bin/bash;
docker run -it --network=zimug-bridge --name test6 centos /bin/bash;


由下图可见,test5容器被分配的ip是172.19.0.2

由下图可见,test6容器被分配的ip是172.19.0.3

从test5(172.19.0.2)到test6(172.19.0.3)的网络ping得通,反之亦然!网络环境可以由下图表示

这个图是不是和上文中(《二、bridge网络模式(默认)》)的图有点像,是的,唯一区别就是将docker0换成了我们自建的网络zimug-bridge,其他的没任何区别。

总结一下

面试常被问道得问题总结一下,谈一下docker基础网络模式及network namespace隔离性。

| 网络模式 | 简介 |

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值