Docker默认使用bridge(单主机互联)和overlay(可跨主机互联)两种网络驱动来进行网络的容器管理。如果需要用户还可以自定义网络驱动插件进行Docker容器的网络管理
1、Docker默认网络管理
在进行Docker安装时,docker就会自动创建三种网络。客户端可以通过网络管理指令进行查看具体操作指令如下:
从上图可以看出,Docker中默认的三种网络分别为bridge、host、和none,其中名为bridge的网络就是默认的bridge驱动网络,也是容器创建时默认的网络管理方式,配置后可以与宿主机通信从而实现与互联网通信功能,而host和none属于无网络,容器添加到这两个网络时不能与外界网络通信。
下面通过一个实例来演示默认的bridge网络管理方式,其执行过程如下:
(1)创建并启动容器。在终端窗口中执行如下指令。
(2)使用网络查看指令查看网络详情,具体操作指令如下:
2、自定义网络介绍
虽然Docker提供的默认网络的使用比较简单,但是为了保证各容器中应用的安全性,在实际开发中更推荐使用自定义的网络进行容器管理。
在Docker中,可以自定义bridge网络、overlay网络,也可以创建network plugin(网络插件))或者远程网络以实现容器网络的完全定制和控制。接下来将分别针对这几种自定义网络进行讲解。
2.1 Bridge networks (桥接网络)
为了保证容器的安全性,我们可以使用基F bridge的驱动创建新的bridge网络,这种基于bridge驱动的自定义网络可以较好地实现容器隔离。
需要说明的是,这种用户自定义的基于bridge 驱动的网络对于单主机的小型网络环境管理是一个不错的选择,但是对于大型的网络环境管理( 如集群)就需要考虑使用自定义overlay集群网络。
2.2 Overlay network in swarm mode (Swarm集群中的覆盖网络)
在Docker Swarm集群环境下可以创建基于overlay驱动的自定义网络。为了保证安全性,Swarm集群使自定义的overlay网络只适用于需要服务的群集中的节点,而不会对外部北或者Docker主机开放。
2.3 Custom network plugins (定制网络插件)
如果前面几种自定义网络都无法满足需求时,就可以使用Docker提供的插件来自定义网络驱动插件。自定义网络插件会在Docker进程所在主机上作为另一个运行的进程。
自定义网络驱动插件与其他插件遵循相同的限制和安装规则,所有插件都使用Docker提供
的插件API,并且有一个包含安装、启动、停止和激活的生命周期。由于自定义网络插任使用较少,所以读者只需了解即可。
3、自定义bridge网络
3.1创建自定义网络
在Docker主机上可以使用docker network create指令来创建网络,具体操作指令如下:
执行上述指令可以创建一个基于bridge驱动的名称为isolated_nw的网络。其中–driver用于指定网络驱动类型,isolated_nw就是新创建的网络名称,需要说明的是,–driver bridge可以省略,省略时Docker会默认使用基于bridge驱动来创建新的网络。
创建完网络后,可以使用docker network ls指令查看创建的网络是否成功,
从上图看出,新创建的isolated_nw网络已经在列表中展示出来,这说明新的bridge网络创建成功。除了docker network ls指令外,还可以使用docker network inspect指令查看新建网络的详细信息。
3.2使用自定义网络启动容器
自定义网络创建成功后,就可以使用该网络启动一个容器,具体操作指令如下:
使用docker inspect nwtest指令可以查看启动后的容器网络详情,来核查其网络管理方式,
3.3为容器添加网络管理
名为nwtest的容器使用的只有自定义的isolated_nw一种网络管理方式,我们还可以继续为该容器添加其它网络管理方式,具体操作指令如下:
3.4断开容器网络连接
容器可以连接网络,也可以断开网络。这里断开nwtest容器的自定义网络isolated_nw为例进行演示,断开网络连接的指令如下:
3.5移除自定义网络
当不再需要某个网络之后,,可以将该网络移除,但在移除网络之前,一定先将所有与改网络连接的容器断开
4、容器之间的网络通信
4.1创建容器
(1)创建两个使用bridge网络的容器,具体操作指令如下:
执行上述指令后,会创建两个名为container1和container2的容器,同时他们都是使用默认的bridge进行网络管理的。
(2)创建一个使用自定义的isolated_nw网络(需要预先创建)的容器,具体操作指令如下:
(3)为container2容器新增一个自定义的isolated_nw网络连接,具体操作指令如下:
4.2容器地址查看
查看各个容器的网络地址。
进入container2容器,具体操作指令如下:
4.3容器通信测试
首先,使用docker attach container1指令进入container1容器内部,使用ping指令连接container3来查看是否能够通信,
从图可看出在container1内部不管是使用“ping -w 4 IP”还是“ping -w 4 容器名称”的指令都无法连通container3.这也就验证了两个容器不在同一个网络环境下,无法通信的判断。接着,使用docker attach container2指令进入container2容器内部,使用容器IP分别连接container1和container3进行通信测试,效果如下图所示: