linux虚拟化之docker虚拟化---docker的网络与容器跨网络通信

docker的原生网络

第一种:None

用到none网络的容器只有一个loopback回环的网络,没有mac地址,ip等信息,只能ping通自己,不能跟外界通信,是一个被隔离起来的网络。
所以他可以做一些安全系数比较高的容器。

第二种:Host

基于宿主机的网络,跟主机的ip一模一样。他是直接使用的宿主机的网络,在创建容器的时候,没有进行net网络栈的隔离。在网络上没有做隔离。
但是这种容器与宿主机容易出现端口冲突问题

第三种:Bridge

桥接网络,大多数场景下我们使用的都是这种网络类型。
在安装docker服务的时候,就会默认生成一张docker0的网卡。容器默认使用的网络是docker0网络。docker0此时相当于一个路由器,基于此网络的容器,网段都是和docker0一致的。

解决不同网络的容器之间的通信问题

基于bridge网络类型,创建一个自定义的网络来实现容器不同网络的通信问题。
//创建一个bridge网络mynet

docker  network  create  -d   bridge   mynet
                             网卡类型 网卡名称

-d: 指定创建网卡的类型
查看一下,刚刚创建的网卡,就是红框内的(长串的id是一样的)
在这里插入图片描述
基于上面创建的网卡,建立两个容器

docker run -itd --name test3 --network mynet busybox:latest 
docker run -itd --name test4 --network mynet busybox:latest

这时候再创建一张网卡mynet2,这里指定他的网段和网关,这样创建的网卡,在创建容器时,就可以指定容器的ip了

docker network  create -d bridge --subnet  172.20.16.0/24 --gateway 172.20.16.1  mynet2

基于这张网卡,再创建两个容器,指定ip

docker run -itd --name test5 --ip 172.20.16.6 --network mynet2  busybox:latest 
docker run -itd --name test6 --network mynet2 --ip 172.20.16.8  busybox:latest

这时候可以尝试使用ping命令来验证他们是否可以互相通信
先验证同一个网络下的不同容器可不可以通信
进入test5,去ping容器test6
在这里插入图片描述
这里解释一下为什么可以直接ping另一个容器的容器名。
因为自定义网络自带了一个containerDNSserver功能(域名解析功能),所以他可以通过容器的名称通信。
此时的test3和test4也是一样的,可以互相通信
但是如果想要使不同网络下的容器进行通信,比如test3和test5进行通信,就需要将test3的网卡mynet给到test5

docker  network  connect  mynet  test5

这样test5就能够与使用mynet网卡的容器test3和test4进行通信。
但是注意,因为test6并没有使用mynet网卡,所以test6是不能与test3和test4通信的。
如果想要test6也能与test3和test4进行通信,只需要将上面指令中的test5改成test6即可

docker  network  connect  mynet  test6

这样test6也能够与test3和test4进行通信了

发布了9 篇原创文章 · 获赞 2 · 访问量 341

猜你喜欢

转载自blog.csdn.net/Rhythm_master/article/details/103995351