我的应用程序分为两个不同的应用程序(微服务?)。一个部署到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
答案 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的反馈。