Статьи

Wildfly Swarm JAX-RS в контейнере Docker, развернутом в IBM Bluemix

Больше играть с Докером. Теперь, где я могу развернуть контейнер «по-настоящему» в облаке? Несколько вариантов:

  • AWS имеет контейнерное обслуживание EC2 ( ECS ). Если вы раньше не пользовались AWS, вы можете получить год бесплатного пользования AWS. Если вы уже использовали свой свободный год, то, похоже, вам придется платить за переход на ECS.
  • У Google Container Engine есть бесплатное предложение на 300 долларов в течение 60 дней
  • Digital Ocean — 5 долларов в месяц по низкому тарифу
  • Heroku поддерживает Docker, используя образ Docker своей собственной платформы времени выполнения, Heroku Cedar . Это интересный подход, но звучит более привлекательно, если вы уже планируете развертывание на Heroku в качестве целевой платформы.
  • OpenShift Origin v3 основана на Docker, но только если вы сами запускаете OpenShift Origin. OpenShift Online по-прежнему является их собственным запатентованным механизмом и патронами (хотя по-прежнему великолепный PaaS, который я использую для многих своих побочных проектов — этот блог размещен на OpenShift).

Так, где IBM Bluemix вписывается в эту картину? Я должен признать, что до тех пор, пока в этом году не увидел презентации IBM на JavaOne о том, насколько классным является их облачный сервис, я даже не взглянул на то, что они могут предложить (я думаю, что годы разработки и развертывания в Websphere v5 оставили меня эмоционально шрам). Bluemix основан на Cloud Foundry, с добавлением множества других вещей. Включая поддержку размещения контейнеров Docker. И бесплатные аккаунты разработчиков (когда ЦП и хранилище держатся ниже определенного уровня) — посмотрите калькулятор цен . Хорошо, так что я в, давайте настроимся.

Развертывание осуществляется через CLI CloudFoundry с плагином IBM Containers, инструкции здесь . Вот резюме:

  • Установщик Docker, если еще не установлен
  • Установите CloudFoundry CLI
  • Установите плагин IBM Containers cf
  • Войдите в Bluemix: cf login -a api.ng.bluemix.net
  • Вход в IBM Containers: cf ic login (вход в систему с учетными данными Bluemix при появлении запроса)

Есть несколько вариантов взаимодействия с вашими контейнерами, и, просматривая документы в первый раз, это немного сбивает с толку, так как они перечисляют все три альтернативы для каждого шага — либо непосредственно с помощью docker cli, либо с помощью cf cli, либо с ice cli.

На панели инструментов контейнеров Bluemix, когда вы нажимаете добавить пользовательский контейнер, вы получаете шаги cf cli для входа в систему, а затем используете Docker cli, так что я использовал именно этот подход (кажется, что ice cli дает мне 503 Bd Gateway ошибки, которые я не мог преодолеть, поэтому я выполнил шаги cf и Docker).

Отсюда есть интерактивное руководство по использованию ледовых утилит . Если вы работали с некоторыми другими интерактивными интерактивными учебными пособиями, то это будет выглядеть знакомо (например, учебник по Git ).

У меня уже есть образ с конечной точкой JAX-RS с использованием WildFly Swarm — давайте развернем его в Bluemix.

У меня уже есть мой образ, построенный с:

docker build -t wildflyswarm-jaxrs

Далее нам нужно пометить его:

docker tag wildflyswarm-jaxrs registry.ng.bluemix.net/kevinhooke/wildflyswarm-jaxrs
  • первый параметр — это имя тега, когда мы создавали изображение
  • вторым параметром является uri репозитория изображений Bluemix, за которым следует пространство имен вашей учетной записи (устанавливается при регистрации в Bluemix), а затем тэг для вашего изображения.

Чтобы вставить помеченное изображение в репозиторий Bluemix:

docker push registry.ng.bluemix.net/kevinhooke/wildflyswarm-jaxrs

На этом этапе, если вы перейдете на панель управления Bluemix Containers, вы увидите свое изображение в списке (вместе с некоторыми предоставленными изображениями от IBM):

 Используя cf cli с плагином IBM Containers, ic), вы можете вводить команды докера непосредственно в Bluemix, поэтому для удаленного вывода списка контейнеров:

cf ic images

Давайте начнем контейнер с изображения!

cf ic run --name jaxrs-test registry.ng.bluemix.net/kevinhooke/wildflyswarm-jaxrs

Это должно вернуть вам идентификатор контейнера.

Так это работает? Давайте передадим Docker ps, используя cf ic:

cf ic ps

Мы в порядке! (или, по крайней мере, строительство еще не началось)

Теперь, как нам получить доступ к услуге в контейнере? Похоже, нам нужно перейти к онлайн-консоли и запросить публичный IP-адрес для контейнера. Бесплатный аккаунт дает вам 2 бесплатных публичных IP-адреса:

С точки зрения кли, подход заключается в запросе публичного IP:

cf ic ip request

и обратите внимание на возвращенный IP.

Теперь запустите контейнер и передайте ip из предыдущего шага — я также привязываю 8080 из моего контейнера к 8080 на хосте, чтобы сделать его доступным:

cf ic run -p 134.168.10.169:8080:8080 --name jaxrs-test registry.ng.bluemix.net/kevinhooke/wildflyswarm-jaxrs

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

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

Подождав несколько минут и проверив консоль SUCCESS, мы перешли к «запуску»:

И, указывая браузер на общедоступный ip и порт, приложение запущено и работает! JAX-RS с использованием WildFly Swarm в контейнере Docker, развернутом в IBM Bluemix!