Docker(六)--Docker网络--单机、跨主机容器通信


一、本地节点通信

1.DNS

  • 容器之间除了使用ip通信外,还可以使用容器名称通信。
  • docker 1.10开始,内嵌了一个DNS server。
  • dns解析功能必须在自定义网络中使用。
  • 启动容器时使用 --name 参数指定容器名称。

2.joined容器

  • Joined容器一种较为特别的网络模式。
  • 在容器创建时使用- -network=container:vm1指定。(vm1指定的是运行的容器名)
  • 处于这个模式下的 Docker 容器会共享一个网络栈,这样两个容器之间可以使用localhost高效快速通信。

两个容器共享一个网络栈
[root@server7 ~]# docker run -d --name web1 --network my_net1 nginx
[root@server7 ~]# docker run -it --rm --network container:web1 --name web2 busybox
在这里插入图片描述
web1容器的ip为 172.17.0.2 ,我们使用joined网络模型再新建容器:
发现和web1容器一模一样,即指定的容器使用相同网络栈。需要注意的点是:这两个容器监听的端口不能是一样的。
在这里插入图片描述

3.端口映射

外部主机访问容器可以通过DNAT规则和docker-proxy,只要有一种正常就能通信

SNAT是源地址转换、DNAT是目标地址转换
区分这两个功能可以简单的由服务的发起者是谁来区分,内部地址要访问公网上的服务时,内部地址会主动发起连接,将内部地址转换成公有ip。网关这个地址转换称为SNAT;当内部需要对外提供服务时,外部发起主动连接。路由器或着防火墙的网关接收到这个连接,然后把连接转换到内部,此过程是由带公有ip的网关代替内部服务来接收外部的连接,然后在内部做地址转换,此转换称为DNAT主要用于内部服务对外发布。

在这里插入图片描述
我们可以看到一条DNAT中重定向的策略:即外部访问本机的80端口时,会重定向到172.17.0.2 的80端口。这就是端口重定向机制,而docker中使用的是一种双冗余机制;
重启容器后,DNAT规则和docker-proxy策略会自动恢复

4.不同网段的容器通信

见上一篇总结!

5.双冗余机制

容器访问外网是通过iptables的SNAT(源地址转换)实现的
在这里插入图片描述
docker proxy:
外网访问容器用到了docker-proxy和iptables的DNAT(目标地址转换)
宿主机访问本机容器使用的是iptables DNAT
外部主机访问容器或容器之间的访问是docker-proxy实现
在这里插入图片描述
我们来进行双冗余测试:
我们先将iptables中的端口映射删掉:
在这里插入图片描述
但是此时外部仍然是可以访问的:
在这里插入图片描述
我们再把进程中的docker-proxy删掉:
在这里插入图片描述
在外部继续访问:已不能访问
在这里插入图片描述
这就是双冗余机制,只要有一种机制存在,就能运行。
本地容器之间的通信是通过网桥转发的,容器都连接的是docker0网桥:
重启后均会恢复在这里插入图片描述
在这里插入图片描述在这里插入图片描述

二、跨主机容器通信

  • 跨主机网络解决方案
    docker原生的overlay和macvlan
    第三方的flannel、weave、calico
  • 众多网络方案是如何与docker集成在一起的
    libnetwork docker容器网络库
    CNM (Container Network Model)这个模型对容器网络进行了抽象

CNM分三类组件
Sandbox:容器网络栈,包含容器接口、dns、路由表。(namespace)
Endpoint:作用是将sandbox接入network (veth pair)
Network:包含一组endpoint,同一network的endpoint可以通信。
在这里插入图片描述

macvlan网络方案实现

  • Linux kernel提供的一种网卡虚拟化技术。
  • 无需Linux bridge,直接使用物理接口,性能极好。

macvlan网络结构分析

  • 没有新建linux bridge
  • 容器的接口直接与主机网卡连接,无需NAT或端口映射。
  • macvlan会独占主机网卡,但可以使用vlan子接口实现多macvlan网络
  • vlan可以将物理二层网络划分为4094个逻辑网络,彼此隔离,vlan id取值为1~4094

macvlan网络间的隔离和连通
macvlan网络在二层上是隔离的,所以不同macvlan网络的容器是不能通信的。
可以在三层上通过网关将macvlan网络连通起来。
docker本身不做任何限制,像传统vlan网络那样管理即可。

1.相同网段进行通信

清除不要的网络
在这里插入图片描述两台虚拟机各添加一块虚拟网卡
在这里插入图片描述

开启混杂模式并激活:混杂模式就是接收所有经过网卡的数据包,包括不是发给本机的包
server7:
在这里插入图片描述
创建私有网络,指定macvlan驱动,指定直接使用物理网卡通信:
使用macvlan模式最好手动设置ip,因为此模式下自动设置的ip与本机没有关系:
在这里插入图片描述
server8以上类推
注:网段必须和server7上的私有网络的网段相同才能通信。
在这里插入图片描述
测试已通

2.补充

在实际生产环境中,大量的用户需要私有网络,我们如果不断的增加网卡其实不太合理,因为硬件有限制,所以我们就可以使用----vlan可以将物理二层网络划分为4094个逻辑网络,彼此隔离,vlan id取值为1~4094,我们就可以通过这种方式来进行创建。

我们在server1上进行操作:
在这里插入图片描述
我们可以通过这种方式来增加子网的数量。我们现在用的就是通过物理网卡子接口的方式来创建不一样的虚拟网络:
在这里插入图片描述

macvlan网络间的隔离和连通
macvlan网络在二层上是隔离的,所以不同macvlan网络的容器是不能通信的。
可以在三层上通过网关将macvlan网络连通起来。
docker本身不做任何限制,像传统vlan网络那样管理即可。

建议在使用时指定ip地址,防止ip递增冲突。


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker是一种基于容器的虚拟化技术,它提供了一种轻量级的容器化解决方案,可以将应用程序及其依赖项打包到一个可移植的容器中,以便在任何地方运行。在Docker中,容器之间的通信是通过网络实现的,在本文中,我们将详细介绍Docker中的网络通信Docker中的网络类型 Docker提供了四种不同类型的网络,分别是: 1. 桥接网络(Bridge Network):桥接网络Docker的默认网络,它允许容器之间相互通信,并且可以与主机通信。在桥接网络中,每个容器都有一个独立的IP地址,并且可以通过容器名称或IP地址进行访问。 2. 主机网络(Host Network):主机网络容器直接连接到主机网络上,容器主机共享同一个网络接口和IP地址,因此可以与主机网络上的其他设备进行通信。 3. 网络绑定(None Network):网络绑定不为容器配置任何网络,这意味着容器无法通过网络与外界进行通信。通常,这种网络类型用于测试和调试容器应用程序。 4. Overlay网络(Overlay Network):Overlay网络用于主机容器之间的通信。它允许在多个主机上运行分布式应用程序,并提供了自动发现和负载均衡的功能。 Docker网络配置 在Docker中,可以使用docker network命令来管理网络。可以使用以下命令创建一个新的桥接网络: ``` docker network create my-network ``` 可以通过以下命令将容器添加到网络中: ``` docker run --name my-container --network my-network my-image ``` 在此命令中,--network选项指定要将容器添加到的网络名称。 可以使用以下命令列出所有可用的网络: ``` docker network ls ``` 可以使用以下命令查看特定网络的详细信息: ``` docker network inspect my-network ``` 在Docker中,还可以使用--link选项将一个容器链接到另一个容器。这将创建一个虚拟网络接口,允许容器之间进行通信。以下命令将容器my-container链接到容器my-other-container: ``` docker run --name my-container --link my-other-container my-image ``` 在此命令中,--link选项指定要链接的容器名称。 总结 在Docker中,容器之间的通信是通过网络实现的。Docker提供了四种不同类型的网络,包括桥接网络主机网络网络绑定和Overlay网络。可以使用docker network命令来管理网络,可以使用--link选项将一个容器链接到另一个容器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值