Docker中常用的三种网络种类
- bridge,应用都是容器形式,且都在一个宿主机上,各个容器需要互相通信的场景;
- host,容器和本机应用混杂且需要相互访问的情况;容器会使用宿主机的网络
- overlay,在不同宿主机的容器之间需要互相通信的情景。
注:docker中的网络常用的分为host(如果启动的容器绑定的是80端口,使用host网络驱动,应用程序将使用主机的ip+端口)、bridge(允许容器之间使用相同桥接网络进行通信,同时与使用其他桥接网络的容器进行隔离)、overlay(可以在多个docker宿主机之间创建一个分布式网络)
docker安装好后会默认创建一个bridge网络(docker0),也就是“default bridge”,未指定网络的容器会默认使用这个网络。一般使用自定义bridge较多,我们定义一个私有网络,可以将我们的应用与其他应用相隔离。
不指定driver时默认为bridge :
创建:
docker network create bridge-a && docker inspect bridge-a
比如我们使用一个数据库容器供多个网络中的应用使用,分别使用不同的数据库
docker network disconnect bridge container-a
多种场景的访问方式
容器A访问容器B
这种情况最好使用自定义到bridge网络,上面也提到了,自定义到bridge网络自带“容器名 => 容器IP”的解析能力,因此在容器A要想访问容器B,直接使用容器名称即可。
容器内访问容器外应用
通过docker0的Gateway访问到宿主机。查看一下docker0的gateway,在容器中使用gateway的ip就可以访问到宿主机。
容器外应用访问容器A
容器内应用要想开放访问,容器需要使用host网络,或者将端口映射到宿主机的端口,就可以像访问本地应用一样访问容器应用了。
机器A容器访问机器B本地应用
机器A容器中访问机器B的IP地址和应用的端口即可。
机器A本地应用访问机器B容器
只要机器B中的容器使用host网络或者将端口映射到宿主机(机器B)端口,就可以通过宿主机IP加端口访问。
机器A容器访问机器B容器
机器B中的容器使用host网络或者将端口映射到宿主机(机器B)端口,就可以通过宿主机IP加端口访问。