Instalar MariaDB vía Docker

En la web ya hemos hablado en diferentes artículos sobre el motor de base de datos MariaDB. Esta vez veremos su instalación mediante un contenedor utilizando Docker. Tecnología de la que también hemos hablado y de la cuál actualmente estoy escribiendo una guía, en el proyecto colaboratorio.net

Si seguís dicha guía o habéis trabajado alguna vez con contenedores, sabéis que un contenedor está destinado a ejecutar un servicio específico conjuntamente con las librerías y dependencias que necesita, de manera separada y utilizando muy pocos recursos, comparado con una máquina virtual y que decir con un servidor físico.

Dicho esto, vamos al lío. No explicaré la instalación de Docker en el artículo, ya que tanto en esta web como en la web de colaboratorio.net he hablado de ello.

Instalar MariaDB vía Docker

Primero de todo vamos a ver qué serie de imágenes tenemos disponibles. De la siguiente manera:

  1. docker search mariadb

Nos aparecerán unas cuantas. Nosotros utilizaremos la última versión oficial, llamada “mariadb:latest”

  1. docker pull mariadb:latest

A día de hoy esta versión utiliza el core 10.0

Una vez descargada, la podemos visualizar con el comando : docker images

  1. mariadb                 latest              b1fe0881b739        7 days ago          398MB

Para crear el contenedor utilizando la imagen, primero de todo utilizaremos el parámetro “inspect” para que nos muestre los puertos que utiliza la imagen:

  1. docker inspect b1fe0881b739 | grep –i tcp

Esto lo hacemos, porque queremos exponer el puerto, de tal manera que podamos, desde fuera del servidor Docker, que juega el papel de anfitrión de los contenedores, poder conectar con el servicio de base de datos que “corre” en el contenedor.

Para crear el contenedor vamos a especificar varias cosas, la primera, especificaremos la clave de superusuario utilizando -e MYSQL_ROOT_PASSWORD=nuestra-pass; además le vamos a asignar un nombre utilizando --name mariadbtst , de la siguiente manera:

  1. docker run -dti -p 33306:3306 --name mariadbtst -e MYSQL_ROOT_PASSWORD=contrasea b1fe0881b739

Una vez creado ya lo podemos ver en funcionamiento:

  1. [root@centos7 ~]# docker ps -a
  2. CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                          PORTS                     NAMES
  3. 4ecc6becfcb6        b1fe0881b739        "docker-entrypoint..."   3 seconds ago        Up 2 seconds                    0.0.0.0:33306->3306/tcp   mariadbtst10

Las operaciones habituales de parada y arranque son, para reiniciar docker restart mariadbtst, para parar docker stop mariadbtst y para encender docker start mariadbtst. También existe la opción de pausar un contenedor, de esta manera: docker pause mariadbtst y para “despausardocker unpause

Si tenemos algún problema con el contenedor o simplemente queremos ver su actividad, podemos utilizar el parámetro “logs”, de la siguiente manera:

  1. [root@centos7 ~]# docker logs mariadbtst10
  2. Initializing database
  3.  
  4. PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !
  5. To do so, start the server, then issue the following commands:
  6.  
  7. '/usr/bin/mysqladmin' -u root password 'new-password'
  8. '/usr/bin/mysqladmin' -u root -h  password 'new-password'
  9.  
  10. Alternatively you can run:
  11. '/usr/bin/mysql_secure_installation'
  12.  
  13. which will also give you the option of removing the test
  14. databases and anonymous user created by default.  This is
  15. strongly recommended for production servers.
  16.  
  17. See the MariaDB Knowledgebase at http://mariadb.com/kb or the
  18. MySQL manual for more instructions.
  19.  
  20. Please report any problems at http://mariadb.org/jira
  21.  
  22. The latest information about MariaDB is available at http://mariadb.org/.
  23. You can find additional information about the MySQL part at:
  24. http://dev.mysql.com
  25. Consider joining MariaDB's strong and vibrant community:
  26. https://mariadb.org/get-involved/
  27.  
  28. Database initialized
  29. MySQL init process in progress...

Si queremos acceder a la consola del contenedor:

  1. docker exec –it mariadbtst /bin/bash

Si no queremos acceder al contenedor podemos interactuar con él, como por ejemplo, para asegurarlo, utilizar la herramienta mysql_secure_installation

  1. docker exec -it mariadbtst10 mysql_secure_installation

Con el resultado:

  1. [root@centos7 ~]# docker exec -it mariadbtst10 mysql_secure_installation
  2.  
  3. NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
  4.       SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
  5.  
  6. In order to log into MariaDB to secure it, we'll need the current
  7. password for the root user.  If you've just installed MariaDB, and
  8. you haven't set the root password yet, the password will be blank,
  9. so you should just press enter here.
  10.  
  11. Enter current password for root (enter for none):
  12. OK, successfully used password, moving on...
  13.  
  14. Setting the root password ensures that nobody can log into the MariaDB
  15. root user without the proper authorisation.
  16.  
  17. You already have a root password set, so you can safely answer 'n'.
  18.  
  19. Change the root password? [Y/n] n

Editado el 12/02/2018 Si queremos que persistan las bases de datos cuando paramos o eliminamos el contenedor, debemos crear un volumen. En nuestro caso lo vamos a declarar al crear el contenedor, de la siguiente manera, utilizando el parámetros ‘-v’, así:

  1. docker run -dti --name "servmariadb" -p 3306:3306 -v mariadbvol:/var/lib/mysql:rw \ 
  2. -e MYSQL_ROOT_PASSWORD=contrasea 4f76b7e73b00

De esta manera se creará un carpeta en el host anfitrión en /var/lib/docker/volumes, con el nombre de ‘mariadbvol’. En la ubicación se guardará toda la información de la carpeta /var/lib/mysql del contenedor.

Dejamos el artículo aquí, espero que os haya sido interesante y que os pueda ser útil en el algún momento. Nos vamos leyendo.

Para el artículo me he servidor de la siguiente información:

mariadb.com | docks.docker.com