上一篇文章docker网络之Linux网络命名空间(namespace)中我们了解了一些关于网络命名空间的知识,以及很重要的veth pair。这一节我们继续来了解一下docker容器之间是如何通信的。
docker原生网络种类
docker安装会在自动在机器上创建三种网络模式,使用docker network ls
命令查看一下
Docker 安装时会创建一个 命名为 docker0
的 linux bridge。如果不指定--network,创建的容器默认都会挂到 docker0
上。
执行ip a
命令,我们看下结果
vethebb3869@if19
。vethebb3869@if19
会挂到docker0
上。
那么vethebb3869@if19
这个是什么呢?还记得我们上一篇文章中提到的成对出现的veth这个玩意吗?我们先看进入容器看下ip a
eth0@if20
就是和宿主机中的vethebb3869@if19
是成对的veth。那么容器之间通信的秘密就很简单了,容器和宿主之间通过成对的veth来连接,在容器外的veth挂在
docker0
上,容器之间通过docker0
这个桥梁实现了互相通信,如下图所示意
那么如何证明vethebb3869@if19
是挂在docker0
上的呢?我们需要安装一个工具
sudo yum install -y bridge-utils
安装完成后,执行
brctl show
结果如下
我们可以看到interfaces列下就是vethebb3869。
网友评论