docker容器技术---docker网络

docker原生网络

在这里插入图片描述
none:禁用网络接口。
默认用桥接模式。
在这里插入图片描述

在这里插入图片描述
host网络模式

docker run -it --name vm --network host ubuntu

不使用- -network指定则默认使用桥接模式
在这里插入图片描述

在这里插入图片描述

none模式
创建的容器不需要使用网络,则使用网络none模式把网络禁掉。
在这里插入图片描述

doker自定义网络

在这里插入图片描述
在这里插入图片描述

docker network create -d bridge my_net1
docker network ls
docker run -it --name  vm1  --network my_net1 ubuntu
docker network inspect my_net1

在这里插入图片描述

指定子网和网关

docker network create -d bridge --subnet 172.22.0.0/24 --gateway 172.22.0.1  my_net2
docker network ls
docker run -it --name vm2 --network my_net2 ubuntu

自定义网络给容器指定IP,但自定义网络必须有–subnet --gateway 参数指定子网和掩码、网关。
在这里插入图片描述
宿主机
brctl show
在这里插入图片描述
这样就可以通信。

docker network connect my_net2 vm1

在这里插入图片描述

在这里插入图片描述

docker同主机容器通信

在这里插入图片描述
DNS解析功能必须在自定义网络中才可以生效,在docker自带的bridge,none,host中不可以使用。
vm1和vm2为同一主机上的两个容器,使用同一自定义网络,(不使用同一自定义网络是不可以通信的,因为docker
网络是相互隔离的
),发现可以通过容器名ping通,不需要知道IP。

在这里插入图片描述
两个容器间网络共享。
在这里插入图片描述
先使用默认网络方式创建容器vm1,
在这里插入图片描述
再添加参数–network container:vm1创建vm2,发现两个容器ip一样。这就是容器的网络共享。
在这里插入图片描述
在这里插入图片描述
–link 其实是修改了/etc/hosts文件。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
env查看
把link过来的容器变量也设置过来了。
在这里插入图片描述
如果vm1 通过–link关联的容器关闭,而重新创建的容器占用关闭容器的IP,再把刚刚关闭的容器启动起来,这时这个启动的容器ip会改变为一个新的,vm1的/etc/hosts文件中IP也会自动改变,自动匹配。

容器如何连接外网

在这里插入图片描述

宿主机访问容器的过程

宿主机访问本机容器使用的是iptables DNAT。
访问宿主机的80端口会做nat地址转换,转换到容器的80端口。
查看容器的端口映射:

docker port 容器名

在这里插入图片描述
首先访问宿主机的80端口,然后做目的地址转换,转换到真正要访问的应用所在容器的端口。
在这里插入图片描述

iptables -t nat -nL

在这里插入图片描述

外部主机访问容器或容器之间访问的过程

外部主机访问容器或者容器之间访问是通过docker-proxy实现的。

每做一个端口映射,就会有一个docker-proxy进程开启。
docker-proxy就会处理相应的端口转发的数据包。
在这里插入图片描述
在这里插入图片描述

跨主机容器通信

上面讲的是同一台主机上的容器之间的通信,那么跨主机的容器之间如何通信呢?

macvlan

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
overlay技术需要应用隧道技术封包后解包,这样就会有额外的cpu和网络开销。和macvlan对比起来性能上还是会有损失。
macVLAN网络方案直接使用物理接口。
通过命令打开网卡混杂模式。

ip link set device promisc on

在两台主机上添加网卡后,创建网络。
两台主机创建同一子网。
在这里插入图片描述
这种macvlan 网络驱动的方式IP是自己分配的。一定要注意自己手动指定IP,网络信息都需要自己维护。不指定会自动分配。
在这里插入图片描述
发现两台主机上新建的两个容器可以互相ping通。
brctl show 查看发现没有走桥接。没有生成新的桥接口。直接使用的物理接口。容器的接口直接与主机网卡连接,无需NAT或端口映射
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这就实现了两台主机间容器的通信。但是macvlan会独占主机网卡,可以使用vlan子接口实现多macvlan网络。

在这里插入图片描述

在这里插入图片描述
不同vlan之间彼此是隔离的。所以ping不通。
在这里插入图片描述
如果希望不同vlan的容器之间通信,可以在三层上通过网关将macvlan网络连通起来。
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值