Conectar JDK Mission Control con aplicación Java en Docker (Local)

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.