bridge
bridge 网络适用于在同一Docker主机上运行的容器。为了在不同Docker守护程序主机上运行的容器之间进行通信,您可以在OS级别管理路由,也可以使用 overlay 网络
当 Docker Daemon 启动后,会在宿主机上创建一个名为 docker0 的 Linux Bridge,在此宿主机上启动的 Docker Container 都会连接到这个虚拟网桥上。Docker Daemon 会从 docker0(一个虚拟的 L2 网络)子网中分配一个 IP 给 Container 使用,并设置 docker0 的 IP 地址为 Container 的默认网关。同时,在宿主机上创建一对 veth pair 虚拟网线设备,Docker Daemon 将 veth pair 设备的一端插入新建的 Container 中,并命名为eth0(容器的网卡),另一端插入 docker0 Linux Bridge 中,以 vethxxx 格式命名。
-
启用从Docker容器到外界的转发
默认情况下,连接到默认bridge网络的容器的流量 不会转发到外界。要启用转发,您需要更改以下设置。
-
配置Linux内核以允许 IP 转发
$ sysctl net.ipv4.conf.all.forwarding=1
-
将
iptables
的FORWARD
策略从DROP
改为ACCEPT
$ sudo iptables -P FORWARD ACCEPT
-
host
如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。
host模式网络对于优化性能以及在容器需要处理大量端口的情况下很有用,因为它不需要网络地址转换(NAT),并且不会为每个端口创建“ userland-proxy”。
overlay
overlay网络会在多种Docker daemon主机之间创建一个分布式的网络。此网络处于指定主机网络之上,允许连接该网络的容器在加密开启的情况下进行安全通信。
初始化群集或将Docker主机加入现有群集时,将在该Docker主机上创建两个新网络:
- 一个称为
ingress
的overlay网络,用于处理与群集服务有关的控制和数据流量。创建群集服务并且不将其连接到用户定义的overlay网络时,默认情况下它将连接到ingress
网络。 - 一个称为
docker_gwbridge
的 bridge 网络,它将各个Docker daemon连接到该集群中的其他守护 daemon。
none
使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。
macvlan
对于某些应用程序,比如需要监视网络流量,期望直接连接到物理网络,这种情况下,可以使用 macvlan 的网络模式,macvlan 驱动程序不仅将 IP 地址分配给容器,而且还将物理 MAC 地址分配给容器。通过 macvlan 还可以实现跨主机容器之前的通信
container
Container 模式,又称为 Docker links,是一种 Docker Container 之间的通信机制。如果一个新容器链接到一个已有容器,新容器将会通过环境变量获得已有容器的链接信息。通过提供给信任容器有关已有容器的链接信息,实现容器间的通信。
这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡设备通信