Conectar JDK Mission Control con aplicación Java en Docker (Local)
Table of contents
Si deseas poder conectarte a tu aplicación de Java para poder revisar el rendimiento de la misma utilizando JMX y tu aplicación esta dockerizada, puedes utilizar los siguientes pasos para poder realizarlo.
Hay que añadir algunas variables de configuración de JMX para que cuando se ejecute la aplicación, permita el acceso sin necesidad de aplicar SSH, sin solicitar autenticación con la siguiente configuración en docker.
Dockerfile
```dockerfile
CMD ["java", "-Dcom.sun.management.jmxremote.port=9090", "-Dcom.sun.management.jmxremote.rmi.port=9090", "-Dcom.sun.management.jmxremote.authenticate=false", "-Dcom.sun.management.jmxremote.ssl=false", "-Djava.rmi.server.hostname=localhost", "-jar", "/opt/handytec-portal/handytec-portal-backend-1.0.0.jar"]
```
- Puerto 9090 lo usará JMC para conectarse a la app en docker.
- hostname localhost para que utilize la red local una vez docker expone el puerto local de nuestra PC
- ssl=false para desactivar que necesitemos ssl al conectarnos
- authenticate=false para no necesitar credenciales al loguearnos
Ejecutar contenedor
Para ejecutar el contenedor debemos ejecutar el siguiente comando:
```bash
docker run -it --rm --env-file=./.env -p 8080:8080 -p 9090:9090 --name <containerName> <imageName>
```
- -it: Habilita el modo interactivo al ejecutar la imagen
- --rm: Eliminar el contenedor al terminar de utilizarlo
- --env-file=./.env: Cargar las variables de entorno al contenedor en base a un archivo .env
- -p 8080:8080: Mapear puertos desde el host hacia el contenedor <host:contenedor>
- --name <containerName>: Nombre del contenedor
- <imageName>: Nombre de la imagen de la cual se va a crear un contenedor
En este ejemplo se habilita el puerto 8080 para que lo utiliza la aplicación de Java y el puerto 9090 para que acceda el JMX.
JDK Mission Control
Al añadir una nueva conexión en la aplicación de JDK Mission Control, se solicita los siguientes parámetros:
- host: localhost
- port: 9090
Con esto, se puede hacer clic en el botón "Probar conexión" y en el apartado de "Status" debe salir "Success". Opcionalmente, se puede añadir un nombre personalizado a la conexión.