• 1 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
MariaDB en Docker
#1
Hola

He visto que la aplicación nativa de MariaDB ( MySQL) se ha quedado un poco desfasada en la versión 5.5.57.
Una forma de usar una mas nueva es crear un contenedor con una mucho mas reciente  con versión 10.4.12.

Para hacerlo sólo hemos de tener instalada la aplicación de Docker Station, que muchas de nuestra nas, aún siendo ARM,lo soportan.

Podemos hacerlo desde el Docker Station, pero una vez hayamos hecho el container apenas podemos alterar sus definición.

Por ello recomiendo usar la consola (Putty y otros programas similares) o incluso apoyarnos en otro contenedor llamado Portainer (que permite mas cosas que Docker Station)

El comando de consola para crear el contenedor es:
Code:
docker run -d -p 3307:3307 --restart always --name="mariadb-server" -v /share/DockerData/mariadb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=claveroot mariadb:latest

Hay un parámetro que nos va ser interesante para poder mantener datos, aunque eliminemos el contenedor.
Para ello previamente he creado una carpeta compartida llamada "DockerData" donde los contenedores dejarán ciertos datos.
El parámetro es  "-v /share/DockerData/mariadb:/var/lib/mysql" y lo que hace es asociar la ruta real de la estructura de archivos de nuestra nas "/share/DockerData/mariadb" con la del interior de conetenedor "/var/lib/mysql"
Esto último es importante porque así los datos son persistentes y fácilmente podemos hacer copias de resguardo de ellos (incluso moverlos de nas).


Con la orden anterior sólo hemos hecho la creación del contenedor, no hay usuarios, ni base de datos a usar.


Si tenemos idea de usarla en combinación de otros "paquetes" como NextCloud, OwnCLoud, Moodle, Pydio,.... a la hora de crear el container podemos indicar esos datos.

Por ejemplo, si vamos a usar NextCloud, yo suelo hacer las BBDD con el mismo nombre del programa mas "_db" quedando "nextcloud_db", hago un usuario exclusivo para ese programa "nextcloud" y una contraseña exclusiva para él "miclaveNext"

El comando quedaría :
Code:
docker run -d -p 3307:3307 --restart always --name="mariadb-server" -v /share/DockerData/mariadb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=claveroot -e MYSQL_USER=nextcloud -e MYSQL_PASSWORD=miclaveNext -e MYSQL_DATABASE=nextcloud_db mariadb:latest

Si no lo queremos hacer así, podemos acceder a la consola de la MariaDB y por ordenes SQL crear la base de datos, el usuario y su clave. 
O también podemos hacerlo usando PhpMyAdmin, el cual habremos instalado previamente desde el "App Center".

Yo personalmente para organizar en la red este contenedor y los próximos que haga he creado una red llamada "miscontenedores"
Esto hay que hacerlo previo a la creación del contenedor (no es del todo cierto porque se pueden mover de redes por comandos, pero no quiero complicaros)

La orden es sencilla y de nuevo la haremos desde la consola:
Code:
docker network create miscontenedores

Si quisiéramos asignar un rango de red privado y que coincida con alguno de los existentes por ejemplo 172.17.5.x , el comando sería
Code:
docker network create --subnet=172.17.5.0/12 miscontenedores


Así luego añado un parámetro más en la cadena de creación del contenedor y finalmente quedaría así:
Code:
docker run -d -p 3307:3307 --network=miscontenedores --restart always --name="mariadb-server" -v /share/DockerData/mariadb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=claveroot -e MYSQL_USER=nextcloud -e MYSQL_PASSWORD=miclaveNext -e MYSQL_DATABASE=nextcloud_db mariadb:latest

Si quisieramos que ese contenedor tenga una ip marcada por nosotros como la 172.16.5.6 , el comando será:
Code:
docker run -d -p 3307:3307 --ip 172.17.5.6 --network=miscontenedores --restart always --name="mariadb-server" -v /share/DockerData/mariadb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=claveroot -e MYSQL_USER=nextcloud -e MYSQL_PASSWORD=miclaveNext -e MYSQL_DATABASE=nextcloud_db mariadb:latest


Si queremos borrar un contenedor para volver a definirlo habremos de ejecutar la orden "docker rm nombre_de_contenedor"
En nuestro caso sería
Code:
docker rm mariadb-server

Si queréis acceder a la consola de esa máquina ejecutamos desde la consola de la nas el comando
Code:
docker exec -it mariadb-server /bin/bash

Los parámetros de creación del docker, los sacamos de la información que nos suministran en la web de docker

Como veis hay un mundo en esto de los contenedores  Smile
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η
  Reply
#2
Hola, Ganekogorta, este tutorial es justo lo que buscaba, mil gracias.
Ahora .. no he conseguido que funcione... Lo instala bien y lo veo funcionando, pero no consigo conectar con la bbdd, ni siquiera con heidisql ni phpmyadmin, entiendo que el usuario de la bbdd es root y la contraseña la que pongamos en "claveroot", pero no consigo conectar.
También he realizado la modificación a phpmyadmin de tu tutorial (https://www.qnapclub.es/showthread.php?t...ht=mariadb)  para poner conectar con las bbdd de qnap de maria db 5.5 y la que se ha creado con 10.5 y puerto 3307, lo que he hecho es al editar el archivo config y como Segundo server he puesto la ip del host :3307, osea:
= 'localhost:3307';
parece que lo encuentra pero NO conecta Sad

Alguna idea de que puede suceder?

Muchas gracias
  Reply
#3
Hola

Por lo que cuentas tienes phpmyadmin, para que te salga en la lista tendrás que editar el archivo de configuración de phpmyadmin

/share/VOLUMENx/.qpkg/phpMyAdmin/phpMyAdmin/config.inc.php

Tendrás que cambiar VOLUMENx por su almacenamiento.

Pero no podrás acceder por no tener permisos en la BBDD.
Tendrás que acceder a la BBDD por la consola del docker y agregar a los usuarios con permisos de acceso. Deberías agregar a “root” con la ip local de la nas.
Echa una ojeada a este enlace https://pajarokillo.wordpress.com/2016/1...on-docker/
Seguro que te sirve
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η
  Reply
#4
Muchas gracias por tu respuesta, si, esto ya lo he hecho pero NO consigo que funcione, igual me estoy liando con lo que quiero hacer, mejor te expongo lo que quiero a ver si se te ocurre algo.
El Qnap tiene PHP 7.3 y Mariadb 5.5, actualmente estoy haciendo pruebas con el CRM dolibarr con el servidor web nativo de Qnap, es decir sin docker.
Con docker he podido instalar y enlazar el servidor mariadb 10.6.3, phpmyadmin 5.1.1 funcionando perfectamente, utilizo portainer para la "gestion" de contenedores en lugar de container station, eso sí, instalo todo por consola con putty. Ahora me gustaría enlazar el servidor web nativo de Qnap con esa bbdd, o crear un contenedor de Apache con php 7.4, me da un poco igual, siempre que pueda acceder a los archivos de ese contenedor, pero no hay manera de que me funcione, si instalo un contenedor de apache me muestra error 403 y de ahí no salgo, he leído y realizado todas las pruebas que he podido y nada... Sad

Alguna idea?

Muchas gracias
  Reply
#5
Hola

Echa una ojeada a esta web https://conpilar.es/como-configurar-y-us...container/

Si la tienes en docker por un puerto, habrás de agregarla en la configuración del que quiere acceder a ella con la dirección ip_de_tu_nas:puerto. y deberías agregar permisos al usuario que tu quieras desde la ip local de la nas con algo similar a 
Code:
CREATE USER 'usuario'@'ip_local_de_tu_nas' IDENTIFIED BY 'clave';
GRANT ALL ON *.* TO 'usuario'@'ip_local_de_tu_nas';
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η
  Reply
#6
(19-07-2021, 10:03 AM)microcabin Wrote: Muchas gracias por tu respuesta, si, esto ya lo he hecho pero NO consigo que funcione, igual me estoy liando con lo que quiero hacer, mejor te expongo lo que quiero a ver si se te ocurre algo.
El Qnap tiene PHP 7.3 y Mariadb 5.5, actualmente estoy haciendo pruebas con el CRM dolibarr con el servidor web nativo de Qnap, es decir sin docker.
Con docker he podido instalar y enlazar el servidor mariadb 10.6.3, phpmyadmin 5.1.1 funcionando perfectamente, utilizo portainer para la "gestion" de contenedores en lugar de container station, eso sí, instalo todo por consola con putty. Ahora me gustaría enlazar el servidor web nativo de Qnap con esa bbdd, o crear un contenedor de Apache con php 7.4, me da un poco igual, siempre que pueda acceder a los archivos de ese contenedor, pero no hay manera de que me funcione, si instalo un contenedor de apache me muestra error 403 y de ahí no salgo, he leído y realizado todas las pruebas que he podido y nada... Sad

Alguna idea?

Muchas gracias
Hola
He visto que hay nuevas actualizaciones de mariaDB y que dependiendo de la cpu las cosas cambian.

El comando para nas con CPU x64 es 

Code:
docker run -d -p 3307:3306 --restart always --name="mariadb-server" -v /share/mariadb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=clavemaestra -e MYSQL_USER=nextcloud -e MYSQL_PASSWORD=ClaveusuarioNextcloud -e MYSQL_DATABASE=nextcloud_db mariadb:10.5.11

Y para nas con CPU ARM v7 es

Code:
docker run -d -p 3307:3306 --restart always --name="mariadb-server" -v /share/mariadb:/config/databases -e MYSQL_ROOT_PASSWORD=clavemaestra -e MYSQL_USER=nextcloud -e MYSQL_PASSWORD=ClaveusuarioNextcloud -e MYSQL_DATABASE=nextcloud_db linuxserver/mariadb:arm32v7-latest

En ambos casos he puesto que el puerto externo sea el 3307 (ip_nas:3307) y que el interno del docker sea el 3306 (ip_docker:3306).
No uso el 3306 en ambos porque puede haber problemas con la mariaDB integrada en QTS.
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η
  Reply
#7
(20-05-2020, 04:25 PM)Ganekogorta Wrote: Hola

He visto que la aplicación nativa de MariaDB ( MySQL) se ha quedado un poco desfasada en la versión 5.5.57.
Una forma de usar una mas nueva es crear un contenedor con una mucho mas reciente  con versión 10.4.12.

Para hacerlo sólo hemos de tener instalada la aplicación de Docker Station, que muchas de nuestra nas, aún siendo ARM,lo soportan.

Podemos hacerlo desde el Docker Station, pero una vez hayamos hecho el container apenas podemos alterar sus definición.

Por ello recomiendo usar la consola (Putty y otros programas similares) o incluso apoyarnos en otro contenedor llamado Portainer (que permite mas cosas que Docker Station)

El comando de consola para crear el contenedor es:
Code:
docker run -d -p 3307:3307 --restart always --name="mariadb-server" -v /share/DockerData/mariadb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=claveroot mariadb:latest

Hay un parámetro que nos va ser interesante para poder mantener datos, aunque eliminemos el contenedor.
Para ello previamente he creado una carpeta compartida llamada "DockerData" donde los contenedores dejarán ciertos datos.
El parámetro es  "-v /share/DockerData/mariadb:/var/lib/mysql" y lo que hace es asociar la ruta real de la estructura de archivos de nuestra nas "/share/DockerData/mariadb" con la del interior de conetenedor "/var/lib/mysql"
Esto último es importante porque así los datos son persistentes y fácilmente podemos hacer copias de resguardo de ellos (incluso moverlos de nas).


Con la orden anterior sólo hemos hecho la creación del contenedor, no hay usuarios, ni base de datos a usar.


Si tenemos idea de usarla en combinación de otros "paquetes" como NextCloud, OwnCLoud, Moodle, Pydio,.... a la hora de crear el container podemos indicar esos datos.

Por ejemplo, si vamos a usar NextCloud, yo suelo hacer las BBDD con el mismo nombre del programa mas "_db" quedando "nextcloud_db", hago un usuario exclusivo para ese programa "nextcloud" y una contraseña exclusiva para él "miclaveNext"

El comando quedaría :
Code:
docker run -d -p 3307:3307 --restart always --name="mariadb-server" -v /share/DockerData/mariadb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=claveroot -e MYSQL_USER=nextcloud -e MYSQL_PASSWORD=miclaveNext -e MYSQL_DATABASE=nextcloud_db mariadb:latest

Si no lo queremos hacer así, podemos acceder a la consola de la MariaDB y por ordenes SQL crear la base de datos, el usuario y su clave. 
O también podemos hacerlo usando PhpMyAdmin, el cual habremos instalado previamente desde el "App Center".

Yo personalmente para organizar en la red este contenedor y los próximos que haga he creado una red llamada "miscontenedores"
Esto hay que hacerlo previo a la creación del contenedor (no es del todo cierto porque se pueden mover de redes por comandos, pero no quiero complicaros)

La orden es sencilla y de nuevo la haremos desde la consola:
Code:
docker network create miscontenedores

Si quisiéramos asignar un rango de red privado y que coincida con alguno de los existentes por ejemplo 172.17.5.x , el comando sería
Code:
docker network create --subnet=172.17.5.0/12 miscontenedores


Así luego añado un parámetro más en la cadena de creación del contenedor y finalmente quedaría así:
Code:
docker run -d -p 3307:3307 --network=miscontenedores --restart always --name="mariadb-server" -v /share/DockerData/mariadb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=claveroot -e MYSQL_USER=nextcloud -e MYSQL_PASSWORD=miclaveNext -e MYSQL_DATABASE=nextcloud_db mariadb:latest

Si quisieramos que ese contenedor tenga una ip marcada por nosotros como la 172.16.5.6 , el comando será:
Code:
docker run -d -p 3307:3307 --ip 172.17.5.6 --network=miscontenedores --restart always --name="mariadb-server" -v /share/DockerData/mariadb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=claveroot -e MYSQL_USER=nextcloud -e MYSQL_PASSWORD=miclaveNext -e MYSQL_DATABASE=nextcloud_db mariadb:latest


Si queremos borrar un contenedor para volver a definirlo habremos de ejecutar la orden "docker rm nombre_de_contenedor"
En nuestro caso sería
Code:
docker rm mariadb-server

Si queréis acceder a la consola de esa máquina ejecutamos desde la consola de la nas el comando
Code:
docker exec -it mariadb-server /bin/bash

Los parámetros de creación del docker, los sacamos de la información que nos suministran en la web de docker

Como veis hay un mundo en esto de los contenedores  Smile

Hola, qué diferencia hay entre usar la aplicacion que viene con QNAP e instalar esto en un docker?. Gracias
  Reply
#8
Hola

Inicialmente por funcionamiento hacen lo mismo. 
La integrada en QTS es usada por aplicaciones nativas de QTS. Y si agregas Dockers puede hacer que la usen. Pero Qnap tarda mucho en actualizar las aplicaciones.
Te puede pasar que un docker exija una versión concreta que la de QTS no cumpla.
Por eso a veces te encuentras dockers que definen un stack (más de un di jer interrelacionado ) por ejemplo NextCloud con mariadb.

La ventaja de tener una única mariadb (o cualquier base de datos) es que centralizas las sus copias de seguridad. Pero hay que andar con más cuidado con las actualizaciones ya que pueden “fallar” las comunicaciones con otro docker que no sabe usar esa versión más nueva de mariadb.

En mi opinión, si vas a usar una aplicación que va a ser piedra angular de tu sistema (por ejemplo un nextcloud), recomiendo que use una mariadb en exclusiva. Así las actualizaciones son más controladas.
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η
  Reply




Users browsing this thread: 1 Guest(s)