Docker网络,网络工程师还不赶紧收藏!_网络工程师要学习docker吗

img
img

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

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

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

1️⃣什么是Evth-pair

Evth-pair就是一对的虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连.正因为这个特性,evth-pair 充当一个桥梁,连接各种虚拟网络设备。

OpenStac,Docker容器之间的连接, OVS的连接,都是使用 evth-pair 技术.

2️⃣容器与容器的连通

  • linux与docker容器之间通过docker0是可以ping通的
  • docker容器与容器之间是可以相互ping通的

在这里插入图片描述

分析:tomcat01和tomcat02公用一个路由器,所有的容器在不指定网络的情况下,都用docker0,dockers默认给每个容器分配一个可用的IP地址。

在这里插入图片描述

3️⃣结论

  • Docker使用的是Linux的桥接,宿主机是一个Docker容器的网桥docker0
  • Docker中所有的网络接口都是虚拟,虚拟网卡转发效率高

容器删除,对应的Evth-pair就会消失

 docker exec -it tomect01 ip addr

在这里插入图片描述
删除tomec01
在这里插入图片描述

查看Evth-pair消失
在这里插入图片描述

4️⃣概述

在这里插入图片描述

容器的接口与连接到Bridge上的veth接口,形成veth-pair,默认的Bridge网络,网关默认是docker0。
默认的Bridge网络,docker0的地址是172.17.0.1/24,而第一个接入的设备,则IP地址为172.17.0.2/24…以此内推。

5️⃣查看Bridge网络的相关命令

1.ifconfig命令:
宿主机上:
docker0接口信息:可以理解为Bridge的SVI口。
在这里插入图片描述
ens和lo接口:可以理解为宿主机的物理接口。
在这里插入图片描述

veth-pair接口:Bridge上连接容器的接口。
在这里插入图片描述

容器中:
通过docker exec -it xxx(容器名称)ifconfig进行查看:
可以看到容器的’物理接口’和回还口信息。

2.查看Bridge上接口信息:
CentOS8为例,命令为bridge link,结果为如下:
在这里插入图片描述

可以看到,2个veth接口和docker0连接在这个Bridge上。

3.查看容器与Bridge上的veth接口的对应关系:
方法1:使用脚本,查看容器ID和veth的对应关系。具体方法请参考:https://blog.csdn.net/tushanpeipei/article/details/116077454,执行结果如下:
在这里插入图片描述

方案二:通过索引来对比:

4.docker inspect network命令:
命令如下:
在这里插入图片描述

其中,使用jq查看IPAM.Config的信息和此网络的IP、网关信息:
在这里插入图片描述

Containers的信息为此网络连接的容器信息:

三、使用主机名进行通信
1.问题:
连接到默认的Bridge的容器,互相可以使用IP地址来通信,但是无法使用主机名来通信。

2.解决方案:
使用–link来通信。
在这里插入图片描述

3.注意点:
–link的原理其实就是在本地添加了对方主机名称和IP地址的映射,但是对端并没有,所以对端依旧无法通过本端的主机名与本端进行通信。容器内映射信息如下:

在这里插入图片描述

6️⃣自定义bridge网络

一、 自定义与默认的bridge的关系图示:
在这里插入图片描述

二、命令:
1.创建bridge网络:
docker network create -d bridge --subnet x.x.x.x/x(子网地址) --gateway x.x.x.x bridge-net1,创建一个名为bridge-net1的网络。
在这里插入图片描述

2.将容器连接到自定义bridge网络:
容器RUN时连接:

 docker run -it --name docker-net1 --network bridge-net1(网络名称) prin/centos-vim-ifconfig /bin/bash
 docker run -it --name docker-net2 --network bridge-net1(网络名称) prin/centos-vim-ifconfig /bin/bash 

容器已经RUN后连接:

docker network connect bridge-net1(网络名称)  docker-net1(容器名称)

3.查看自定义网络的相关信息:
1.可以使用命令docker inspect bridge-net1查看详细信息:
在这里插入图片描述

2.在宿主机上使用ifconfig,可以看到产生了如下的接口:
其中br-xxxxx相当于默认bridge的docker0接口。veth接口则是bridge-net1上连接到容器的虚拟接口。
在这里插入图片描述
在这里插入图片描述

三、特点:
1.在自定义bridge上连接的容器,默认就可以用对方名称进行通信:
在这里插入图片描述

2.不同bridge之间能够互相通信的原因是使用了Docker Engine上的DNS Resolver,直接对IP地址进行解析:
在这里插入图片描述

3.不同bridge上的容器天生隔离:
在这里插入图片描述

4.同一个容器可以接入到多个bridge上,例如经典三件套:Nginx-django-psql

在这里插入图片描述

7️⃣Host网络

一、概述:
Host网络是默认存在的网络,借用了宿主机的网络。

二、命令:
将容器连接到host网络:

docker run -it --name centos\_host --network=host prin/centos-vim-ifconfig /bin/bash

查看接口信息:
ifconfig:可以看到和宿主机的一样。
在这里插入图片描述

三、注意:
如果在host的容器和宿主上同时开放一个端口,会报错。

None网络:
一、概述:
none网络是默认存在的网络,默认只有一个回环接口,无法与外界通信。

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

转存中…(img-qDOBhIkx-1715744487145)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值