Conectarse Remotamente a MariaDB en un Contenedor Docker

Consejo Breve

Cuando instalas MariaDB o MaxScale en contenedores para realizar pruebas, normalmente sólo accedes a ellos dentro de Docker, ya sea desde otros contenedores o directamente desde el anfitrión.
Pero qué pasa si quieres acceder a la base de datos desde un sitio remoto, por ejemplo cuando tienes que conectar una aplicación a la base de datos o quieres usar un cliente gráfico de mysql en una laptop remota.

Para poder hacer esto necesitamos publicar (publish) el puerto de escucha del contenedor hacia el host de Docker usando la opción -p hostport:containerport al crear el contenedor.

Publicar el Puerto de MariaDB

Si tienes sólo una instancia puedes publicar directamente el puerto 3306 de la base de datos MariaDB para tener una conectividad como esta:

Cliente remoto de mysql -> 7706:Anfitrión Docker -> 3306:Contenedor MariaDB

Publica el puerto al momento de crear el contenedor:

docker run -d -p 7706:3306 --name patomariadb --network pato-net -v patovoldb:/var/lib/mysql patomx/patomariadb

ahora el puerto esta escuchando en el anfitrión Docker:

pato@patocontainer ~ $ netstat -na | grep LISTEN
tcp6       0      0 :::7706                 :::*                    LISTEN

y la base de datos puede ser accesada remotamente conectándonos de esta forma:

mysql -u remoto -p -h patocontainer -P 7706
Publicar el Puerto de MaxScale

Para un cluster de MariaDB nuestro MaxScale debe ser el único punto de acceso, así que vamos a publicar solamente los puertos del contenedor de MaxScale para lograr esto:

Cliente remoto de mysql -> 8006:Anfitrión Docker -> 4006:Contenedor MaxScale -> 3306:Contenedor(es) MariaDB

Publica los puertos de Maxscale (4006, 4008) al momento de crear el contenedor:

docker run -d -p 8006:4006 -p 8008:4008 --name patomaxgalera --network pato-net patomx/patomaxscale

ahora esos puertos están escuchando tambien en el anfitrión Docker y pueden ser accesados remotamente:

pato@patocontainer ~ $ netstat -na | grep LISTEN
tcp6       0      0 :::8006                 :::*                    LISTEN
tcp6       0      0 :::8008                 :::*                    LISTEN

y nos podemos conectar desde fuera de esta manera:

mysql -u remoto -p -h patocontainer -P 8006

Ahora puedes usar tus contenedores de la base de datos MariaDB remotamente