转载自:http://blog.csdn.net/zhangyifei216/article/details/50921215



一)在docker的低版本中(1.7.1),同一个宿主机上的多个docker容器之间如果想进行通信,有3种方式:
  1)通过使用容器的ip地址来通信,会导致ip地址的硬编码,不方便迁移,并且容器重启后ip地址会改变,除非使用固定的ip.
  2)通过宿主机的ip加上容器暴露出的端口号来通信,通信方式比较单一,只能依靠监听在暴露出的端口的进程来进行有限的通信。
     用法: extra_hosts
  3)通过docker的link机制可以通过一个name来和另一个容器通信,link机制方便了容器去发现其它的容器并且可以安全的传递一些连接信息给其它的容器。用法:links :-容器名


二)高版本的docker中可以直接調用
    docker引入网络新特性后,内置了一个DNS Server,但是只有用户创建了自定义网络后,这个DNS Server才会起作用。
    在网络新特性为未引入之前,有三种网络,第一种就是docker0这种桥接网络,用的也是最多的,第二个则是复用主机网络,称为  HOST网络,第三种就是none网络,只创建了一个空的网络命名空间,没有网络接口,无法和外界通信,可以让使用者自己去构建网络。当网络新特性引入后,有了overlay网络,有了用户自定义网络。用户自定义网络下,用户可以通过docker的network子命令创建一个自定义的桥接网络,这个自定义桥接的网络和默认的docker0桥接网络基本功能都是一致的,只是在这个自定义桥接网络中拥有一些特性,可以替代link机制。这些特性包括如下几个方面:
基于DNS的名称自动解析
安全的隔离环境
动态的附加或者脱离一个网络
支持使用–link设置别名
在用户自定义网络下,不使用link机制就可以实现名称解析功能了,不再是通过link机制追加名称解析关系到/etc/hosts文件中了。并且在默认的docker0桥接网络和自定义网络下使用link机制的效果是不一样的,在自定义网络中link机制只是负责设置别名的,不再提供环境变量注入的功能了。自定义网络中同时也提供了--net-alias功能和link机制提供别名功能是一样的。保留link机制目的是为了兼容。


Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐