七、Docker网络bridge

一、前言

我们在一个容器中可以直接ping通www.baidu.com,也可以直接ping通任意一个地址,那么这个究竟是怎么实现的呢?

network

首先先来看下虚拟机中的网络列表:

sudo docker network ls

可以看到有三个网络:


15200008-5624c4b240b30028.png
image.png

学习bridge需要一个工具:bridge-utils

sudo yum install bridge-utils

二、bridge

1.容器间的连接

我现在有一个容器test1:

15200008-7a5ee7fad97e5091.png
test1

这个容器就是连在bridge上边的。
如何验证呢?
<1>首先,通过network的id,可以看到这个network的细节

sudo docker network inspect c743a
15200008-d10c1b0496a89a1e.png
image.png

里面就有test1的相关信息,说明test1的container连接到了bridge的网络上边。
<2>输入命令:

ip a 

可以看到有两个接口:


15200008-f0a0182472f346bf.png
两个接口

第一个是docker0
第二个veth是虚拟机的internet,可以通过veth去连接netword-namespace
然后再来看test1的ip a :

sudo docker exec test1 ip a
15200008-b6b92435ccb9d419.png
test1的ip a

可以看到也有一个eth0,其实这个eth0和虚拟机的veth是一对,也就是说我们这个container通过这一对eth连到了主机上面。具体来讲是连接到了docker0面,这个时候就需要用到bridge0-utils工具了。
运行

brctl show

15200008-c0c448a0131bfcb0.png
brctl show

也就是说veth6d1ee84这个接口是连接到了docker的namespace上的。
总结容器间的连接就相当于是一个屋子里连接同一个路由器的两台可联网设备,相当于局域网,相互之间可以通信,这个路由器就是docker0

2.网络的连接

对于单个容器来讲,它是如何访问internet的呢?我们知道虚拟机可以通过eth0端口去访问外网,容器中的数据包经过docker0经过网络地址转换,通过eth0间接去访问外网的。这个网络地址转换其实就是通过iptables去实现的。


15200008-578e9a4c6b980ab8.png
容器通信
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值