当两个Docker容器在同一主机时,可以通过--link命令让两者直接互相访问。
如果要跨主机实现容器互联,则往往需要容器知道其他物理主机的IP地址
利用Ambassador容器机制,可以让互联的容器无需知道所在物理主机的IP地址即可互联
Ambassador容器也是一种Docker容器,它在内部提供了转发服务
以redis镜像为例
目标
(redis客户端) --> (redis-ambassador) ---network---> (redis-ambassador) --> (redis服务端)
操作
(1)首先在服务端主机上创建一个服务端容器redis-server:
$ sudo docker run -d -name redis-server crosbymichael/redis
(2)创建一个服务端Ambassador容器redis_ambassador,连接到服务端容器redis-server,并监听本地的6379端口:
$ sudo docker run -d -link redis-server:redis -name redis_ambassador -p 6379:6379 svendowideit/ambassador
(3)在客户端主机上创建客户端Ambassador容器,告诉它服务端物理主机的监听地址是tcp://x.x.x.x:6379,将本地收集到6379端口的流量转发到服务端物理主机:
$ sudo docker run -d -name redis_ambassador -expose 6379 -e REDIS_PORT_6379_TCP=tcp://x.x.x.x:6379 svendowideit/ambassador
(4)最后,创建一个客户端容器,进行测试,默认访问6379端口实际上是访问的服务端容器内的redis应用:
$ sudo docker run -i -t -rm -link redis_ambassador:redis relateiq/redis-cli
redis 172.17.0.160:6379> ping
PONG