Docker容器间通信

IP通信

从前面的例子可以得出这样一个结论:两个容器要能通信,必须要有属于同一个网络的网卡。满足这个条件后,容器就可以通过IP交互了。具体做法是在容器创建时通过-network指定相应的网络,或者通过docker network connect将现有容器加入到指定网络。可参考上一节

Docker网络(host、bridge、none)详细介绍

Docker DNS Server

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

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

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

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

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

下面验证一下:创建bbox3和bbox4,均连接到bridge网络。

docker run -it --name=bbox3 busybox 
docker run -it --name=bbox4 busybox

bbox4无法ping到bbox3

 

Joined容器

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

请看下面的例子:先创建一个httpd容器,名字为web1。

docker run -d -it --name=web1 =httpd

然后创建busybox容器并通过-network-container:webl指定joined容器为webl,

docker run -it --network=container:web1 busybox

 

请注意busybox器中网配置息,下面我们查看一下webl的网络,

看!busybox和webl的网卡mac地址与IP完全一样,它们共享了相同的网络栈。
busybox可以直接用127.0.0.1访问webl的http服务

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

  1. 不同容器中的程序希望通过loopback高效快速地通信,比如web Server与App Server.
  2. 希望监控其他容器的网络流量,比如运行在独立容器中的网络监控程序。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南宫乘风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值