Docker基础-19-网络-bridge模式和docker0详解
前面我们学习了两个容器和两个网络命名空间的通信过程,这篇来学习docker中的一种网络模式叫bridge,同时docker中单机网络还有host模式和none模式。这篇来详细学习下bridge,这个bridge就是表现形式就是前面我们看到的docker0这个网络接口。多个容器都是通过docker0这个接口,然后才行通信。也通过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了解更多信息。
更多推荐
所有评论(0)