Microsoft SQL Server sobre Docker

mssqlserver sobre docker

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!

conexion a la base de datos microsoft sql server
Ponemos autenticación de SQL Server y usamos SA y la contraseña que pusimos en el docker-compose.yml

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!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *