在Cloud Foundry中链接两个应用程序

时间:2016-10-11 10:46:08

标签: grails docker cloudfoundry pivotal-cloud-foundry

我的应用程序分为两个不同的应用程序(微服务?)。一个部署到CF作为docker容器,另一个部署为常规WAR文件(grails应用程序)。 docker容器是一个公开REST API的Python / Flask应用程序。 WebApp使用此rest API。

以前我将这些应用程序作为两个独立的docker容器并使用docker --link flag执行它们,但现在我希望将这些应用程序放在Cloud Foundry中。在docker世界中,我曾经做过以下事情。

docker run -d --link python_container -p 8080:8080 --name war_container war_image

上述命令将在war_container中创建环境变量,这些变量将公开python_container的IP地址和端口。使用这些环境变量,我可以从WAR应用程序与python_container进行通信。这些环境变量如下所示:

PYTHON_CONTAINER_PORT_5000_TCP_ADDR=<ipaddr>
PYTHON_CONTAINER_PORT_5000_TCP_PORT=<port>

问题

是否可以在Cloud Foundry中执行类似的操作?我已经在CF中部署了docker容器。我如何链接我的WAR应用程序,以便在我推送war文件时创建链接到python_container的环境变量。

目前我使用以下方法将docker容器推送到PCFDev:

cf push my-app -o 192.168.0.102:5002/my/container:latest

然后我使用

推送war文件
cf push cf-sample -n cf-sample

cf-sample的manifest.yml是:

---
applications:
  - name: cfsample
    memory: 1G
    instances: 1  
    path: target/cf-sample-0.1.war
    buildpack: java_buildpack
    services:
      - mysql
      - rabbitmq

1 个答案:

答案 0 :(得分:2)

如果你的Python应用程序有多个实例,因此有多个IP /端口,Docker的工作方式会怎样?

对于PCF,您可以让Java应用程序“通过前门”与您的Python应用程序对话:https://my-python-app.local.pcfdev.io

您还可以尝试发现Python应用程序的IP和端口(例如,请参阅https://docs.run.pivotal.io/devguide/deploy-apps/environment-variable.html#CF-INSTANCE-IP),然后将这些值作为环境变量传递给Java应用程序,但这是一个非常脆弱的解决方案。

如果您对直接的容器到容器网络感兴趣,您可能有兴趣阅读并提供有关this proposal的反馈。