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