Docker基础-19-网络-bridge模式和docker0详解

        前面我们学习了两个容器和两个网络命名空间的通信过程,这篇来学习docker中的一种网络模式叫bridge,同时docker中单机网络还有host模式和none模式。这篇来详细学习下bridge,这个bridge就是表现形式就是前面我们看到的docker0这个网络接口。多个容器都是通过docker0这个接口,然后才行通信。也通过docker0去和本机的以太网接口连接,所以容器内部才能访问外面,例如下载软件等操作。

 

环境准备

为了下面练习,我们先准备以下环境,本机上只允许一个test1的busybox的容器。

学习新命令 docker network

我们通过docker network命令,可以看到本机docker环境有三种网络模式,我们这篇只学习bridge,中文意思就是桥接, bridge是docker网络中最重要的一种网络模式。上面我们容器test1,其实是通过连接到bridge上的,下面就来证明这个结论。

通过docker network inspect bridge这个网络的ID,我们就可以查看这个bridge网络有哪些容器使用了它。观察打印出来的json内容,找到containers字段。

我们看到了test1容器名称和容器id和容器的MAC和IP地址,这说明了test1这个容器连到了bridge这个网络上面。下面来讨论,这个bridge到底是一个什么样的网络呢。下面,我们在linux本机输入ip link查看信息。

根据前面两篇的知识,我们知道红圈这个veth接口是由于新开了一个容器,就会在linux本机产生一个网络命名空间,而且是成对出现,也就是容器里面还有一个接口和这个是一对进行连接的。下面我们查询test1这个busybox容器的ip link信息。

红圈加箭头连接的是一对,这一对都连接到docker0上。下面来看看怎么证明veth77433c3是连接到了docker0上面。

 

先安装一个工具包,在外层linux本机上执行以下命令

然后输入命令brctl show来查看

这个结果就证明了接口veth77433c3是连接到了docker0这个网络上。以上是一个容器的效果,现在我们再次启动一个test2的容器。再次复习上面几个命令,同样看看效果。

再次找到Containers字段,看看最新内容。

说明两个容器test1和test2都连接到了bridge网络。我们在linux本机上运行下ip a或者ip link命令

确实多了一个接口,下面我们观察第二个红圈这个接口,再次使用brctl show命令。

发现又多了一个接口veth3b769bc连接到了docker0,到这里,我们两个容器其中一端配对的接口都连接到了docker0网络,由于容器里接口和容器外linux上一个接口是配对。这个画面,很容易让我们想起前面文章的一个图片,两个容器通信的图片。

其实这个图也很像线上生活中的,多个电脑连接到路由器,所以电脑之间能通信的原理。这篇,我们通过学习和了解docker0这个网络,再次解释了多个容器之间通信的原理。下面,提一下,容器内部为什么能上网的原因。

这里我容器能连接百度网站,当然我外层linux机器能上网。下面这张图解释了容器是如何通过外层主机访问internet。

 

这个图中eth0表示我们外层linux主机,这个主机eth0网卡是能够访问internet。关键的点就是docker0通过NAT(网络地址转换)的机制访问到eth0上,从而访问internet网络。其实,在一个公司,甚至几百台电脑能上网,都是通过NAT技术来实现的。一个公司可能就一个公网IP地址,几百台电脑组成局域网,所有电脑都能上网,都是从这个公网地址出去。有兴趣的,可以去网上搜索NAT了解更多信息。

 

 

  • 14
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值