En esta guía vas a levantar SQL Server en Docker y dejarlo listo para usar en ejercicios, pruebas y consultas.
Al final tendrás:
- SQL Server escuchando en
localhost:1433. - Una base
pw0. - Una tabla
sensor. - Registros de ejemplo cargados desde archivo.
Si quieres saltar directo a la descarga, ve a Descargar stack.
Estructura de carpetas
| |
Qué contiene cada archivo:
Dockerfile: crea la imagen que usará Docker Compose para levantar el servicio.docker-compose.yml: define el servicio, puertos, variables y healthcheck.mssql.env: define variables obligatorias para iniciar SQL Server.setup/entrypoint.sh: script principal de arranque del contenedor.setup/configure-db.sh: espera a que SQL Server esté listo y luego ejecuta SQL.scripts/database.sql: crea la basepw0.scripts/table.sql: crea la tablasensory carga datos.sample-data/room-climate.csv: dataset de ejemplo.
Flujo completo de arranque
- Docker Compose usa
docker-compose.ymlpara levantar el servicio. - Durante el arranque, Compose construye la imagen con
Dockerfile. - Al iniciar el contenedor, se ejecuta
entrypoint.sh. entrypoint.shlanzaconfigure-db.shen segundo plano y luego arranca SQL Server.configure-db.shespera a que el motor responda.- Cuando el motor está listo, ejecuta
database.sqly despuéstable.sql. - Resultado final: base y tabla creadas, datos cargados.
Archivo 1: docker-compose.yml (servicio y arranque)
docker-compose.yml:
| |
Lo mínimo importante aquí:
container_name: branding del contenedor (pw0-sql-server).build.context: .: usa elDockerfilede esta carpeta.ports: publica SQL Server enlocalhost:1433.env_file: carga variables desdemssql.env.healthcheck: permite validar que el motor responde.
Archivo 2: Dockerfile (construcción de imagen)
| |
Lectura rápida por líneas (en orden de ejecución):
FROM ...: toma una imagen base que ya trae SQL Server instalado.RUN mkdir -p /usr/config: crea carpeta donde vivirán scripts y datos.WORKDIR /usr/config: fija esa carpeta como directorio de trabajo.COPY . /usr/config: copia todo el contenido del proyecto dentro del contenedor.RUN chmod +x ...: da permisos de ejecución a los scripts.sh.ENTRYPOINT [...]: define qué comando correr al iniciar el contenedor.
Archivo 3: mssql.env (variables de entorno)
| |
Para qué sirve cada variable:
ACCEPT_EULA="Y": acepta la licencia; sin esto SQL Server no inicia.MSSQL_SA_PASSWORD="...": define la clave del usuario administradorsa.MSSQL_PID="Developer": selecciona la edición Developer.
Archivo 4: entrypoint.sh (orquestación de inicio)
| |
Por qué está así:
configure-db.sh &: lo ejecuta en segundo plano para que comience a esperar disponibilidad.sqlservr: arranca el proceso principal del contenedor.- El
&permite que ambos procesos convivan: uno espera y prepara; el otro sirve la base.
Archivo 5: configure-db.sh (espera + ejecución SQL)
| |
Aquí ocurre la parte clave del arranque:
- Espera hasta 60 segundos a que SQL Server responda.
- Ejecuta
database.sqlprimero, porque la base debe existir antes de crear tabla. - Usa
&¶ garantizar orden seguro:table.sqlsolo corre sidatabase.sqlfue exitoso. - Si algo falla en creación de base, evita que la carga de datos se ejecute en un estado inválido.
Archivo 6: database.sql (creación de base)
| |
Con este script:
- Trabaja desde
master, que es la base administrativa. - Verifica existencia de
pw0. - Crea la base solo si no existe, para que el script sea reutilizable.
Archivo 7: table.sql (tabla + carga inicial)
| |
Con este script:
- Selecciona la base
pw0. - Crea
sensorsolo si no existe. - Si no hay filas, carga datos del CSV para dejar un entorno funcional desde el primer arranque.
Iniciar el stack (paso a paso o zip)
Desde la carpeta donde está docker-compose.yml:
| |
Este comando aplica en ambos casos:
- Si seguiste el paso a paso y creaste los archivos manualmente.
- Si descargaste el
.zipy levantaste el proyecto desde ahí.
Cómo cargar tus propios datos
Formatos recomendados en este setup:
CSV: opción más directa conBULK INSERT.TXTdelimitado: también válido ajustando separador.Excel (.xlsx): primero exportar a CSV.
Qué debes cambiar
- Copia tu archivo a
sample-data/(por ejemplomis-datos.csv). - Ajusta la tabla en
scripts/table.sqlpara que columnas y tipos coincidan. - Cambia la ruta del
BULK INSERT:
| |
- Si el delimitador no es coma, ajusta
FIELDTERMINATOR. - Si tu CSV no tiene encabezado, usa
FIRSTROW = 1en lugar deFIRSTROW = 2.
Ejemplo para archivo separado por ;:
| |
Verificación rápida
Paso 1: entrar a sqlcmd
| |
Esto abre el cliente SQL dentro del contenedor para ejecutar consultas manualmente.
Paso 2: validar que la base existe
| |
Qué verifica:
- Que
database.sqlse ejecutó correctamente.
Respuesta esperada (ejemplo):
| |
Paso 3: validar tabla y cantidad de filas
| |
Qué verifica:
- Que
table.sqlcreó la tabla. - Que
BULK INSERTcargó registros.
Respuesta esperada (ejemplo):
| |
Paso 4: revisar muestra de datos
| |
Qué verifica:
- Que las columnas tienen valores coherentes.
- Que el tipo de dato permite ordenar por fecha.
Respuesta esperada (ejemplo):
| |
Detener y eliminar el stack
Cuando termines:
| |
Esto detiene y elimina los contenedores del stack.
Descarga
Si no quieres copiar archivos manualmente, descarga el stack completo (opcional):