Esta entrada surge de una consulta sobre «Todos es Linux en Docker»? y no, claro que no. Docker funciona en multiples entornos por eso mismo es que en la entrada anterior vimos que hasta podriamos tener una maquina con windows sin problemas y sobre ella podriamos montar un Microsoft SQL Server adaptando los puertos del compose etc etc.
Si aun no viste esas entradas te las recomiendo:
Ahora continuamos con Microsoft SQL Server sobre #docker.
Para descargar la imagen recordamos que tenemos que hacer un pull o podriamos descargarla directamente al ejecutar el docker-compose. Lo vamos a hacer de este modo:
docker pull mcr.microsoft.com/mssql/server:2022-latest
Ya con la imagen (que tarda en bajar por que son unos 500mb aprox vamos a trabajar con un docker-compose.yml como es de nuestra costumbre. Primero creamos una carpeta por ejemplo msql y luego adentro el archivo docker-compose.yml
mkdir msql
cd msql
nano docker-compose.yml
Adentro copien y peguen este codigo:
services:
mssql-server:
image: mcr.microsoft.com/mssql/server:2022-latest
container_name: mssql-server-2022
hostname: mssql-server
restart: unless-stopped
# Puertos expuestos
ports:
- "1433:1433" # Puerto principal para conexiones externas
- "1434:1434" # Puerto para SQL Browser (opcional)
# Variables de entorno requeridas
environment:
- ACCEPT_EULA=Y # Acepta términos y condiciones
- MSSQL_SA_PASSWORD=pOnemeUnaSeguraZETA! # Contraseña del usuario SA
- MSSQL_PID=Express # Edición (Express/Developer/Standard/Enterprise)
- MSSQL_TCP_PORT=1433 # Puerto TCP
- MSSQL_AGENT_ENABLED=true # Habilita SQL Server Agent
# Volúmenes para persistencia de datos
volumes:
- ./mssql_data:/var/opt/mssql/data # Archivos de base de datos
- ./mssql_log:/var/opt/mssql/log # Archivos de log
- ./mssql_secrets:/var/opt/mssql/secrets # Archivos de seguridad
- ./mssql_backup:/var/opt/mssql/backup # Directorio para backups
- ./init-scripts:/docker-entrypoint-initdb.d # Scripts de inicialización (opcional)
# Configuración de salud del contenedor
healthcheck:
test: ["CMD-SHELL", "/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'pOnemeUnaSeguraZETA!' -Q 'SELECT 1'"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
Recordemos que los volumenes generan PERSISTENCIA, sin ellos todo funcionaria igual pero al apagar el contenedor no se guardarian nuestras bases ni configuraciones. Otra cosa importante es que este tipo de volumenes que estamos utilizando traen sus beneficios para los que recien arrancan por la comodida de los archivos dentro de la misma carpeta en la que estamos trabajando, pero no es lo mejor. Ya cuando se animen a más, la alternativa esta en:
#reemplazamos los volumenes existentes
volumes:
- mssql_data:/var/opt/mssql/data
- mssql_log:/var/opt/mssql/log
- mssql_secrets:/var/opt/mssql/secrets
- mssql_backup:/var/opt/mssql/backup
- ./init-scripts:/docker-entrypoint-initdb.d # Estos son scripts de inicializacion no hace falta que sea un volumen
# Agregar al final del archivo la declaración de volumenes:
volumes:
mssql_data:
mssql_log:
mssql_secrets:
mssql_backup:
Bueno, continuamos ya con nuestro docker-compose.yml y ahora vamos a hacer lo siguiente:
docker-compose up -d
docker-compose down
sudo chown -R 10001:0 mssql_data mssql_log mssql_secrets mssql_backup
docker-compose up -d
El primer docker-compose up -d va a levantar el contenedor, pero cuando termine los más probable es que no de un error pero quede reiniciandose todo el tiempo y no nos permita entrar con un cliente de base de datos. El segundo comando detiene todo, pero como vamos a ver en la carpeta los volumenes fueron creados. El tercer comando le da los permisos a todos los volumenes creados y por ultimo volvemos a levantar.
Para la demostración yo lo hice en mi maquina con ubuntu 24.04 y mi administrador de bases de datos yo utilizo https://dbeaver.io/ ya que es una bestia! me deja administrar microsoft sql, mysql, mariadb, oracle…. NO HAY CON QUE DARLE!

Podemos probar la conexión:


COmo pueden ver con el administrador de bases de datos cree dos bases (baseLUIS y mibase) y si en una terminal vamos hacia el volumen donde estan las bases de datos que segun nuestro docker-compose.yml se llama mssql_data veremos los archivos que «son» nuestras bases creadas y que tenemos dando vuelta en el servidor.

Ojala les sirva la entrada amigos y si les gusta compartan en sus redes para llegar a muchos más!!!
Si requiren más documentación: https://learn.microsoft.com/es-es/sql/linux/quickstart-install-connect-docker?view=sql-server-ver16&pivots=cs1-bash&tabs=cli
Gracias por pasar!
