一、简介
默认情况下容器与容器、容器与宿主机的网络是隔离开来的,
当你安装docker的时候,docker会创建一个桥接器docker0,通过它才让容器与容器、容器与宿主机之间通信。
Docker安装的时候默认会创建三个不同的网络,你可以通过命令查看这些网络。
二、默认网络
None Network
网络模式为none的,即不会为容器创建任何的网络环境。
一旦Docker Container采用了none网络模式,那么容器内部就只能使用loopback网络设备,不会再有其他的网络资源。
Host Network
如果你在创建容器的时候使用--network=host
选项,那么容器会使用宿主机的网络,容器与宿主机的网络并没有隔离。
使用这种网络类型的好处就是网络性能很好,基本上跟宿主机的网络一样,它很大的弊端就是不安全。
你可以在容器中更改宿主机的网络,如果你的程序是用root用户运行的,有可能会通过Docker容器来控制宿主机的网络。
当我们在容器中执行类似ifconfig命令查看网络环境是,看到的都是宿主机上的信息。
Bridge Network
桥接网络是默认的网络类型,我们可以使用下面的命令来查看默认的网络配置信息。
这儿桥接的网络名为docker0
。当我们启动一个容器的时候,每个容器会有它自己的虚拟网络接口连接到docker0
,并获得一个IP地址。
更多参考 >>> Docker Network入门用法
三、自定义网络
建议使用自定义的网桥来控制哪些容器可以相互通信,还可以自动DNS解析容器名称到IP地址。
Docker提供了创建这些网络的默认网络驱动程序,你可以创建一个新的 Bridge网络,Overlay网络 或 Macvlan网络。
你还可以创建一个网络插件或远程网络进行完整的自定义和控制。
你可以根据需要创建任意数量的网络,并且可以在任何给定时间将容器连接到这些网络中的零个或多个网络。
此外,你可以连接并断开网络中的运行容器,而无需重新启动容器。当容器连接到多个网络时,其外部连接通过第一个非内部网络以词法顺序提供。
更多参考 >>> Docker:网络模式详解
四、集群网络
Overlay networks
管理 Swarm 中 Docker 守护进程间的通信。你可以将服务附加到一个或多个已存在的 overlay
网络上,使得服务与服务之间能够通信。
Ingress network
是一个特殊的 overlay
网络,用于服务节点间的负载均衡。
当任何 Swarm 节点在发布的端口上接收到请求时,它将该请求交给一个名为 IPVS
的模块。IPVS
跟踪参与该服务的所有IP地址,选择其中的一个,并通过 ingress
网络将请求路由到它。
初始化或加入 Swarm 集群时会自动创建 ingress
网络,大多数情况下,用户不需要自定义配置,但是 docker 17.05 和更高版本允许你自定义。
Docker_gwbridge
是一种桥接网络,将 overlay
网络(包括 ingress
网络)连接到一个单独的 Docker 守护进程的物理网络。
默认情况下,服务正在运行的每个容器都连接到本地 Docker 守护进程主机的 docker_gwbridge
网络。
docker_gwbridge网络在初始化或加入 Swarm 时自动创建。大多数情况下,用户不需要自定义配置,但是 Docker 允许自定义。