docker-网络管理(容器之间通信)

Docker 在启动时会创建一个虚拟网桥 docker0,默认地址为 172.17.0.1/16, 容器启动后都会
被桥接到 docker0 上,并自动分配到一个 IP 地址。

docker的网络有三种

bridge:bridge模式下,容器没有一个公有的ip,只有宿主机可以直接访问,外部主机是不可见的,但容器通过宿主机的NAT规则后可以访问外网。

host:host模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性。

none:

网络环境为 none,即不为 Docker Container 任何的网络环境。一旦 Docker Container 采用了
none 网络模式,那么容器内部就只能使用 loopback 网络设备,不会再有其他的网络资源。
可以说 none 模式为 Docker Container 做了极少的网络设定,但是俗话说得好“
少即是多”
,在
没有网络配置的情况下,作为 Docker 开发者,才能在这基础做其他无限多可能的网络定制
开发。这也恰巧体现了 Docker 设计理念的开放。

创建自定义网桥:

还可以自定义网段:

可以在物理机上ip a查看自定义网桥

创建两个容器,桥接到不同的网桥上,彼此之间是不能通信的。

那么如何使两个不同网桥的容器通信呢:

 使用docker network connect 命令为vm1添加一块my_net2网卡

容器访问外网是通过iptables的SNAT实现的

而外网访问容器用到了docker-proxy和iptables DNAT

     宿主机访问本机容器使用的是iptables DANT

跨主机网络解决方案

1.docker原生的overlay和macvlan

2.第三方的flannel、weave、calica

macvlan网络方案实现:

   linux kernel提供的一种网卡虚拟化技术

   无需linux bridge,直接使用物理接口,性能极好。

具体操作如下:

  1.在两台docker主机上各添加一块网卡,打开网卡混杂模式:

    ip link set 网卡名 promisc on

2.创建macvlan网络并用此网络开启一个ubuntu容器

主机1:

主机2:

由上图可以看出,不同主机的容器已经完成了通信,但是如果容器很多,不可能有那么多的网卡,所以可以使用vlan子接口实现macvlan网络。vlan可以将物理二层网络划分为4094个逻辑网络,彼此隔离,vlan id取值为1~4094

主机1:(注意:设置docker网络的子网必须在主机的子网下)

主机2:(注意:设置docker网络的子网必须在主机的子网下)

由上图可以看出,不同主机间的容器之间可以ping通

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值