- Desplegar MySQL y phpMyAdmin con docker compose
- Usar volumen para persistencia
- Verificar conexión y datos
- Practicar variables de entorno, puertos y reinicios
1) Estructura del proyecto
Crea una carpeta de práctica:
mkdir mysql-pma-compose
cd mysql-pma-compose
2) Crear el archivo docker-compose.yml
Crea el fichero:
# Define los servicios (contenedores) que vamos a ejecutar
services:
# ----- SERVICIO MYSQL -----
mysql:
image: mysql:8.0 # Imagen oficial que se descargará de Docker Hub
container_name: mysql1 # Nombre fijo del contenedor (opcional, pero útil)
restart: unless-stopped # Reinicia el contenedor automáticamente salvo que lo pares tú
# Variables de entorno que usa la imagen de MySQL en su primer arranque
environment:
MYSQL_ROOT_PASSWORD: "RootPass_123!" # Contraseña del usuario root
MYSQL_DATABASE: "academia" # Base de datos que se crea automáticamente
MYSQL_USER: "alumno" # Usuario adicional que se creará
MYSQL_PASSWORD: "AlumnoPass_123!" # Contraseña del usuario alumno
# Volúmenes → permiten persistencia (los datos sobreviven aunque borres el contenedor)
volumes:
- mysql_data:/var/lib/mysql # Guarda los datos reales de MySQL fuera del contenedor
# Conecta el contenedor a una red Docker interna
networks:
- red-bbdd
# ----- SERVICIO PHPMYADMIN -----
phpmyadmin:
image: phpmyadmin:latest # Imagen oficial de phpMyAdmin
container_name: pma1
restart: unless-stopped
# Indica que MySQL debe arrancar antes (solo orden, no espera a que esté listo)
depends_on:
- mysql
# Variables que indican a phpMyAdmin a qué servidor MySQL conectarse
environment:
PMA_HOST: "mysql" # Nombre del servicio MySQL dentro de la red Docker
PMA_PORT: 3306 # Puerto interno de MySQL
# Publica puertos → expone el servicio al exterior
ports:
- "8080:80" # Puerto HOST:PUERTO_CONTENEDOR → http://localhost:8080
# Conecta phpMyAdmin a la misma red que MySQL para que puedan verse
networks:
- red-bbdd
# ----- DEFINICIÓN DE VOLÚMENES -----
volumes:
mysql_data: # Volumen gestionado por Docker (no es carpeta local visible normalmente)
# ----- DEFINICIÓN DE REDES -----
networks:
red-bbdd: # Red interna donde los contenedores se comunican por nombre (DNS interno)
Qué está pasando aquí (muy importante)
services: dos contenedores, uno para MySQL y otro para phpMyAdmin.volumes:mysql_dataguarda la base de datos fuera del contenedor (persistencia).networks: red privada para quephpmyadminpueda acceder amysqlpor nombre.depends_on: arranca primero MySQL (ojo: no garantiza “ready”, solo orden de arranque).
3) Levantar los contenedores
docker compose up -d
Verifica:
docker compose ps
docker compose logs mysql --tail 30
docker compose logs phpmyadmin --tail 30
4) Acceder a phpMyAdmin
Abre en el navegador:
http://localhost:8080
Credenciales:
- Usuario:
root(oalumno) - Password:
RootPass_123!(oAlumnoPass_123!)
Comprueba:
- Existe la BD
academia
5) Crear tabla de prueba (verificación)
Opción A: desde phpMyAdmin (SQL)
Ejecuta:
USE academia;
CREATE TABLE prueba (
id INT PRIMARY KEY AUTO_INCREMENT,
texto VARCHAR(50)
);
INSERT INTO prueba (texto) VALUES ("hola compose");
SELECT * FROM prueba;
Opción B: desde terminal (dentro del contenedor)
docker compose exec mysql mysql -u root -p
Comandos útiles para alumnos
docker compose ps
docker compose logs -f
docker compose exec mysql bash
docker compose exec phpmyadmin bash
docker compose down
docker compose down -v










![[Reto] - Despliegue de servicios con Docker y Docker Compose b2427176-50e6-4af6-ada1-f4903698014f](https://laaventuradeaprender.com/wp-content/uploads/2026/06/b2427176-50e6-4af6-ada1-f4903698014f-150x150.png)




![[Reto] - Dockerizar app JEE (Tomcat 10 + MySQL) 4b9bc3d2-8253-4715-adf6-d5b1eed959d3](https://laaventuradeaprender.com/wp-content/uploads/2026/02/4b9bc3d2-8253-4715-adf6-d5b1eed959d3-150x150.png)