Docker中的网络与数据管理(网络)
Docker网络管理
Docker默认使用bridge(单主机互联)和overlay(可跨主机互联)两种网络驱动来进行容器的网络管理,若又需要,可自行定义网络驱动插件进行Docker容器的网络管理
(一)Docker默认网络管理
在进行Docker安装时,Docker会自动创建三种网络,如图
#docker network ls //列举Docker中的所有网络
图中显示Docker默认的三种网络分别是bridge(默认的bridge驱动网络)、host和none,其中bridge是容器创建时默认的网络管理方式,配置后可与宿主机通信而实现与互联网通信功能,host和none属于无网络,容器添加进这两网络不能进行通信
2、默认的bridge的网络管理方式
(1)创建并启动容器
#docker run -itd --name=networktest ubuntu
//启动一个镜像名称为ubuntu的容器,并为启动后的容器命名为networktest
(2) 使用网络查看指令查看网络详情
#docker network inspect bridge
图中显示出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的网络
查看创建的网络是否成功
2.使用自定义网络启动容器
#docker run --network=isolated_nw -itd --name=nwtest busybox
//使用已经创建完成的自定义网络启动一个容器
(1)从官网拉取busybox镜像
(2)创建一个名为nwtest的容器
查看容器详情
3.为容器添加网络管理
#docker network connect bridge nwtest //为容器nwtest添加默认的bridge网络管理方式
4.断开容器网络连接
#docker network disconnect isolated_nw nwtset //断开容器网络连接
5.移除自定义网络
#docker network rm isolated_nw
(四)容器之间的网络通信
1.创建容器
(1)创建两个使用默认的bridge网络的容器
(2)创建一个使用自定义的isloated_nw网络(需预先创建容器)的容器
(3)为container2容器新增一个自定义的isolated_nw网络连接
创建完成后,container1使用的是默认的bridge网络管理,container3使用的是自定义的isolated_nw网络管理,container2使用的是默认的bridge网络管理和自定义的isolated_nw网络管理
这三个容器的网络管理关系如下图
可以看出,container1和container2在同一默认的bridge网络管理下,这两容器可以通信,
container3和container2在同一自定义的isolated_nw网络管理下,这两容器可以通信,
container1和container3在不同的网络环境下,这两容器不可以通信。
2.容器地址查看
进入container2容器,ifconfig查看当前容器被动态分配的ip地址
container1容器被动态分配的ip地址
container3容器被动态分配的ip地址
3.容器通信测试
#ping -w 4 IP
#ping -w 4 容器名
IP验证:容器1验证容器2和容器3
IP验证:容器2验证容器1和容器2
容器名验证:容器2验证容器1和容器2
4.容器通信总结:
- 不同容器之间想要互相通信,必须在同一网络环境下;
- 使用默认的bridge网络管理的容器可以使用容器IP进行通信,但无法使用容器名称进行通信;
- 使用自定义网络管理容器则同时可以使用容器IP和容器名称进行通信