A continuación vamos a ver cómo se puede crear, configurar y utilizar una base de datos MySQL en un contenedor de Docker como base de datos para tus proyectos, así como diferentes formas en las que se puede acceder a la base de datos.
Si necesitas más información sobre Docker, puedes visitar la Introducción a Docker.
- ¿Qué es MySQL?
- ¿Cómo configurar un contenedor MySQL con Docker?
- ¿Cómo crear un contenedor Docker con una base de datos MySQL?
- ¿Cómo configurar un contenedor de Docker con un servicio de base de datos MySQL?
- ¿Cómo configurar un contenedor con una base de datos MySQL y Adminer?
- ¿Cómo configurar un contenedor con una base de datos MySQL con acceso externo?
Referencias
¿Qué es MySQL?
MySQL es el sistema de gestión de bases de datos relacionales (RDBMS – Relational database management system) de código abierto más popular. MySQL se ha convertido en la opción de base de datos favorita para todo tipo de aplicaciones, desde proyectos personales hasta grandes sitios web profesionales.
¿Cómo configurar un contenedor MySQL con Docker?
Para poder crear y utilizar un contenedor de MySQL con Docker, debes asegurarte de tener una versión de Docker instalada y actualizada en tu equipo. Si no es así, puedes descargar e instalar Docker para el sistema operativo que desees:
- Descargar Docker para Mac
- Descargar Docker para Windows
- Docker para Linux
Si prefieres instalar Docker Desktop, puedes seguir las instrucciones de instalación de Docker Desktop para Mac (Inglés) o Docker Desktop para Windows (Inglés).
Puedes encontrar más información sobre Docker Desktop aquí: Introducción a Docker – Docker Desktop
¿Cómo crear un contenedor Docker con una base de datos MySQL?
Crear y ejecutar un contenedor de Docker con una base de datos MySQL es algo tan sencillo como ejecutar el siguiente comando:
docker run --name <container_name> -e MYSQL_ROOT_PASSWORD=<root_password> -d mysql:<tag>
<container_name>
es el nombre que quieras darle al contenedor. Por ejemplo:mysql-db
<root_password>
es la contraseña que quieras que tenga el usuario root de la base de datos MySQL. Por ejemplo: mysql<tag>
es la etiqueta de la versión de contenedor demysql
que quieras utilizar. Por ejemplo:latest
Ejemplo:
docker run --name mysql-db -e MYSQL_ROOT_PASSWORD=mysql -d mysql:latest
¿Cómo acceder a la shell de un contenedor Docker con MySQL?
Mediante el comando docker exec
se pueden ejecutar comandos dentro de un contenedor de MySQL en Docker.
Para acceder a la shell bash del contenedor mysql
, basta con ejecutar este comando:
docker exec -it <container_name> bash
<container_name>
es el nombre que quieras darle al contenedor. Por ejemplo:mysql-db
Ejemplo:
docker exec -it mysql-db bash
¿Cómo acceder a los logs de un contenedor Docker con MySQL?
Con el comando docker logs
se puede acceder a los logs de un contenedor de Docker con una base de datos MySQL.
Para acceder a los logs del contenedor mysql
, solo hace falta ejecutar este comando:
docker logs <container_name>
<container_name>
es el nombre que quieras darle al contenedor. Por ejemplo:mysql-db
.
Ejemplo:
docker logs mysql-db
¿Cómo conectar a una una base de datos MySQL a través de línea de comandos?
Para conectar a una base de datos mysql
de dentro de un contenedor, lo primero que hay que hacer es acceder a la shell del contenedor MySQL:
docker exec -it mysql-db bash
A continuación, sólo hay que conectar a la base de datos mysql
a través del cliente en línea de comandos:
mysql -h <db_host> -u <username> -p
<db_host>
es el nombre del servidor de la base de datos. Utilizalocalhost
o el nombre del servicio de la base de datos<username>
es el usuario de la base de datos. Utiliza el usuarioroot
Ejemplo:
mysql -h localhost -u root -p
Te pedirá que introduzcas la contraseña (lo que pusiste como valor para MYSQL_ROOT_PASSWORD
): mysql
Te aparecerá un mensaje de bienvenida indicando que te has conectado correctamente a la base de datos.
¿Cómo configurar un contenedor de Docker con un servicio de base de datos MySQL?
Para configurar un contenedor de Docker con un servicio de base de datos mysql
con Docker Compose, hay que crear un archivo de configuración yml
como este:
# Use root/mysql as user/password credentials
version: '3.8'
services:
db:
image: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: mysql
Archivo Docker Compose: mysql-stack.yml
¿Cómo arrancar un contenedor MySQL con Docker Compose?
Para arrancar el contenedor de Docker con la base de datos MySQL, basta con ejecutar el siguiente comando:
docker-compose -f <compose_file> up
Si quieres ejecutar el contenedor de MySQL en segundo plano, puedes añadir la opción -d
al comando:
docker-compose -f <compose_file> up -d
<compose_file>
es el nombre del archivo de configuración. En este caso:mysql-stack.yml
Ejemplo:
docker-compose -f mysql-stack.yml up -d
¿Cómo parar un contenedor de MySQL con Docker Compose?
Utiliza este comando para parar el contenedor:
docker-compose -f <compose_file> down
<compose_file>
es el nombre del archivo de configuración. En este caso:mysql-stack.yml
Ejemplo:
docker-compose -f mysql-stack.yml down
¿Cómo conectar a la base de datos del contenedor de MySQL desde la shell del contenedor?
Para conectar a la base de datos mysql
, primero hay que acceder a la shell del contenedor MySQL:
docker exec -it mysql-db bash
Una vez conectado a la shell del contenedor, sólo tienes que ejecutar el comando mysql
para conectar a la base de datos utilizando el nombre del servicio: db
mysql -h db -u root -p
Te pedirá que introduzcas la contraseña configurada (lo que pusiste como valor para MYSQL_ROOT_PASSWORD
): mysql
Te aparecerá un mensaje de bienvenida indicando que te has conectado correctamente a la base de datos.
¿Cómo configurar un contenedor con MySQL y Adminer?
Para configurar un contenedor de Docker con un servicio de base de datos MySQL y un servicio Adminer, hay que crear un archivo de configuración yml
de Docker Compose como este:
# Use root/mysql as user/password credentials
version: '3.8'
services:
db:
image: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: mysql
adminer:
image: adminer
restart: always
ports:
- 8080:8080
Archivo Docker Compose: mysql-adminer-stack.yml
Para arrancar el contenedor, basta con ejecutar este comando:
docker-compose -f mysql-adminer-stack.yml up -d
Una vez haya arrancado el el contenedor, se puede acceder a la base de datos a través de la url de adminer
: http://localhost:8080
Para acceder, utilice las credenciales configuradas:
- Usuario / User:
root
- Contraseña / Password:
mysql
Y accederá a una página como esta:
¿Cómo configurar un contenedor con MySQL y acceso externo?
Para acceder a una base de datos MySQL desde fuera del contenedor, hay que habilitar las conexiones al puerto 3306 desde fuera del contenedor. Para ello, hay que crear un archivo de configuración yml
de Docker Compose como este:
# Use root/mysql as user/password credentials
version: '3.8'
services:
db:
image: mysql
command:
--default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: mysql
ports:
- "33306:3306"
Archivo Docker Compose: mysql-ports-stack.yml
Según esto, se hace un mapeo entre el puerto 33306 del sistema y el puerto 3306 del contenedor, que es el puerto de conexión por defecto de MySQL.
Para arrancar el contenedor, basta con ejecutar este comando:
docker-compose -f mysql-ports-stack.yml up -d
De esta manera ya se podrá acceder a la base de datos a través del puerto 33306
.
¿Cómo conectar a un contenedor con una base de datos MySQL desde MySQL Workbench?
Una vez se configura la base de datos para poder acceder directamente desde fuera del contenedor a través del puerto expuesto, se puede utilizar una herramienta como MySQL Workbench para conectarse a la base de datos.
- Servidor / Hostname:
127.0.0.1
- Puerto / Port:
33306
- Usuario / Username:
root
- Contraseña / Password:
mysql
Si haces click en el botón «Test Connection«, se te mostrará un mensaje como este: