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.

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:

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 de mysql 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. Utiliza localhost o el nombre del servicio de la base de datos
  • <username> es el usuario de la base de datos. Utiliza el usuario root

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.

Bash shell connection to localhost MySQL Docker container

¿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.

Bash shell connection to MySQL service into Docker container

¿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

Docker MySQL Adminer Login

Para acceder, utilice las credenciales configuradas:

  • Usuario / User: root
  • Contraseña / Password: mysql

Y accederá a una página como esta:

Docker MySQL Adminer select database

¿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.

Configuración MySQL Workbench para acceder a un contenedor Docker de MySQL
  • 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:

Mensaje de conexión exitosa desde MySQL Workbench al servicio de MySQL del contenedor de Docker

Comentarios
Este sitio esta protegido por reCAPTCHA y laPolítica de privacidady losTérminos del servicio de Googlese aplican.

El periodo de verificación de reCAPTCHA ha caducado. Por favor, recarga la página.