1、默认网络

1.1、查看 docker 网络

  1. docker network ls

Docker 中默认的三种网络分别为bridge、host和none,其中名为bridge的网络就是默认的bridge驱动网络,也是容器创建时默认的网络管理方式,配置后可以与宿主机通信从而实现与互联网通信功能,而host和none属于无网络,容器添加到这两个网络时不能与外界进行网络通信。
这里介绍的三种网络bridge、host和none都是在非集群环境下Docker提供的默认网络,而在Docker Swarm集群环境下,除了这三种默认环境外,Docker还提供了docker_gwbridge和ingress两种默认网络。

1.2、查看容器使用的网络情况

  1. docker network inspect bridge

2、网络类型

虽然 Docker 提供的默认网络的使用比较简单,但是为了保证各容器中应用的安全性,在实际开发中更推荐使用自定义的网络进行容器管理。在Docker中,可以自定义Bridge网络、overlay网络,也可以创建network plugin(网络插件)或者远程网络以实现容器网络的安全定制和控制。

2.1、Bridge network(桥接网络):

为了保证容器的安全性,我们可以使用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、自定义网络

  1. 1docker network create --driver bridge isolated_nw
  2. 创建一个基于bridge驱动的名称为isolated_nw的网络,其中--driver(可简写为-d)用于指定网络驱动类型,isolated_nw就是新创建的网络名称,需要说明的是,--driver bridge可以省略,省略时Docker会默认使用基于bridge驱动来创建新的网络
  3. 2docker run -itd --name=nwtest --network=isolated_nw busybox
  4. 会创建一个名为nwtest的容器,指令中的--newwork参数指定了该容器的网络连接为自定义的isolated_nw,通过docker inspect nwtest指令可以查看启动后的容器详情,来核查其网络管理方式。
  5. 3docker network connect bridge nwtest
  6. 会为容器nwtest另添加一种默认的bridge网络管理方式。再次使用Docker inpect nwtest指令查看该容器网络详情
  7. 4docker network disconnect isolated_nw nwtest
  8. 断开网络连接的指令与连接网络的指令类似,在使用时也需要指定网络名称和镜像名称
  9. 5docker network rm isolated_nw
  10. 移除名称为isolated_nw的自定义网络,当网络移除成功后,会返回网络名称

4、容器间的网络通信

4.1、创建两个使用默认的bridge网络的容器

  1. docker run -itd --name c1 busybox
  2. docker run -itd --name c2 busybox

4.2、创建一个使用自定义的isolated_nw网络(需要预先创建)的容器

  1. docker network create --driver bridge isolated_nw
  2. docker run --network=isolated_nw -itd --name c3 busybox

4.3、为container2容器新增一个自定义的sulated_nw网络连接

  1. docker network connect isolated_nw c2

c1:172.18.0.3【bridge】
c2:172.18.0.4【bridge】
172.20.0.3【isolated_nw】
c3:172.20.0.2【isolated_nw】

结论:

c1能跟c2进行通信,不能跟c3进行通信
c2能跟c1、c3进行通信