08-Docker网络

本文深入探讨了Docker的网络机制,从docker0桥接网络开始,解释了容器间如何通信,以及evth-pair技术的作用。介绍了--link和自定义网络的概念,强调了自定义网络在容器名访问和网络隔离上的优势。最后展示了如何创建和使用自定义网络,并通过实例验证了不同网络间的连通性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Docker网络

理解docker0网络

测试

在这里插入图片描述

三个网络

# 问题docker是如何处理容器网络访问的?

在这里插入图片描述

原理

1、我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,就会有一个网卡docker0桥接模式,使用的技术是 evth-pair技术!

再次测试ip addr

在这里插入图片描述

2、在启动一个容器测试,发现又多了一对网卡~!

在这里插入图片描述

# 我们发现这个容器带来网卡,都是一对对的
# evth-pair就是一对的虚拟设备按口,他们都是成对出现的,一段连着协议,一段被此相连正因为有这个特性。 
# evth-pair充当一个桥梁,连接各种虚拟网络设备的
# Openstac.Docker容器之间的连接,ovs的连接,都是使用evth-pair技术

3、我们来测试下 tomcat01和tomcat 02是否可以ping通!

[root@tianqinglong /]# docker exec -it tomcat02 ping 172.18.0.2

#结论:容器和容器之间是可以互相ping通的!

绘制一个网络模型图:

在这里插入图片描述

结论:tomcat01和tomcat02是公用的一个路由器,docker0。

所有的容器不指定网络的情况下,都是docker0路由的,docker会给我们的容器分配一个默认的可用IP

小结

在这里插入图片描述

Docker中的所有的网络接口都是虚拟的。虚拟的转发效率高!(内网传递文件!)

只要容器删除,对应网桥一对就没了!

容器互联 --link

思考一个场景,我们编写了一个微服务,database url=ip:,项目不重启,数据库ip换掉了,我们希望可以处理这个问题,可以名字来进行访问容器?

在这里插入图片描述

在这里插入图片描述

本质探究: --link就是我们在hosts配置中增加了一个172.18.0.3 tomcat02 312857784cd4

我们现在玩Docker 已经不建议使用–link 了!

自定义网络!不适用docker0 !

dockerO问题:他不支持容器名连接访问!

自定义网络

查看所有的docker网络

在这里插入图片描述

网络模式

bridge:桥接docker(默认,自己创建也使用bridge模式)

none:不配置网络

host :和宿主机共享网络

container:容器网络连通!(用的少!局限很大)

测试

# 我们直接启动的命令 --net bridge.而这个就是我们的docker0
docker run -d -p --name tomcat01 tomcat
docker run -d -p --name tomcat01 --net bridge tomcat

# docker0特点,默认,城名不能访问,--link可以打通连接!

# 我们可以自定义一个网络!
[root@tianqinglong /]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
eb21272b3a35ceaba11b4aa5bbff131c3fb09c4790f0852ed4540707438db052
[root@tianqinglong  /]#docker network 1s
NE TwORK ID		NAME		DRIVER		SCOPE
Sa008co15cac	bridge		bridge		local
db44649a9bff	composetest_default		bridge		local
ae2b6209c2ab	host		host		local
eb21272b3a35	mynet		bridge		local

我们自己的网络就创建好了!

在这里插入图片描述

# 启动容器 用自己的网络
[root@tianqinglong /]#docker run -d -P --name tomcat-net-01 --net mynet tomcat
[root@tianqinglong /]#docker run -d -P --name tomcat-net-02 --net mynet tomcat

# 再次测试ping 连接 都可以ping通
[root@tianqinglong /]# docker exec -it tomcat-net-01 ping 192.168.0.3
# 现在不使用--link也可以ping名字了!
[root@tianqinglong /]# docker exec -it tomcat-net-01 ping tomcat-net-02

我们自定义的网络docker都已经帮我们维护好了对应的关系,推荐我们平时这样使用网络!

网络连通

在这里插入图片描述

在这里插入图片描述

docker network connect mynet tomcat01
#测试打通tomcat01 - mynet

#连通之后就是将tomcat01放到了mynet网络下

#一个容器两个ip地址!

在这里插入图片描述

# 01 连通 ok
[root@tianqinglong /]# docker exec -it tomcat01 ping tomcat-net-01
PING tomcat-net-o1(192.168.0.2)56(84) bytes of data.
64 bytes from tomcat-net-o1.mynet (192.168.0.2): icmp_seqm1 tt1m64 timem0.072 ms
64 bytes from tomcat-net-01.mynet (192.168.0.2): icmp_seqm2 tt1m64 timem0.070 ms
# 02是依旧打不通的
[root@tianqinglong /]# docker exec -it tomcat02 ping tomcat-net-01
ping: tomcat-net-01:Name or service not known

结论∶假设要跨网络操作别人,就需要使用docker network connect 连通 !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值