0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: docker, java, программирование на java, разработка на java, java 10, контейнер, jconsole, visualvm, проброс портов</p>
1
<p>Теги: docker, java, программирование на java, разработка на java, java 10, контейнер, jconsole, visualvm, проброс портов</p>
2
<p>В<a>первой части</a>мы рассмотрели новые возможности работы<strong>Java-приложения в Docker-е</strong>. В этой части рассмотрим вопрос, как мониторить работающее в Docker-е Java-приложение.</p>
2
<p>В<a>первой части</a>мы рассмотрели новые возможности работы<strong>Java-приложения в Docker-е</strong>. В этой части рассмотрим вопрос, как мониторить работающее в Docker-е Java-приложение.</p>
3
<p>Для мониторинга в Java-мире есть два очень популярных тула:<strong>VisualVM</strong>и<strong>jconsole</strong>. Давайте попробуем ими воспользоваться.</p>
3
<p>Для мониторинга в Java-мире есть два очень популярных тула:<strong>VisualVM</strong>и<strong>jconsole</strong>. Давайте попробуем ими воспользоваться.</p>
4
<p>В Dockerfile пишем такую команду запуска:</p>
4
<p>В Dockerfile пишем такую команду запуска:</p>
5
CMD java -jar testJavaAppl.jar<p>Запускаем контейнер:</p>
5
CMD java -jar testJavaAppl.jar<p>Запускаем контейнер:</p>
6
<p>Запускаем<strong>jconsole</strong>. И видим, что jconsole не видит наше приложение в контейнере, хотя оно и запущено на этом же хосте. Дело понятное, Java-приложение работает в контейнере, который хорошо изолирует приложение от внешнего мира, поэтому jconsole его и не видит. Чтобы снаружи получить доступ к приложению в контейнере, надо запустить контейнер с "проброшенными" наружу портами. В нашем случае надо<strong>пробросить порт jmx</strong>, к которому будет подключаться jconsole. Но чтобы этот порт пробросить, его сначала надо открыть.</p>
6
<p>Запускаем<strong>jconsole</strong>. И видим, что jconsole не видит наше приложение в контейнере, хотя оно и запущено на этом же хосте. Дело понятное, Java-приложение работает в контейнере, который хорошо изолирует приложение от внешнего мира, поэтому jconsole его и не видит. Чтобы снаружи получить доступ к приложению в контейнере, надо запустить контейнер с "проброшенными" наружу портами. В нашем случае надо<strong>пробросить порт jmx</strong>, к которому будет подключаться jconsole. Но чтобы этот порт пробросить, его сначала надо открыть.</p>
7
<p>Меняем<strong>Dockerfile</strong>, пишем в нём такую команду:</p>
7
<p>Меняем<strong>Dockerfile</strong>, пишем в нём такую команду:</p>
8
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<p>Так мы говорим, что приложение будет слушать 1026 порт.</p>
8
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<p>Так мы говорим, что приложение будет слушать 1026 порт.</p>
9
<p>Стартуем контейнер с указанием порта:</p>
9
<p>Стартуем контейнер с указанием порта:</p>
10
docker run -p1026:1026 java-docker<p>Проверяем, что контейнер слушает порт.docker psВ разделе PORTS, видим:</p>
10
docker run -p1026:1026 java-docker<p>Проверяем, что контейнер слушает порт.docker psВ разделе PORTS, видим:</p>
11
<p>Всё идёт по плану. Теперь запускаем<strong>jconsole</strong>. В списке локальных процессов нашего приложения нет. Подключаемся как к удалённому процессу:</p>
11
<p>Всё идёт по плану. Теперь запускаем<strong>jconsole</strong>. В списке локальных процессов нашего приложения нет. Подключаемся как к удалённому процессу:</p>
12
<p>Jconsole успешно подключилась к приложению в контейнере. Теперь можно понаблюдать за его работой.</p>
12
<p>Jconsole успешно подключилась к приложению в контейнере. Теперь можно понаблюдать за его работой.</p>
13
<p><em>Если хотите узнать больше, смотрите наш<a>открытый урок</a>. На нём мы посмотрим на этот пример в комплексе и выясним некоторые другие нюансы.</em></p>
13
<p><em>Если хотите узнать больше, смотрите наш<a>открытый урок</a>. На нём мы посмотрим на этот пример в комплексе и выясним некоторые другие нюансы.</em></p>
14
14