Docker网络(docker原生网络Bridge,host,none,及自定义网络,)及docker容器通信及跨主机容器网络

1.Docker原生网络

docker的镜像是令人称道的地方,但网络功能还是相对薄弱的部分。
docker安装后会自动创建3种网络:bridge、host、none

docker network ls

在这里插入图片描述
docker安装时会创建一个名为 docker0 的Linux bridge,新建的容器会自动桥接到这个接口。

在这里插入图片描述

bridge模式

默认执行
bridge模式下容器有一个公有ip,只有宿主机可以直接访问,外部主机是不可见的。
容器通过宿主机的NAT规则后可以访问外网。
在这里插入图片描述

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

在这里插入图片描述

host网络模式

容器不会虚拟出自己的网卡,配置自己的ip。而是使用宿主机的ip。端口范围
host网络模式需要在容器创建时指定--network=host
host模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性。

在这里插入图片描述

容器里面配置的nginx服务可以直接访问宿主机就可以看到
在这里插入图片描述

none模式

none模式是指禁用网络功能,只有lo接口,在容器创建时使用
–network=none指定。

在这里插入图片描述

2.Docker自定义网络

bridge
overlay
macvlan

bridge驱动类似默认的bridge网络模式,但增加了一些新的功能,
overlay和macvlan是用于创建跨主机网络。

建议使用自定义的网络来控制哪些容器可以相互通信,还可以自动DNS解析容器名称到IP地址。

创建自定义网桥:

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

定义自己的网段

在这里插入图片描述

在这里插入图片描述
使用–ip参数可以指定容器ip地址,但必须是在自定义网桥上,默认的bridge模式不支持,同一网桥上的容器是可以互通的。

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

那么如何使两个不同网桥的容器通信呢:
使用 docker network connect命令为demo添加一块net1的网卡。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
给demo加自定义网卡
在这里插入图片描述
在这里插入图片描述

3.Docker容器通信

Joined容器

一种较为特别的网络模式
在容器创建时使用–network=container:vm1指定。(vm1指定的是运行的容器名)

处于这个模式下的 Docker 容器会共享一个网络栈,这样两个容器之间可以使用localhost高效快速通信。
在这里插入图片描述

–link

可以用来链接2个容器。
–link的格式:
–link :alias
name和id是源容器的name和id,alias是源容器在link下的别名。

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

在这里插入图片描述

外网如何访问容器:

端口映射
-p 选项指定映射端口

外网访问容器用到了docker-proxy和iptables DNAT
宿主机访问本机容器使用的是iptables DNAT
外部主机访问容器容器之间的访问docker-proxy实现
localhost 0.0.0.0 是必须有docker-proxy 才能访问。ip仍能访问
ipv6无iptables ,所idocker-proxy很好起通信作用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述即使删除了表中的规则,也可以通过docker-proxy 进行通信

在这里插入图片描述
同样,没有docker-proxy 会完全依赖nat也可以进行通信
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
localhost 0.0.0.0 是必须有docker-proxy 才能访问。ip仍能访问

[root@server1 ~]# curl localhost:8080 -I
curl: (7) Failed connect to localhost:8080; Connection refused

4.跨主机容器网络

跨主机网络解决方案
docker原生的overlaymacvlan
第三方的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,直接使用物理接口,性能极好。

1

在两台docker主机上各添加一块网卡,打开网卡混杂模式:
ip link set eth1 promisc on

网卡状态如下图

在这里插入图片描述

在这里插入图片描述

网卡的状态是激活的状态
在这里插入图片描述

2在两台docker主机(server1 server2)上各创建macvlan网络

docker network create -d macvlan --subnet 172.21.0.0/24 --gateway=172.21.0.1 -o parent=eth1 mac_net1

如下图,在server1创建完成后以ip 172.21.0.11启动容器
在这里插入图片描述

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

在server2上创建同样的网络
测试:两个容器可以进行通信
在这里插入图片描述

macvlan网络结构分析

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

docker network create -d macvlan --subnet 172.22.0.0/24 --gateway=172.22.0.1 -o parent=eth1 mac_net2
设置不同网段的网络,则也可以继续通信,与之前21网段隔离

macvlan网络间的隔离和连通

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

docker network子命令

connect连接容器到指定网络
create创建网络
disconnect断开容器与指定网络的连接
inspect显示指定网络的详细信息
ls显示所有网络
rm删除网络
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值