Docker中的网络与数据管理(网络)

Docker网络管理
Docker默认使用bridge(单主机互联)和overlay(可跨主机互联)两种网络驱动来进行容器的网络管理,若又需要,可自行定义网络驱动插件进行Docker容器的网络管理
(一)Docker默认网络管理
在进行Docker安装时,Docker会自动创建三种网络,如图

#docker network ls      //列举Docker中的所有网络

Docker中的网络与数据管理(网络)

图中显示Docker默认的三种网络分别是bridge(默认的bridge驱动网络)、host和none,其中bridge是容器创建时默认的网络管理方式,配置后可与宿主机通信而实现与互联网通信功能host和none属于无网络,容器添加进这两网络不能进行通信

2、默认的bridge的网络管理方式

(1)创建并启动容器

Docker中的网络与数据管理(网络)

#docker  run  -itd  --name=networktest  ubuntu   

//启动一个镜像名称为ubuntu的容器,并为启动后的容器命名为networktest

Docker中的网络与数据管理(网络)

(2) 使用网络查看指令查看网络详情

   #docker  network  inspect  bridge

Docker中的网络与数据管理(网络)

图中显示出bridge网络的所有详细信息,其中包括了使用默认的bridge网络管理方式启动的networktest的容器

 注意:只有在非集群环境下Docker提供的默认网络是bridge、none、host,但是在Docke  Swarm集群环境下,除了这三种默认的网络,还有docker_gwbridge和ingress两种默认网络.

(二)自定义网络

在Docker中,可以自定义bridge、overlay网络,也可以创建network plugin(网络插件)或在远程网络以实现容器网络的完全定制和控制

 1.Bridge network(桥接网络)

优点:可以较好的实现容器隔离,适合单主机的小型网络环境管理

缺点:不适用与大型的网络环境管理

  2.Overlay  network  in swarm mode(Swarm集群中的覆盖网络)

 只适用于需要服务的集群中的节点,而不会对外部其他服务或Docker主机开放

 3.Custom  network plugins(定制网络插件) 

 自定义网络插件会在Docker进程所在主机上作为另一个运行的进程

(三)自定义bridge网络

1.创建自定义网络

 #docker network create --driver bridge isolated_nw   //创建名为isolated_nw的网络

Docker中的网络与数据管理(网络)

Docker中的网络与数据管理(网络)

查看创建的网络是否成功

Docker中的网络与数据管理(网络)

2.使用自定义网络启动容器

#docker run --network=isolated_nw -itd --name=nwtest  busybox

//使用已经创建完成的自定义网络启动一个容器

(1)从官网拉取busybox镜像

Docker中的网络与数据管理(网络)

(2)创建一个名为nwtest的容器

Docker中的网络与数据管理(网络)

 查看容器详情

Docker中的网络与数据管理(网络)

3.为容器添加网络管理

#docker network connect bridge nwtest  //为容器nwtest添加默认的bridge网络管理方式

Docker中的网络与数据管理(网络)

4.断开容器网络连接

#docker network disconnect isolated_nw nwtset      //断开容器网络连接

Docker中的网络与数据管理(网络)

5.移除自定义网络

#docker network rm isolated_nw

(四)容器之间的网络通信

1.创建容器

(1)创建两个使用默认的bridge网络的容器

Docker中的网络与数据管理(网络)

(2)创建一个使用自定义的isloated_nw网络(需预先创建容器)的容器

Docker中的网络与数据管理(网络)

(3)为container2容器新增一个自定义的isolated_nw网络连接

Docker中的网络与数据管理(网络)

创建完成后,container1使用的是默认的bridge网络管理,container3使用的是自定义的isolated_nw网络管理,container2使用的是默认的bridge网络管理和自定义的isolated_nw网络管理

这三个容器的网络管理关系如下图

Docker中的网络与数据管理(网络)

可以看出,container1和container2在同一默认的bridge网络管理下,这两容器可以通信,

container3和container2在同一自定义的isolated_nw网络管理下,这两容器可以通信,

container1和container3在不同的网络环境下,这两容器不可以通信。

2.容器地址查看

进入container2容器,ifconfig查看当前容器被动态分配的ip地址

Docker中的网络与数据管理(网络)

container1容器被动态分配的ip地址

Docker中的网络与数据管理(网络)

container3容器被动态分配的ip地址

Docker中的网络与数据管理(网络)

3.容器通信测试

#ping -w 4 IP

#ping -w 4 容器名

IP验证:容器1验证容器2和容器3

Docker中的网络与数据管理(网络)

IP验证:容器2验证容器1和容器2

Docker中的网络与数据管理(网络)

容器名验证:容器2验证容器1和容器2

Docker中的网络与数据管理(网络)

4.容器通信总结:

  • 不同容器之间想要互相通信,必须在同一网络环境下;
  • 使用默认的bridge网络管理的容器可以使用容器IP进行通信,但无法使用容器名称进行通信;
  • 使用自定义网络管理容器则同时可以使用容器IP和容器名称进行通信