Del Contenedor a la Base de Datos: MySQL Docker + Workbench

Vamos a creae una base de datos naciendo en un contenedor, y desde fuera un cliente elegante (Workbench) hablando con ella a través del vacío digital. Eso es red, puertos y aislamiento en acción.

  1. Crear contenedor MySQL.
  2. Publicar puerto al host.
  3. Conectarse desde MySQL Workbench.
  4. Ver que el contenedor es “otro sistema”, pero accesible.

Arquitectura:

Workbench (Host)  →  localhost:3306  →  Contenedor MySQL

Paso 1 — Crear contenedor MySQL

En terminal:

docker run -d \
  --name mysql-demo \
  -e MYSQL_ROOT_PASSWORD=1234 \
  -e MYSQL_DATABASE=demo \
  -p 3306:3306 \
  mysql:8

Qué significa cada parte (esto es lo que debes explicar)

  • -d → modo daemon (segundo plano)
  • --name mysql-demo → nombre del contenedor
  • MYSQL_ROOT_PASSWORD → password del root (obligatorio)
  • MYSQL_DATABASE → crea BD inicial
  • -p 3306:3306 → publica puerto MySQL al host
  • mysql:8 → imagen oficial

Paso 2 — Verificar que el contenedor está vivo

docker ps

Debe aparecer algo como:

mysql-demo   mysql:8   Up ...   0.0.0.0:3306->3306/tcp

Si no arranca:

docker logs mysql-demo

MySQL tarda unos segundos en inicializar. Paciencia científica.


Paso 3 — Conectar desde MySQL Workbench

En Workbench → New Connection

Parámetros:

  • Host: 127.0.0.1
  • Port: 3306
  • User: root
  • Password: 1234

Test Connection → Connect.

Si todo va bien, verás la BD demo.


Paso 4 — Prueba real

En Workbench ejecuta:

CREATE TABLE alumnos (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nombre VARCHAR(50)
);

INSERT INTO alumnos (nombre) VALUES ('Neo'), ('Trinity');

SELECT * FROM alumnos;

Luego demuestra algo mágico:

Entra al contenedor

docker exec -it mysql-demo mysql -uroot-p1234

Dentro:

USE demo;
SELECT * FROM alumnos;

Los datos están ahí → Workbench y contenedor hablan con la misma base.

Eso hace que los alumnos comprendan el concepto de servicio expuesto por red.

Problemas típicos (para que no te sabotee el universo)

Puerto ocupado

Si tienes MySQL local:

lsof -i :3306

Cambia puerto:

-p3307:3306

Y en Workbench → puerto 3307.


No conecta

Comprobar:

docker ps
docker logs mysql-demo

Esperar inicialización (MySQL tarda).


Workbench no conecta pero CLI sí

A veces el plugin de auth:

docker exec -it mysql-demo mysql -uroot-p1234

En SQL

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '1234';
FLUSH PRIVILEGES;