Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/interezante456-pixel/Miercoles-Proyecto/llms.txt

Use this file to discover all available pages before exploring further.

El repositorio incluye un archivo docker-compose.yml listo para usar que levanta MySQL 8 y phpMyAdmin con un solo comando. Al iniciar por primera vez, Docker inyecta automáticamente los scripts database/schema.sql y database/data.sql, creando todas las tablas y cargando los datos iniciales (roles, usuarios de prueba, categorías y productos) sin ninguna intervención manual. Esta es la forma recomendada de preparar la base de datos en entornos de desarrollo.

Archivo docker-compose.yml

El siguiente es el contenido completo del archivo de orquestación tal como está en el repositorio:
version: '3.8'

services:
  mysql:
    image: mysql:8.0
    container_name: tienda-mysql
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: tienda123
      MYSQL_DATABASE: tienda_db
      MYSQL_USER: tienda_user
      MYSQL_PASSWORD: tienda123
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
      - ./database/schema.sql:/docker-entrypoint-initdb.d/01-schema.sql
      - ./database/data.sql:/docker-entrypoint-initdb.d/02-data.sql
    command: >
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_unicode_ci
      --default-authentication-plugin=mysql_native_password
    networks:
      - tienda-network
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-ptienda123"]
      interval: 10s
      timeout: 5s
      retries: 5

  phpmyadmin:
    image: phpmyadmin:latest
    container_name: tienda-phpmyadmin
    restart: unless-stopped
    environment:
      PMA_HOST: mysql
      PMA_PORT: 3306
      PMA_USER: root
      PMA_PASSWORD: tienda123
    ports:
      - "8081:80"
    depends_on:
      mysql:
        condition: service_healthy
    networks:
      - tienda-network

volumes:
  mysql_data:
    driver: local

networks:
  tienda-network:
    driver: bridge

¿Qué levanta el Compose?

tienda-mysql

Contenedor MySQL 8.0 accesible en localhost:3306. Crea la base de datos tienda_db con el usuario tienda_user / tienda123 y el usuario root root / tienda123. El volumen mysql_data persiste los datos entre reinicios.

tienda-phpmyadmin

Panel web de administración phpMyAdmin expuesto en el puerto 8081. Arranca solo después de que el healthcheck de MySQL sea exitoso gracias a depends_on: condition: service_healthy.

Inicialización automática de datos

Al crear el contenedor por primera vez, MySQL ejecuta los scripts montados en /docker-entrypoint-initdb.d/ en orden numérico:
OrdenArchivoContenido
01database/schema.sqlCrea tablas, claves primarias, foráneas e índices
02database/data.sqlInserta roles, usuarios de prueba, categorías y productos iniciales
Los scripts de inicialización solo se ejecutan una vez, cuando el volumen mysql_data está vacío (primera ejecución). Si el volumen ya existe, Docker omite los scripts aunque hayas modificado los archivos SQL.

Cómo iniciar los servicios

1

Posiciónate en la raíz del proyecto

Abre una terminal y navega al directorio raíz del repositorio, donde se encuentra el archivo docker-compose.yml.
cd Miercoles-Proyecto
2

Levanta los contenedores en segundo plano

Ejecuta el siguiente comando para iniciar MySQL y phpMyAdmin de forma desacoplada:
docker-compose up -d
Docker descargará las imágenes mysql:8.0 y phpmyadmin:latest si no las tienes localmente, creará la red tienda-network y el volumen mysql_data, y arrancará ambos contenedores.
3

Espera a que el healthcheck de MySQL pase

El contenedor tienda-phpmyadmin no arrancará hasta que MySQL responda correctamente al healthcheck (mysqladmin ping). Puedes verificar el estado en tiempo real con:
docker-compose ps
Espera hasta que el campo Status de tienda-mysql muestre healthy. El healthcheck se evalúa cada 10 segundos con un máximo de 5 reintentos (timeout de 5s cada uno).
4

Accede a phpMyAdmin

Una vez que ambos contenedores estén en ejecución, abre tu navegador y visita:
http://localhost:8081
Inicia sesión con las credenciales:
  • Usuario: root
  • Contraseña: tienda123
5

Verifica la base de datos

En el panel izquierdo de phpMyAdmin confirma que la base de datos tienda_db existe y que contiene todas las tablas creadas por schema.sql. Si las tablas están vacías o faltan, revisa los logs de inicialización:
docker logs tienda-mysql

Cadena de conexión del backend

El backend Spring Boot se conecta a MySQL usando la siguiente JDBC URL configurada en application.properties:
jdbc:mysql://localhost:3306/tienda_db?useSSL=false&serverTimezone=America/Lima&allowPublicKeyRetrieval=true&characterEncoding=UTF-8
ParámetroValorDescripción
hostlocalhostMySQL expuesto directamente al host en el puerto 3306
databasetienda_dbBase de datos creada por el Compose
useSSLfalseSin cifrado TLS (entorno local)
serverTimezoneAmerica/LimaZona horaria para conversión de fechas
allowPublicKeyRetrievaltrueNecesario para mysql_native_password con connectors recientes
characterEncodingUTF-8Codificación de caracteres en la conexión JDBC
El servidor MySQL arranca con --character-set-server=utf8mb4 y --collation-server=utf8mb4_unicode_ci, lo que garantiza soporte completo para caracteres especiales, emojis y texto en español (tildes, ñ) tanto en el almacenamiento como en la conexión.

Imagen de producción del backend (backend/Dockerfile)

El archivo docker-compose.yml levanta únicamente la base de datos y phpMyAdmin. El backend Spring Boot dispone de su propio backend/Dockerfile multi-etapa para construir una imagen de producción independiente:
# Etapa de compilación
FROM eclipse-temurin:21-jdk-jammy AS build
WORKDIR /app
COPY . .
RUN chmod +x gradlew
RUN ./gradlew clean build -x test

# Etapa de ejecución
FROM eclipse-temurin:21-jre-jammy
WORKDIR /app
COPY --from=build /app/build/libs/*-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
Para construir y ejecutar el contenedor del backend de forma independiente (por ejemplo, en un pipeline CI/CD o entorno de staging):
cd backend
docker build -t tienda-backend:latest .
docker run -p 8080:8080 \
  -e SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306/tienda_db \
  -e SPRING_DATASOURCE_USERNAME=tienda_user \
  -e SPRING_DATASOURCE_PASSWORD=tienda123 \
  tienda-backend:latest
Este Dockerfile usa Gradle internamente para compilar el JAR. La imagen de ejecución se basa en eclipse-temurin:21-jre-jammy y expone el puerto 8080. El docker-compose.yml principal no incluye el servicio del backend — es exclusivamente para la base de datos y phpMyAdmin en desarrollo local.

Gestión y limpieza

Para detener los contenedores sin borrar los datos:
docker-compose stop
Para detener y eliminar los contenedores pero conservar el volumen de datos:
docker-compose down
El comando docker-compose down -v elimina el volumen mysql_data junto con todos los datos almacenados en la base de datos. Úsalo solo si quieres resetear completamente el entorno y recargar los datos desde los scripts SQL iniciales. Esta operación es irreversible.
# ⚠️ Borra todos los datos de la base de datos
docker-compose down -v

Build docs developers (and LLMs) love