Docker的网络类型及驱动器

计算机如果不能够联网,其价值就要大打折扣。类似的,一个Docker容器也需要通过网络访问其他资源,或者被其他资源访问。这就涉及到Docker容器实例的网络,也与Docker宿主机的网络息息相关。

总的来说,Docker的网络是一个通过网络驱动器(driver)实现的Docker子系统。不同的网络驱动器,能够创建具有不同网络特性的Docker容器实例。

目前(Docker v18.03),Docker内置提供如下的网络驱动器:

1. bridge

Docker容器实例默认即使用该网络驱动器,-d=bridge明确使用该网络驱动器。

该网络驱动器适用于独立的容器实例之间通信,但是这些容器实例必须位于同一个宿主机。在bridge网络中,各个独立的容器实例都是连接到一个bridge,并通过bridge通信。

在Docker环境中,默认即已经创建了一个名为bridge的网络。后续启动的容器实例,如果没有指明网络驱动器,则默认加入到该网络。也可以专门创建一个定制的bridge网络,创建的bridge网络会覆盖默认的bridge网络。定制的bridge网络,最大的好处是默认即支持服务的自动发现。

在bridge网络中,每次启动一个容器实例,都会按照顺序获取网络IP。所以重启容器实例后,可能会发现容器的IP变化了。

bridge网络默认不支持IPv6。

2. host

-d=host明确使用该网络驱动器。

该网络驱动器适用于Linux宿主机上的独立的容器实例。容器实例与容器宿主机之间没有网络隔离,容器实例直接使用宿主机的网络。
host网络默认不支持IPv6。

3. overlay

-d=overlay明确使用该网络驱动器。

该网络驱动器适用于Docker宿主机集群中的各个独立的容器实例之间通信。为集群中的Docker容器实例提供跨多个Docker引擎的网络连接。

4. macvlan

-d=macvlan明确使用该网络驱动器。
该网络驱动器适用于与需要有MAC地址的容器实例。
在某些历史遗留应用中,只能通过MAC通信,与之通信的容器实例也必须拥有MAC地址。这时容器实例就如同真实的物理设备一样。

5. none

-d=none禁用容器实例中的网络功能。通常,这表明要使用其他的第三方网络驱动器。

关于其他第三方网络驱动器,请参考https://store.docker.com/search?category=network&q=&type=plugin

参考链接:

https://docs.docker.com/network/

标签:Docker 发布于:2019-10-19 18:22:01