#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-приложение в качестве переменных среды, но это очень хрупкое решение.
Если вы заинтересованы в прямой сети между контейнерами, вам может быть интересно прочитать об этом предложении и оставить отзыв об этом предложении.