Найти тему

Java и Docker. Часть 2

Статья подготовлена для студентов курса «Разработчик Java» в образовательном проекте OTUS.

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

Для мониторинга в Java-мире есть два очень популярных тула: VisualVM и jconsole. Давайте попробуем ими воспользоваться.

В Dockerfile пишем такую команду запуска:

CMD java -jar testJavaAppl.jar

Запускаем контейнер:

docker run java-docker

Запускаем jconsole. И видим, что jconsole не видит наше приложение в контейнере, хотя оно и запущено на этом же хосте. Дело понятное, Java-приложение работает в контейнере, который хорошо изолирует приложение от внешнего мира, поэтому jconsole его и не видит. Чтобы снаружи получить доступ к приложению в контейнере, надо запустить контейнер с «проброшенными» наружу портами. В нашем случае надо пробросить порт jmx, к которому будет подключаться jconsole. Но чтобы этот порт пробросить, его сначала надо открыть.

Меняем Dockerfile, пишем в нём такую команду:

CMD java -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=1026
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-jar testJavaAppl.jar

Так мы говорим, что приложение будет слушать 1026 порт.

Стартуем контейнер с указанием порта:

docker run -p1026:1026 java-docker

Проверяем, что контейнер слушает порт.docker psВ разделе PORTS, видим:

0.0.0.0:1026->1026/tcp

Всё идёт по плану. Теперь запускаем
jconsole. В списке локальных процессов нашего приложения нет. Подключаемся как к удалённому процессу:

localhost:1026

Jconsole успешно подключилась к приложению в контейнере. Теперь можно понаблюдать за его работой.

Если хотите узнать больше, смотрите наш открытый урок. На нём мы посмотрим на этот пример в комплексе и выясним некоторые другие нюансы.

OTUS открыл 15-ый набор легендарного онлайн-курса «Разработчик Java»
Вас ждёт:
— 5 месяцев Best Practice по Java-разработке (теперь на gradle вместо maven);
— особенности разработки серверных приложений на Java;
— проектирование, тестирование, низко- и высокоуровневые подходы к созданию многопоточных и многопроцессных приложений;
— утилиты Jmh и Jol, Byte-коды, области применения unsafe и многое другое.

С подпиской рекламы не будет

Подключите Дзен Про за 159 ₽ в месяц