Entorno¶
En esta páginas vamos a agrupar las herramientas que vamos a utilizar en el curso, con las instrucciones o comandos necesarios para su puesta en marcha.
Herramientas¶
Las herramientas que vamos a utilizar a lo largo del curso son:
- MariaDB: SGBD relacional basado en MySQL.
- PhpMyAdmin: herramienta gráfica de gestión de MariaDB / MySQL
- PostgreSQL: SGBD relacional.
- PgAdmin: herramienta gráfica de gestión de PostgreSQL.
- Redis: Base de datos NoSQL de tipo clave-valor.
- MongoDB: Base de datos NoSQL de tipo documental.
- Grafana: herramienta de observabilidad y visualización de datos.
- Visual Studio Code: editor de texto/código.
Docker
En este módulo vamos a utilizar Docker como herramienta para probar las bases de datos. En pocas palabras, Docker permite lanzar contenedores que contienen los servicios que necesitemos. En este módulo no vamos a aprender a crear contenedores, sólo a lanzar contenedores ya existentes.
Para ello, el primer paso es instalar Docker Desktop en tu ordenador.
MariaDB¶
MariaDB es un SGBD relacional basado en MySQL, ampliamente utilizado en el desarrollo de aplicaciones web y multiplataforma.
MariaDB dispone de un interfaz basada en páginas web llamada PhpMyAdmin, que a través de un servidor web, por ejemplo Apache, permite administrar las bases de datos de un servidor desde cualquier equipo de la red.
Este software dispone de opciones para realizar prácticamente cualquier operación que se pueda realizar vía SQL. Permite gestionar las bases de datos de un servidor, crear, borrar y modificar tablas, lanzar comandos SQL, exportar e importar información, recopilar estadísticas, hacer copias de seguridad, etc. Además dispone de un pequeño diseñador que permite gestionar las relaciones de las tablas.
Para lanzar tanto MariaDB com PhpMyAdmin mediante Docker, el primer paso es crear la definición de los dos contenedores en un archivo Docker Compose, el cual hemos llamado docker-compose-mariadb.yml
), donde además de la definición de ambos contenedores, configuraremos el usuario para acceder al SBGD, así como el volumen para los datos:
services:
mariadb:
image: mariadb:latest
container_name: mdb
ports:
- 3306:3306
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=pruebas
- MYSQL_USER=s8a
- MYSQL_PASSWORD=s8a
volumes:
- mariabd_data:/var/lib/mysql
phpmyadmin:
image: phpmyadmin
container_name: phpma
ports:
- 8080:80
environment:
- PMA_HOST=mariadb
depends_on:
- mariadb
volumes:
mariabd_data:
Para lanzar los contenedores, utilizaremos el siguiente comando:
docker compose -p mariadb-s8a -f docker-compose-mariadb.yml up -d
Cliente mariadb
¶
Primero nos conectamos al contenedor (el cual en el archivo docker-compose hemos llamado mdb
):
docker exec -it mdb bash
A continuación, con el cliente del SGBD, nos conectamos al servidor (al ser localhost
no hace falta que lo indiquemos) pasándole el usuario (-u nomusuario
) y la contraseña (-pcontraseña
)`:
mariadb -u s8a -ps8a pruebas
Y obtendremos información como que nos hemos conectado correctamente, y en la última línea muestra que ha conectado con la bd pruebas
:
root@e6dbf61ca4db:/# mariadb -u s8a -ps8a pruebas
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 11.4.2-MariaDB-ubu2404 mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [pruebas]>
Si quieres más información sobre como conectar con MariaDB y todos los parámetros disponibles, consulta la documentación oficial.
s8a superusuario
Si queremos evitar usar el usuario root
para crear bases de datos e importar esquemas, es muy cómodo configurar el usuario que hemos creado para que pueda acceder a todos los recursos. Para ello, una vez hemos entrado con root:
mariadb -u root -proot
Le damos todos permisos a todos los recursos al usuario s8a
:
GRANT ALL PRIVILEGES ON *.* TO 's8a'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
La gestión de permisos la estudiaremos en la unidad 9.- Lenguaje SQL: Control de Datos DCL y Transacciones TCL.

PhpMyAdmin¶
Para acceder a la interfaz gráfica de PhpMyAdmin, desde nuestro navegador web, nos conectamos a http://localhost:8080, donde veremos el interfaz de login, y entramos con el usuario s8a
y la contraseña s8a
que habíamos configurado previamente en la definición del contenedor.
Una vez dentro, en el menú lateral veremos las bases de datos a las cuales tenemos acceso, así como, una vez seleccionada una en concreto, las tablas con sus columnas e índices, y en la parte derecha, las diferentes opciones mediante el menú superior (desde herramientas para insertar o buscar registros, como importar o exportar los datos u obtener una representación gráfica del modelo físico):

Aprendiendo PhpMyAdmin
Aunque en la red existen multitud de recursos con artículos y tutoriales sobre PhpMyAdmin, a lo largo del curso iremos utilizando la herramienta y viendo las posibilidades que ofrece conforme las vayamos necesitando.
Grafana¶
Grafana es una plataforma de código abierto para la observabilidad y el análisis de datos en tiempo real. Permite visualizar métricas provenientes de diversas fuentes, como bases de datos SQL y NoSQL, sistemas de monitoreo como Prometheus o InfluxDB, y plataformas en la nube. Su interfaz intuitiva facilita la creación de paneles interactivos y gráficos personalizados, lo que lo convierte en una herramienta esencial para la monitorización de infraestructuras, aplicaciones y servicios. Además, Grafana soporta alertas y consultas avanzadas, permitiendo a los usuarios tomar decisiones basadas en datos de manera eficiente.
Para lanzar Grafana sobre los contenedores que ya tenemos, crearemos un nuevo archivo, el cual hemos llamado docker-compose-grafana.yml
, donde además de la definición de los contenedores previos, hemos configurado Grafana en el puerto 3000:
services:
mariadb:
image: mariadb:latest
container_name: mdb
ports:
- 3306:3306
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=pruebas
- MYSQL_USER=s8a
- MYSQL_PASSWORD=s8a
volumes:
- mariabd_data:/var/lib/mysql
phpmyadmin:
image: phpmyadmin
container_name: phpma
ports:
- 8080:80
environment:
- PMA_HOST=mariadb
depends_on:
- mariadb
grafana:
image: grafana/grafana-oss
container_name: grafana
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
volumes:
mariabd_data:
grafana_data:
Una vez creado el archivo, lanzamos el contenedor mediante:
docker compose -p mariadb-s8a -f docker-compose-grafana.yml up -d
Y ya podremos acceder a la página de login (http://localhost:3000/) con el usuario admin
y contraseña admin
, donde nos pedirá cambiar la contraseña. Una vez dentro, uno de los primeros pasos es añadir una fuente de datos (data source) de tipo MySQL. Ten en cuenta que en nombre del host debes configurar el nombre del contenedor: mdb:3306
:

PostgreSQL¶
PostgreSQL es un SGBD relacional que sigue un modelo cliente-servidor, soportando accesos concurrentes de múltiples usuarios.
Por ello, necesitamos lanzar un contenedor con el servidor al cual nos conectaremos desde el cliente por línea de comandos psql
o desde el cliente gráfico PgAdmin. Por ello, en el fichero de configuración docker-compose-postgres.yml
de Docker Compose tenemos dos servicios:
services:
db:
image: postgres
container_name: pg
restart: always
ports:
- "5432:5432"
environment:
- POSTGRES_USER=s8a
- POSTGRES_PASSWORD=s8a
- POSTGRES_DB=pruebas
volumes:
- pg-data:/var/lib/postgresql/data
pgadmin:
image: dpage/pgadmin4
container_name: pgadmin
restart: always
ports:
- "5050:80"
environment:
PGADMIN_DEFAULT_EMAIL: admin@s8a.com
PGADMIN_DEFAULT_PASSWORD: admin
volumes:
- pgadmin-data:/var/lib/pgadmin
volumes:
pg-data:
pgadmin-data:
Tras crear este archivo en nuestro sistema, podemos crear los contenedores mediante:
docker compose -p pg-s8a -f docker-compose-postgres.yml up -d
Cliente psql
¶
Primero nos conectamos al contenedor (el cual en el archivo docker-compose hemos llamado pg
):
docker exec -it pg bash
A continuación, con el cliente del SGBD, nos conectamos al servidor (al ser localhost
no hace falta que lo indiquemos) pasándole el usuario (-U nomusuario
) y luego rellenando la contraseña (s8a
):
psql -U s8a pruebas
Obteniendo información de la versión instalada y en la última línea muestra que ha conectado con la bd pruebas
:
root@6475b31d89f4:/# psql -U s8a pruebas
psql (16.4 (Debian 16.4-1.pgdg120+1))
Type "help" for help.
pruebas=#
PgAdmin¶
Una vez arrancados los contenedores, accederemos a http://localhost:5050/ y tras introducir los datos del usuario administrador (admin@s8a.com
/ admin
), veremos el interfaz de inicio de la herramienta de administración PgAdmin.
El siguiente paso es crear la conexión con el servidor. Para ello, creamos un nuevo servidor mediante la opción Agregar un nuevo servidor y en los datos de configuración, indicamos los mismos datos que hemos utilizado al definir el contenedor (en el nombre del servidor podemos poner el nombre del contenedor o su identificador pg
, así como el usuario s8a
y la contraseña s8a
):

Error - role does not exists
Si al crear la conexión al servidor recibís algún tipo de error similar a "rol inexistente", es probable que los volúmenes y las versiones de los contenedores no concuerden. Si es así, elimina los contenedores y los volúmenes, y vuelve a ejecutar el script de Docker Compose.
Una vez dentro, tendremos un cuadro de mandos para monitorizar el SGBD, así como poder navegar por las estructuras de la base de datos:

AWS RDS
Además de utilizar ambos SGBD en local, podemos hacer uso de servicios en el cloud como AWS RDS.
DBeaver¶
Además de utilizar los clientes propios de cada SGBD, así como herramientas web específicas, es muy común utilizar un cliente gráfico multisolución como DBeaver.
El primer paso es crear la conexión al SGBD, mediante la opción del menú y tras seleccionar el SGBD, indicaremos los datos de la conexión. En este caso, como ya no lo hacemos desde dentro del contenedor, el host siempre será localhost
, y los usuarios, los indicados anteriormente.

Redis¶
Redis es una solución NoSQL basada en un modelo de datos de clave-valor en memoria que se utiliza como base de datos de respuesta rápida o caché de aplicaciones.
Aunque podemos instalar Redis en cualquier sistema operativo, en nuestro caso, vamos a centrarnos en hacerlo mediante un contenedor Docker.
La primera posibilidad es instalar la imagen redis/redis-stack-server
mediante el comando:
docker run -d --name redis-stack-server -p 6379:6379 redis/redis-stack-server:latest
Si en cambio, queremos utilizar el stack de Redis que también incluye la herramienta gráfica Redis Insight en el puerto 8001
para administrar el sistema, usaremos la imagen redis/redis-stack
mediante el comando:
docker run -d --name redis-stack -p 6379:6379 -p 8001:8001 redis/redis-stack:latest
Si accedemos a http://localhost:8001/ accederemos a la página de inicio:

Redis cloud¶
Si no queremos instalar Redis en nuestro ordenador, podemos emplear Redis cloud, el cual ofrece de manera gratuita una instancia con 30MB de datos. Para ello, en la propia página de Redis, tras registrarnos, podremos crear una instancia.

Una vez creada, obtendremos su información de acceso, con su endpoint público, al cual podemos conectarnos con el cliente Redis CLI o mediante el interfaz gráfico Redis Insight (en su caso, deberíamos también instalarlo como cliente en nuestro dispositivo).

MongoDB¶
Desde https://www.mongodb.com/try/download/community podemos descargar la versión Community acorde a nuestro sistema operativo.
Independientemente de nuestro sistema operativo, por defecto, el demonio se lanza sobre el puerto 27017. Una vez instalado, si accedemos a http://localhost:27017 podremos ver que nos indica cómo estamos intentando acceder mediante HTTP a MongoDB mediante el puerto reservado al driver nativo.

En vez de instalarlo como un servicio en nuestra máquina, a día de hoy, es mucho más cómodo hacer uso de contenedores Docker o utilizar una solución cloud.
Docker¶
Para lanzar el contenedor de Docker al que llamaremos iadb-mongo
mediante el siguiente comando:
docker run -p 127.0.0.1:27017:27017 --name iabd-mongo -d mongo
MongoDB y procesadores AVX
Si tenemos un procesador sin soporte para AVX, necesitamos instalar una versión inferior a la 5.0.
Así pues, podemos indicar la versión 4.4:
docker run -p 127.0.0.1:27017:27017 --name iabd-mongo -d mongo:4.4
A continuación vamos a descargar el conjunto de datos comprimido (sampledata.archive.gz) o sin comprimir (sampledata.archive) que ofrece MongoDB a modo de prueba, el cual vamos a emplear a lo largo de las diferentes sesiones.
Volvemos al terminal de nuestro sistema y copiamos los datos desde nuestro sistema a la carpeta /tmp
del contenedor:
docker cp sampledata.archive.gz iabd-mongo:/tmp
Posteriormente abrimos un terminal dentro de nuestro contenedor (o mediante Attach Shell en VSCode):
docker exec -it iabd-mongo bash
Y finalmente, si hemos descargado el .gz
lo descomprimimos (gunzip sampledata.archive.gz
) y restauramos los datos mediante mongorestore
:
mongorestore --archive=sampledata.archive
Una vez cargados, nos informará que se han restaurado 433.281 documentos.
Mongo Atlas¶
Si, en cambio, preferimos una solución cloud, disponemos de Mongo Atlas, que nos ofrece de manera gratuita un clúster compartido de servidores con 3 nodos y 512 MB para datos. Si queremos una solución serverless o un servidor dedicado, ya tendremos que pasar por caja.

Para comenzar a utilizar Mongo Atlas el primer paso es registrarnos y completar un cuestionario sobre nuestro uso. Tras ello:
-
Creamos el clúster de despliegue. En nuestro caso, hemos realizado el despliegue en AWS en la región de Paris (
eu-west-3
) y dejado el nombre por defecto,Cluster 0
.Elección del clúster -
Creamos un usuario/contraseña para autenticar nuestra conexión. En nuestro caso, hemos creado el usuario
iabd
con la contraseñaiabdiabd
(después la podemos modificar desde el menú Security -> Database Access):Configuración del usuario En la misma pantalla, indicamos que permitimos las conexiones desde todas las direcciones IP (esta decisión sólo la tomamos por comodidad, para poder conectarnos desde casa y el centro) mediante la IP
0.0.0.0
(después podemos modificar la configuración desde el menú Security -> Network Access). -
Una vez realizados los dos pasos anteriores, comenzará la creación del clúster, la cual puede tardar de 2 a 3 minutos.
Dashboard del clúster -
A continuación, cargaremos los datos de ejemplo. Para ello, en el menú con los tres puntos (
...
), elegiremos la opción Load Sample Dataset. Una vez haya finalizado, podremos ver los datos cargados pulsando sobre el botón Browse Collections:Colecciones con los datos de prueba
Conexión segura
Mediante srv
se establece una conexión segura
Finalmente, para obtener la cadena de conexión, desde el dashboard del clúster con la opción Connect o desde la pestaña Cmd Line Tools del propio clúster, podremos obtener la cadena de conexión, que tendrá un formato similar a :
mongodb+srv://usuario:password@host/basededatos
En versiones anteriores, una herramienta de terceros bastante utilizada era RoboMongo / Robo3T / Studio3T el cual extiende el shell y ofrece un IDE más amigable. A días de hoy, MongoDB tiene su propio IDE conocido como MongoDB Compass.
MongoDB Compass¶
En el curso nos vamos a centrar en el uso del shell, pero no está de más conocer las herramientas visuales que facilitan el trabajo con MongoDB en el día a día.
Una de ellas es MongoDB Compass, que facilita la exploración y manipulación de los datos. De una manera flexible e intuitiva, Compass ofrece visualizaciones detalladas de los esquemas, métricas de rendimiento en tiempo real así como herramientas para la creación de consultas.
Existen tres versiones de Compass, una completa con todas las características, una de sólo lectura sin posibilidad de insertar, modificar o eliminar datos (perfecta para analítica de datos) y una última versión isolated que solo permite la conexión a una instancia local.
Una vez descargada e instalada la versión que nos interesa, tras crear la conexión a partir de la cadena de conexión (similar a mongodb+srv://<usuario>:<contraseña>@cluster0.4hm7u8y.mongodb.net/test
), veremos en el menú de la izquierda todas las conexiones a servidores MongoDB almacenadas y las diferentes bases de datos de las respectivas conexiones:

Si seleccionamos una base de datos concreta, y de ella, una colección en el menú de la izquierda, en el panel central tendremos una visualización de los datos contenidos, así como opciones para analizar su esquema, realizar consultas agregadas, editar los índices, etc... Además, podremos realizar consultas sobre los datos:

mongosh en Compass
Tanto sobre el nombre de la conexión (dejando el ratón encima aparecerá un icono), como desde la parte superior derecha, podemos conectarnos desde un shell similar a mongosh
.