Docker 网络设置了容器如何与其余容器和外部服务通讯。为了取得网络访问,容器须要是 Docker 网络的一局部。容器可以通讯的方式取决于它的网络衔接。Docker 提供了五种规范网络形式来口头**网络性能:Bridge(桥接)、Host(主机)、Overlay(堆叠)、IPvLAN、Macvlan。
1、桥接网络
桥接网络在主机机器和容器之间构成一个虚构桥接。该网络上的容器可以相互通讯,但与未衔接到该网络的容器隔离。
每个容器都会取得一个唯一无二的 IP 地址。经过与主机的桥接衔接,这些容器还可以相互交互,与本地网络(LAN)和 Internet 互联。但是,它们不会以物理设备的方式出如今 LAN 上。
2、主机网络(Host Network)
经常使用主机网络形式的容器经常使用与主机机器相反的网络设置,而不会被隔离。它们没有独自的 IP 地址。相反,它们经常使用的任何端口都间接链接到主机网络。例如,假设容器进程经常使用端口8080,则可以经过192.168.1.101:8080(即主机的 IP 地址和端口号)访问它。
由于运行程序容器经常使用端口8080,因此不须要端口映射,由于在这种状况下,容器经常使用主机端口。咱们的数据库经常使用端口5432,因此可以经过主机的 IP 地址和5432端口启动访问。
3、堆叠网络(Overlay Network)
堆叠网络是超过多个 Docker 主机的网络。它们可以让这些主机上的容器相互通讯,而无需操作系统治理路由。
堆叠网络用于 Docker Swarm 集群。但是,假设有两个独自运转的 Docker 引擎,并且须要间接衔接它们的容器,也可以这样经常使用它们。
上图启动了简化。在实在场景中,正如容器一样,主机也会从堆叠网络失掉虚构 IP 地址,而且它们的范畴是相反的。
4、IPvLAN 网络
IPvLAN 是一种初级形式,可提供对容器的 IPv4 和 IPv6 地址启动详细控制的才干,它还可以处置第 2 层和第 3 层 VLAN 标志和路由。
假设你须要将容器服务衔接到已有物理网络,此形式会很有用。IPvLAN 网络具有自己的接口,其性能或者比基于桥接网络的网络更好。
上图显示了 IPvLAN 设置中的一切内容,包括容器,都有自己的 IP 地址,并且是网络的一局部。
5、Macvlan 网络
Macvlan 是一种更初级的选项,让容器能像网络上的物理设备一样运转。它经过为每个容器调配自己的 MAC 地址来成功这一点。
关于此类型的网络,你须要将主机的一个物理网络接口调配给虚构网络。此外,更宽泛的网络还应设置为处置来自具有少量容器的 Docker 主机的许多 MAC 地址。
6、经常使用哪种网络类型
桥接网络实用于大少数状况。这些网络上的容器可以经常使用 IP 地址和 DNS 称号相互通讯。它们还可以衔接到互联网和本地网络。
主机网络在须要间接经常使用主机的网络接口并且不须要分别容器网络时很有用。此设置使容器化的运行程序像主机网络的一局部一样运转。
堆叠网络在容器位于不同 Docker 主机上时须要间接通讯时是必需的。它们十分适宜为了提高牢靠性创立散布式运行。
在容器须要像网络上的物理设备一样运转时,Macvlan 网络很有用,例如监控网络流量。IPvLAN 网络实用于初级需求,例如对容器 IP 地址、标志和路由的特定控制。
7、创立网络
经常使用docker network create命令创立一个新网络。经过设置-d标志来指定要经常使用的驱动程序,例如桥接或主机。假设省略标志,将创立一个桥接网络。
在第一个终端窗口中运转以下命令:
docker network testnetwork d bridge
创立的网络 ID 将显示在终端中。目前,新网络还无法经常使用,由于还没有衔接任何容器。
但是,你可以经过在docker run命令中设置--network标志将新容器衔接到网络。在第二个终端窗口中运转以下命令:
docker run it
接上去,在第三个终端窗口中启动另一个 Ubuntu 容器,这次不经常使用--network标志:
docker run it
如今,经常使用它们的称号在两个容器之间启动通讯:
ping: bad address
容器尚未参与到同一个网络中,因此它们无法间接相互通讯。
经常使用第一个终端窗口将container2衔接到网络中:
docker network testnetwork container2
容器如今共享同一个网络,这使它们能够相互发现:
PING container2 : bytes bytes : seq ttl ms
Docker 可以在不从新启动容器的状况下自在治理网络衔接。了解了如何在创立容器后衔接容器,也可以从它们不再须要介入的网络中删除容器:
docker network disconnect testnetwork container2
假构想删除一个网络,须要先断开或中止经常使用该网络的一切 Docker 容器,而后将网络的 ID 或称号传递给network rm:
docker network rm testnetwork
总结
Docker 的网络系统为治理容器如何与其余容器、相邻容器和 Docker 主机通讯提供了多种方式。同一网络中的容器可以经常使用其称号或 IP 地址衔接。