MS SQL Server
3. MS SQL Server
3.1 Crear el archivo docker-compose.yml
cat > ~/ia-lab/services/motores-bd/mssql/docker-compose.yml << 'EOF'
services:
mssql:
image: mcr.microsoft.com/mssql/server:2022-latest
container_name: mssql-server
restart: unless-stopped
user: root
env_file:
- .env
ports:
- "0.0.0.0:1433:1433"
volumes:
- ../../../data/mssql:/var/opt/mssql
- /mnt/d/academia/bd:/backups
networks:
- ia-lab-network
healthcheck:
test: ["CMD-SHELL", "/opt/mssql-tools18/bin/sqlcmd -S localhost -U SA -P $$MSSQL_SA_PASSWORD -C -Q 'SELECT 1' || exit 1"]
interval: 10s
timeout: 5s
retries: 10
start_period: 40s
networks:
ia-lab-network:
external: true
EOF
Habilitar UFW y permitir el puerto 1433 (SQL Server) en el host:
3.2 Crear el archivo .env
cat > ~/ia-lab/services/motores-bd/mssql/.env << 'EOF'
TZ=America/Bogota
ACCEPT_EULA=Y
MSSQL_SA_PASSWORD=MiNiCo57**
MSSQL_PID=Developer
EOF
MSSQL_PID no es un usuario. Es la edición de SQL Server (Developer, Express, Evaluation, etc.).
El usuario administrador que crea el contenedor siempre se llama SA (System Administrator), igual que MySQL usa root y PostgreSQL usa postgres.
Por eso en el .env van juntas dos cosas distintas:
| Variable | Qué es | Valor |
|---|---|---|
MSSQL_PID |
Edición / licencia del motor | Developer |
MSSQL_SA_PASSWORD |
Contraseña del usuario SA |
MiNiCo57** |
Al conectar (sqlcmd, DBeaver) el usuario es SA, no Developer. Si pones MSSQL_PID=sa, SQL Server no reconoce esa edición y el contenedor falla.
Editar la clave del .env en clase:
Cambiar:
SQL Server exige una clave compleja para
SA(mayuscula, minuscula, numero y simbolo). Si el contenedor no arranca, dejaMiNiCo57**o usaAbc123456**.
3.3 Crear README.md
cat > ~/ia-lab/services/motores-bd/mssql/README.md << 'EOF'
# SQL Server 2022 - Motor de Base de Datos
> **Acceso remoto habilitado.** Puerto expuesto en `0.0.0.0:1433`.
> **Edición (MSSQL_PID):** `Developer`
> **Usuario por defecto:** `SA`
> **Password:** `MiNiCo57**`
---
## Conectar desde WSL (local)
```bash
sudo docker exec -it mssql-server /opt/mssql-tools18/bin/sqlcmd -S localhost -U SA -P 'MiNiCo57**' -C
3.4 Levantar SQL Server
Verificar que está corriendo:
3.5 Instalar mssql-tools en WSL
Estos pasos instalan mssql-tools18 y unixODBC en Ubuntu 24.04 para administrar y conectarse a SQL Server ejecutado mediante Docker.
3.5.1 Actualizar e instalar los paquetes requeridos
3.5.2 Eliminar repositorios antiguos o duplicados de Microsoft
Esto evita conflictos con configuraciones anteriores de Ubuntu 22.04 (jammy) y con el método obsoleto apt-key.
sudo rm -f /etc/apt/sources.list.d/mssql-release.list
sudo rm -f /etc/apt/sources.list.d/microsoft-prod.list
3.5.3 Descargar el repositorio oficial de Microsoft para Ubuntu 24.04
3.5.4 Instalar el repositorio oficial de Microsoft
3.5.5 Actualizar los repositorios
3.5.6 Verificar el repositorio de Microsoft
3.5.7 Instalar Microsoft SQL Server Tools 18 y unixODBC
3.5.8 Agregar mssql-tools18 al PATH
3.5.9 Recargar la configuración de Bash
3.5.10 Verificar que sqlcmd esté instalado
El resultado esperado es:
3.6 Conectar localmente a SQL Server
sudo docker exec -it mssql-server /opt/mssql-tools18/bin/sqlcmd -S localhost -U SA -P 'MiNiCo57**' -C
COMANDOS BASICOS DENTRO DEL MOTOR: ** Solo usarlo cuando se requiera, no hacelo en instalacion **
Crear una base de datos
En clase (distinta a la base por defecto del contenedor):
Listar todas las bases de datos
Eliminar una base de datos
No puedes eliminar la base que estás usando. Cambia a master y luego:
Entrar a una base de datos
En clase:
Listar las tablas
Listar los campos de una tabla
SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'nombre_tabla';
GO
Salir del motor
3.7 Crear un usuario PROPIO con ACCESO REMOTO
Conectate primero como SA, luego ejecuta.
Parte explicativa. Reemplaza usuario, password y nombre_bd por tus valores:
CREATE DATABASE nombre_bd;
GO
CREATE LOGIN usuario WITH PASSWORD = 'password';
GO
USE nombre_bd;
GO
CREATE USER usuario FOR LOGIN usuario;
GO
ALTER ROLE db_owner ADD MEMBER usuario;
GO
Aplicado en clase. Copiar y pegar (Usuario: admin / Contraseña: 123456):
CREATE LOGIN admin WITH PASSWORD = '123456', CHECK_POLICY = OFF;
GO
ALTER SERVER ROLE sysadmin ADD MEMBER admin;
GO
ALTER LOGIN admin ENABLE;
GO
CHECK_POLICY = OFFdesactiva la política de complejidad de SQL Server solo para este login. Por eso123456sí sirve para crearadmin. Sin esa opción, SQL Server rechaza la clave. No aplica aSA: la clave deMSSQL_SA_PASSWORDen el.envsigue exigiendo mayúscula, minúscula, número y símbolo.
3.8 Conectar remotamente desde cualquier equipo
** Hacerlo desde DBEAVER **

Reemplaza los valores correspondientes en Host
En el terminal de wsl-ubuntu
Luego, buscar la IP a la linea de Eth0
y esa direccion colocarla en Host
- Host:
IP_SERVIDOR - Port:
1433 - User:
SA - Password:
MiNiCo57** - Database:
tecnogua - Authentication:
SQL Server(no Windows) - Encrypt / Trust server certificate: activado (
true)
MSSQL_PID=Developeres la edición del motor. El usuario de conexión sigue siendoSA, noDeveloper.
3.9 Backup de una base de datos
sudo docker exec mssql-server /opt/mssql-tools18/bin/sqlcmd -S localhost -U SA -P 'MiNiCo57**' -C -Q "BACKUP DATABASE [tecnogua] TO DISK = N'/backups/backup_tecnogua.bak' WITH INIT"
3.9 Variables clave del .env
| Variable | Descripcion |
|---|---|
TZ |
Zona horaria |
ACCEPT_EULA |
Acepta la licencia de SQL Server (Y) |
MSSQL_SA_PASSWORD |
Password del usuario SA (MiNiCo57**) |
MSSQL_PID |
Edicion de SQL Server (Developer) |