第 5 章 网络 - 035 - 容器间通信的三种方式

容器间通信的三种方式
(1)IP 通信

两个容器要能通信,必须要有属于同一个网络的网卡。

满足这个条件后,容器就可以通过 IP 交互了。具体做法是在容器创建时通过 --network 指定相应的网络,或者通过 docker network connect 将现有容器加入到指定网络。

 

(2)Docker DNS Server

通过 IP 访问容器虽然满足了通信的需求,但是不够灵活。在部署应用之前可能无法确定 IP,部署之后再指定要访问的 IP 比较麻烦。对于这个问题,可以通过 docker 自带的 DNS 服务解决。

从 Docker 1.10 版本开始,docker daemon 实现了一个内嵌的 DNS server,使容器可以直接通过“容器名”通信。方法很简单,只要在启动时用 --name 为容器命名就可以了。

 

启动两个容器 bbox1 和 bbox2:

 

docker run -it --network=my_net2 --name=bbox1 busybox

 

 

docker run -it --network=my_net2 --name=bbox2 busybox

 

然后,bbox1 就可以直接 ping 到 bbox2 了:

 

使用 docker DNS 有个限制:只能在 user-defined 网络中使用。也就是说,默认的 bridge 网络是无法使用 DNS 的。

 

(3)joined 容器

joined 容器非常特别,它可以使两个或多个容器共享一个网络栈,共享网卡和配置信息,joined 容器之间可以通过 127.0.0.1 直接通信。

例子:

创建一个 web1 ,并查看网卡信息:

 

然后创建 busybox 容器并通过 --network=container:web1 指定 jointed 容器为 web1,并查看一下网卡信息:

 

busybox 和 web1 的网卡 mac 地址与 IP 完全一样,它们共享了相同的网络栈。

busybox 可以直接用 127.0.0.1 访问 web1 的 http 服务。

 

joined 容器非常适合以下场景:

不同容器中的程序希望通过 loopback 高效快速地通信,比如 web server 与 app server。

希望监控其他容器的网络流量,比如运行在独立容器中的网络监控程序。

 

----------------------------------------引用来自--------------------------------------------------

https://mp.weixin.qq.com/s?__biz=MzIwMTM5MjUwMg==&mid=2653587693&idx=1&sn=0f0b0b7e41d8edb0ed5f8a0b4224a0db&chksm=8d3080f4ba4709e22f4baf33de67fedd4f351784c77d97a97a6477a6a522ef5faaa90e612550&scene=21#wechat_redirect

转载于:https://www.cnblogs.com/gsophy/p/10432696.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值