Статьи

Доступ к службам Bluemix из Java-приложений Liberty в контейнерах Docker

IBM Bluemix позволяет разработчикам размещать свои  образы Docker и запускать свои контейнеры Docker в облаке. Помимо размещения Docker в облаке, Bluemix также предоставляет более 100 сервисов, которые разработчики могут использовать для создания приложений. Существуют службы баз данных, когнитивные службы, аналитические службы, службы Интернета вещей, службы для создания мобильных бэкэндов и многое другое.

Обычно при добавлении этих сервисов к приложениям сервисы предоставляются разработчикам и создаются учетные данные. С помощью этих учетных данных могут быть вызваны API-интерфейсы REST сервисов, и разработчики могут войти на информационные панели сервисов. Учетные данные и дополнительная конфигурация служб помещаются в переменную среды VCAP_SERVICES  в формате JSON. Приложения могут получить доступ к этой информации во время выполнения. Например, приложения Java могут использовать библиотеки System.getenv и JSON, такие как  org.apache.wink.json4j .

Для  приложений на базе Cloud Foundry службы могут быть легко добавлены с помощью пользовательского интерфейса Bluemix или инструментов командной строки. На этом этапе вы не можете привязывать сервисы напрямую к приложениям на основе Docker. Вместо этого вам нужно приложение Cloud Foundry Bridge . После этого вы можете использовать один и тот же код для доступа к службам в приложениях Docker и Cloud Foundry, работающих в Bluemix.

Как разработчик, я предпочитаю разрабатывать код в локальных IDE, тестировать и отлаживать его там. Вот что я обычно делаю для доступа к службам Bluemix из локальных приложений без необходимости написания дополнительного кода. Пример ниже является расширением простого приложения Liberty .

С Liberty вы можете использовать  файл server.env для определения переменных среды. В этом файле есть одна запись VCAP_SERVICES со значением, которое вы можете скопировать из пользовательского интерфейса Bluemix. Для удаления пробелов вы можете использовать различные онлайн- инструменты .

Файл может использоваться сервером Liberty, работающим в Eclipse, а также сервером Liberty в локальном контейнере. Поскольку этот файл необходим только при локальном запуске, создается второе изображение, которое расширяет то, которое вы можете разместить в Bluemix. Второе изображение просто расширяет основное изображение с помощью Liberty и веб-приложения и добавляет к нему переменную среды.

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

root directory: mvn package
directory 'target': docker build -t simple-liberty-image .
directory 'dockerlocal': docker build -t simple-liberty-image-local .
any directory: docker run --name simple-liberty-container-local -p 80:80 -p 443:443 -d -t simple-liberty-image-local

В качестве альтернативы, как отметил мой коллега Ричард Осовски, вы можете запустить нечто похожее на это:

export VCAP_SERVICES=' (copy & paste VCAP values here) '  note the single quotes as vcap has double quotes
docker run --env VCAP_SERVICES="${VCAP_SERVICES}" .... 

Ричард также объяснил в блоге,  как обновить файл server.xml значениями из переменной VCAP_SERVICES до запуска сервера Liberty.