服务发现如何与现代docker工/docker工合作?

我使用的是Docker 1.11.1和docker-compose 1.8.0-rc2。

在过去的好时光(如此,去年),你可以像这样build立一个docker-compose.yml文件:

 app: image: myapp frontend: image: myfrontend links: - app 

然后像这样启动环境:

 docker scale app=3 frontend=1 

您的前端容器可以检查名为APP_1_PORTAPP_2_PORT等variables的环境variables,以发现可用的后端主机并相应地进行自我configuration。

时代已经改变。 现在,我们这样做…

 version: '2' services: app: image: myapp frontend: image: myfrontend links: - app 

…而不是环境variables,我们得到DNS。 因此,在frontend容器内,我可以请求app_app_1app_app_2app_app_3并获取相应的IP地址。 我也可以要求app并获取app_app_1的地址。

但是,我如何发现所有可用的后端容器? 我想我可以循环getent hosts ...直到失败:

 counter=1 while :; do getent hosts app_$counter || break backends="$backends app_$counter" let counter++ done 

但是那似乎是丑陋而脆弱的。

我听说过关于循环赛DNS的传闻,但是(a)似乎并没有出现在我的testing环境中,(b)如果您的前端需要同时连接到后端,则不一定有帮助。

如何简单的容器和服务发现意味着在现代的docker世界工作?