vlambda博客
学习文章列表

详解docker桥接网络模型



桥接网络模型提供了一种容器间通信和网络隔离的解决方案。参照下图剖析docker的桥接网络。



1. 当前宿主机容器运行状态

详解docker桥接网络模型

2. 查看当前宿主机网桥信息,interfaces列为空,说明下图的两个网桥均未绑定任何网络接口:

详解docker桥接网络模型

3. 两个网桥分属于不同的网段

详解docker桥接网络模型

4. 使用docker命令查看网桥信息,由此可看出上述中的宿主机网桥br-489950d8bb23 和 docker0 分别对应于 docker网桥my-bridge 和 bridge

详解docker桥接网络模型


详解docker桥接网络模型


详解docker桥接网络模型

意事项:

为了方便描述宿主机和docker网桥的关系,使用词语:docker网桥 和 宿主机网桥,可以这样理解:

宿主机网桥,是docker采用虚拟化技术虚拟出的物理设备,是docker网桥的实体。

5. 启动容器c39020e6f8d9,此时查看docker网桥my-bridge,发现Containers出现该容器Id,说明容器接入的是该网桥(在容器创建时docker run选项--network确定)

详解docker桥接网络模型

6. 在物理设备层是怎样实现容器接入网桥的呢?

请看:在容器启动的同时,宿主机多出网络接口veth723c891,且宿主机网桥br-489950d8bb23的interfaces同时出现该网络接口。

因此容器网络的一端为其内部的eth0网络接口,另一端为宿主机上的网络接口veth******;只要多个接入相同的网桥或在相同的网络命名空间内便可进行网络通信

详解docker桥接网络模型

详解docker桥接网络模型

7. 如果两个容器分别接入不同的网桥,则实现容器间的网络隔离容器间无法进行通信;

在这种情况下,采用“端口映射”(即将某个容器的端口绑定到宿主机的任意端口),可实现容器间的网络通信。

缺点:“端口映射”方式比较笨重且不能扩展,一旦某个容器绑定到主机的某个端口,则其他容器不能再使用该端口。

因此单机桥接网络只适用于本地开发环境以及非常小的网络应用。


注:“端口映射”是属于“桥接网络(bridge)”下的通信机制,切勿搞混了;

--net选项用于指定容器的网络通信方式,如下:

bridge默认方式(default),网桥模式

none容器没有网络栈(此时容器只有个lo网络接口,可理解为没有插网线的主机)

container:使用其它容器的网络栈,容器会加入其它容器的network namespace

host:容器使用宿主机网络,自身没有独立的网络栈;可以完全访问宿主机网络,该方式不安全;即容器内进程所使用的端口 都是宿主机的端口资源。