Статьи

Docker для разработчиков Java: разработка на Docker

Эта статья является частью нашего курса Академии под названием Docker Tutorial для разработчиков Java .

В этом курсе мы предлагаем серию руководств, чтобы вы могли разрабатывать свои собственные приложения на основе Docker. Мы охватываем широкий спектр тем, от Docker через командную строку, до разработки, тестирования, развертывания и непрерывной интеграции. С нашими простыми учебными пособиями вы сможете запустить и запустить собственные проекты за минимальное время. Проверьте это здесь !

1. Введение

В последней части руководства мы узнали, как упаковать (и запустить) Java-приложения в контейнеры Docker . В этой части мы сосредоточимся на том, как Docker положительно влияет на нашу практику разработки.

Честно говоря, есть много областей, где Docker может быть очень полезен для разработчиков. Основное внимание в нашем обсуждении будет уделено интеграции Docker с IDE , запуску IDE в качестве контейнеров Docker и ознакомлению с несколькими полезными инструментами для управления и мониторинга ваших сред Docker .

2. Докер из вашей IDE

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

К счастью, все три ведущих среды разработки Java, а именно Eclipse , JetBrains IntelliJ IDEA и NetBeans , обеспечивают интеграцию с инструментами Docker через удобные представления пользовательского интерфейса или / и виджеты. Давайте быстро пройдемся по каждой из этих IDE и рассмотрим, что можно предложить.

2.1. Затмение

Eclipse Oxygen , последняя выпущенная на данный момент версия Eclipse IDE , имеет всестороннюю поддержку инструментов Docker, предоставляемую подпроектом Linux Tools (доступен в виде плагина). После установки он добавляет четыре дополнительных представления в категории Docker .

Docker Views в Eclipse

Docker Views в Eclipse

В каждом из этих представлений представлены некоторые подробности о контейнерах или изображениях Docker Explorer , причем Docker Explorer является обоим видом «все в одном».

Docker Explorer View

Docker Explorer View

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

Просмотр контейнеров Docker

Просмотр контейнеров Docker

Точно так же, если вы хотите перечислить только изображения Docker , специализированное представление Docker Images здесь, чтобы удовлетворить ваши потребности.

Просмотр изображений Docker

Просмотр изображений Docker

И последнее, но не менее важное, есть одно очень полезное представление, которое называется Docker Image Hierarchy . Это позволяет увидеть все слои, из которых было построено изображение. Здесь, например, мы могли видеть, как размечено изображение с тегом с именем jcg/spring-boot-webapp:0.0.1-SNAPSHOT (один из примеров, которые мы jcg/spring-boot-webapp:0.0.1-SNAPSHOT в предыдущей части урока).

Иерархия изображений Docker

Иерархия изображений Docker

Но эти взгляды являются лишь частью всей истории. Другая часть — это набор новых модулей запуска Docker, которые вы можете использовать для создания образов Docker и запуска ваших приложений Java (или даже завершения стеков Docker Compose ) в качестве контейнеров Docker .

Затмение Пусковые установки

Затмение Пусковые установки

Если вы хотите узнать больше обо всех представленных выше представлениях и средствах запуска, а также об инструментах Docker, доступных в Eclipse , официальный проект Wiki — отличное место для начала.

2.2. IntelliJ IDEA

JetBrains IntelliJ IDEA , доступный в последней версии 2017.2.6 , обеспечивает поддержку инструментов Docker в виде официального плагина . Он доступен как в Ultimate Edition так и в Community Edition , которую мы будем использовать в этом разделе.

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

Докер в IntelliJ Idea

Докер в IntelliJ Idea

Чтобы быть справедливым, очень удобно иметь единственное, хорошо структурированное представление с большинством необходимых частей, доступных поблизости (на разных вкладках).

2,3. Oracle NetBeans

В NetBeans, начиная с последней версии 8.2 , инструменты Docker включены как часть плагина Base IDE (который вы, скорее всего, активировали бы с самого начала). После активации плагина добавленный узел дерева Docker становится доступным в представлении Services .

Докер в Netbeans

Докер в Netbeans

Довольно приятное резюме и обсуждения желаемых функций, касающихся интеграции Docker в NetBeans , были опубликованы на официальном вики-сообществе . Пожалуйста, проверьте это, если вы заинтересованы или заинтересованы в этой теме.

3. На грани: ваша IDE в Docker

Как мы уже видели, инструменты Docker, предоставляемые наиболее популярными средами разработки Java, вполне достаточны, можно даже сказать, выдающиеся. Но что, если мы попытаемся раздвинуть границы и полностью запустить нашу IDE в Docker , буквально где угодно? Если это звучит немного сумасшедшим, это, безусловно, так, но …

Eclipse Che , IDE следующего поколения от Eclipse , полностью использует контейнеризацию и полностью работает в Docker . На самом деле он работает на основе веб-API REST (ful) и предоставляет многофункциональную, основанную на браузере IDE .

Затмение Че

Затмение Че

Это довольно инновационный и молодой проект, с огромным потенциалом революционизировать концепции IDE, какими мы их знаем. Было бы очень интересно посмотреть, как будут развиваться события в будущем, но технология уже здесь, доступна для оценки.

4. А как насчет отладки?

Отладка была, есть и, скорее всего, будет играть решающую роль в поиске, понимании и устранении дефектов или проблем в наших программах. И, нравится нам это или нет, независимо от того, какой классный Docker , он не сделает наши приложения свободными от ошибок. Если вы выполняете свои Java-приложения в виде контейнеров Docker , процесс отладки немного меняется и подробно описан в этой превосходной статье . Он настолько всеобъемлющий, что нет необходимости повторять его здесь, просто выберите IDE, которую вы используете, и просмотрите красивые уроки, подготовленные для вас.

5. Управление и мониторинг

Хотя инструменты командной строки Docker и, следовательно, API-интерфейсы Docker Engine позволяют вам решать любые задачи, с которыми вы можете столкнуться, многие из нас по-прежнему предпочитают иметь дело с какими-то веб-интерфейсами или графическими пользовательскими интерфейсами. Очевидно, это личное предпочтение, и в этом разделе мы собираемся узнать о довольно многих интересных вариантах в этом отношении.

5.1. Portainer

Первым инструментом, который мы рассмотрим, является Portainer , облегченный пользовательский интерфейс управления с открытым исходным кодом, который позволяет легко управлять различными средами Docker (такими как хосты Docker или кластеры Docker Swarm ). Неудивительно, что сам Portainer работает как легкий контейнер Docker . Давайте запустим один:

1
$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

На Windows-машине команда выглядит немного иначе:

1
$ docker run -d -p 9000:9000 portainer/portainer

Как только контейнер Portainer будет запущен, вы сможете получить к нему доступ через довольно удобный веб-интерфейс, доступный по адресу http: // localhost: 9000 (или, если вы используете не родную установку Docker , http://<docker-machine>:9000 ).

Portainer Dashboard

Portainer Dashboard

Когда шаги установки завершены (при необходимости), вы перейдете к представлению «все в одном» рассматриваемой среды Docker , начиная со страницы простой панели инструментов. Вы определенно узнаете все объекты Docker (такие как тома, сети, контейнеры, изображения и т. Д.), Перечисленные слева, чтобы вы могли выбрать любой из них, чтобы перенаправить на выделенный вид.

Список поддерживаемых функций Docker, которые Portainer предоставляет через интуитивно понятный веб-интерфейс, просто поразителен. Если вы предпочитаете инструменты пользовательского интерфейса над инструментами командной строки, у Portainer есть все шансы стать для вас универсальным магазином.

5.2. cAdvisor

Часто, когда мы разрабатываем наши приложения, необходимо получить больше информации о том, что происходит с нашими контейнерами, будь то речь идет об использовании процессора, памяти или сети. К счастью, здесь есть довольно много вариантов, и одним из очень полезных инструментов, о которых мы собираемся поговорить, является cAdvisor (или в полной версии, контейнерный советник), который анализирует использование ресурсов и характеристики производительности работающих контейнеров.

« CAdvisor предоставляет пользователям контейнеров понимание использования ресурсов и характеристик производительности их работающих контейнеров. Это работающий демон, который собирает, объединяет, обрабатывает и экспортирует информацию о запущенных контейнерах. В частности, для каждого контейнера хранятся параметры изоляции ресурса, историческое использование ресурса, гистограммы полного исторического использования ресурса и сетевая статистика. Эти данные экспортируются по контейнерам и по всей машине. ”- https://github.com/google/cadvisor

Интересно, что cAdvisor выходит за рамки просто Docker и должен поддерживать практически любой другой тип контейнера из коробки. К сожалению для пользователей Windows, cAdvisor имеет ограниченную поддержку на этой платформе. Лучший способ попробовать cAdvisor — это запустить его как контейнер Docker .

01
02
03
04
05
06
07
08
09
10
sudo docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:rw \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --volume=/dev/disk/:/dev/disk:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  google/cadvisor:latest

Когда контейнер запущен и работает, вы можете получить доступ к веб-интерфейсу cAdvisor по адресу http: // localhost: 8080 (или, если вы используете не родную установку Docker , http://<docker-machine>:8080 ).

cAdvisor

cAdvisor

Веб-интерфейс довольно прост, но исключительно информативен. Здесь собрано много деталей о ресурсах и процессах каждого работающего контейнера Docker, а также о самом хост-компьютере Docker (ЦП, память, сеть, хранилище и т. Д.). Безусловно, это бесценный инструмент для изучения того, как ваши контейнеры потребляют ресурсы, и для управления ими во время выполнения.

5.3. ctop

И наконец, что не менее важно , мы собираемся завершить работу с инструментом ctop , который в интерфейсе, похожем на топ , предоставляет краткий и сжатый обзор метрик в реальном времени для нескольких контейнеров.

ctop

ctop

Не только ctop имеет сводное представление, но также поддерживает возможность выбора и фокусировки на любом отдельном контейнере.

5.4. И многое другое …

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

6. Метрики Docker Engine

Механизм Docker предоставляет множество интересных метрик в формате, который полностью совместим с Prometheus , чрезвычайно популярным решением для мониторинга и оповещения с открытым исходным кодом. Хотя эта функция стала общедоступной довольно давно, об этом мало кто знает, и поэтому не многие ее используют.

Эта функция все еще считается экспериментальной, поэтому она не доступна по умолчанию и требует небольшой настройки конфигурации. Официальная документация подробно описывает все необходимые шаги, которые необходимо выполнить в отношении операционной системы, на которой вы работаете в Docker . Но по сути, первый шаг — изменить daemon.json и добавить туда следующие свойства.

1
2
3
4
{
  "metrics-addr" : "localhost:9323",
  "experimental" : true
}

Чтобы изменения вступили в силу, демон Docker должен быть перезапущен. Сразу после этого метрика должна стать доступной в конечной точке http: // localhost: 9323 / metrics . Следующим шагом является подготовка конфигурации Prometheus , prometheus.yml , чтобы очистить метрики движка Docker .

1
2
3
4
5
6
7
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
  - job_name: 'docker'
    static_configs:
      - targets: ['localhost:9323']

С этой минимальной конфигурацией мы могли бы запустить сервер Prometheus (который на момент написания этой статьи достиг версии 2.0 ) как контейнер Docker :

1
2
3
docker run -p 9090:9090 \
    -v prometheus.yml:/etc/prometheus/prometheus.yml \
    prom/Prometheus

После запуска контейнера веб-интерфейс Prometheus должен быть доступен по адресу http: // localhost: 9090 . Давайте перейдем к этому URL и проверим, что все настроенные нами цели доступны.

Прометей Цели

Прометей Цели

Честно говоря, веб-интерфейс Prometheus вполне способен отображать различные метрики, но Grafana , еще один проект с открытым исходным кодом, является современной платформой для запроса, визуализации, оповещения и понимания метрик.

1
2
3
docker run -d -p 3000:3000 \
    -e "GF_SECURITY_ADMIN_PASSWORD=pa$$w0rd" \
    grafana/grafana

У Grafana есть огромный список готовых панелей мониторинга, и одна из них, панель мониторинга Docker Engine Metrics , именно то, что мы ищем. Вот краткий взгляд на то, как это проявляется (действительно, красиво).

Панель управления двигателем Grafana Docker

Панель управления двигателем Grafana Docker

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

7. Выводы

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

8. Что дальше

В следующем разделе руководства мы поговорим об использовании Docker для тестирования, особенно в контексте проведения интеграции и сквозных тестов наших Java-приложений.