Связывание двух приложений в Cloud Foundry

#grails #docker #cloud-foundry

#grails #docker #cloud-foundry

Вопрос:

Мое приложение разделено на два разных приложения (микросервисы?). Одно из них развертывается в CF как контейнер docker, а другое — как обычный файл WAR (приложение grails). Контейнер docker — это приложение на Python / Flask, которое предоставляет REST API. Веб-приложение использует этот 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 которых будут указаны IP-адрес и порт для python_container . Используя эти переменные среды, я мог бы связаться python_container с моим приложением WAR. Эти переменные среды будут выглядеть следующим образом:

 PYTHON_CONTAINER_PORT_5000_TCP_ADDR=<ipaddr>
PYTHON_CONTAINER_PORT_5000_TCP_PORT=<port>
  

Вопрос

Возможно ли сделать что-то подобное в Cloud Foundry? У меня есть контейнер docker, уже развернутый в CF. Как я могу связать мое WAR приложение таким образом, чтобы создавались переменные среды, которые связываются с python_container , как только я нажимаю файл war.

В настоящее время я отправляю контейнер docker в PCFDev, используя это:

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

Затем я нажимаю на файл war, используя

 cf push cf-sample -n cf-sample
  

Manifest.yml для cf-sample :

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

Ответ №1:

Как бы работал способ Docker, если бы у вас было несколько экземпляров вашего приложения на Python и, следовательно, несколько IP-адресов / портов?

Для PCF вы могли бы просто заставить приложение Java общаться с вашим приложением Python «через входную дверь»: https://my-python-app.local.pcfdev.io .

Вы также можете попытаться определить IP-адрес и порт вашего приложения на Python (см. https://docs.run.pivotal.io/devguide/deploy-apps/environment-variable.html#CF-INSTANCE-IP например), а затем передайте эти значения в ваше Java-приложение в качестве переменных среды, но это очень хрупкое решение.

Если вы заинтересованы в прямой сети между контейнерами, вам может быть интересно прочитать об этом предложении и оставить отзыв об этом предложении.