Tips, Soluciones y Novedades en Tecnología

11/06/2023

Desplegar SQL Server 2017 en contenedores Docker


En versiones anteriores a SQL Server 2017, normalmente se solía correr  SQL Server en servidores dedicados o en maquinas virtuales, pero ante la creciente incremento de la contenerización, eso se convierte en una necesidad empresarial, entonces Microsoft entendió y preparó para poder correr Instancias SQL Server en contenedores docker, para ello hay varios formas de desplegar, en este Post veremos como desplegar de forma fácil.



Descargar la imagen SQL Server 2017

docker pull mcr.microsoft.com/mssql/server:2017-latest

Una vez descargado la imagen, necesitamos completar algunos parámetros para desplegar.


docker run -d -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=SQL3032$" -p 1433:1433 -d mcr.microsoft.com/mssql/server:2017-latest

Las variables ACCEPT_EULA, es para aceptar el término de la licencia, y MSSQL_SA_PASSWORD es para asignar la contraseña al usuario por defecto "sa", con ello ya podremos tener SQL Server 2017 en ejecución.

Ejecutamos "docker ps" para ver el contenedor en ejecución.



Ahora abriremos SQL Management Studio para conectarnos a la base de datos en ejecución.





Como se puede ver, se puede crear las bases de datos que consideremos necesarias, pero recordar que en cuanto eliminemos el contenedor también se eliminarán las bases de datos creados, por lo que ahora configuraremos un volumen para que SQL Server almacene los datos fuera del contenedor y que cuando se elimine el contenedor no se pierdan los datos previamente configurados.

Para mantener los datos en un directorio externo al contenedor, debemos configurar de la siguiente forma:

Ejemplo en Linux

docker run -d \
-e "ACCEPT_EULA=Y" \
-e "MSSQL_SA_PASSWORD=SQL3032$" \
-e "MSSQL_PID=Express" \
-p 1433:1433 \
-v /opt/sql_server_2017/data:/var/opt/mssql/data \
-v /opt/sql_server_2017/log:/var/opt/mssql/log \
-v /opt/sql_server_2017/secrets:/var/opt/mssql/secrets \
-d mcr.microsoft.com/mssql/server:2017-latest

Ejemplo en Windows

docker run -d -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=SQL3032$" -e "MSSQL_PID=Express" -p 1433:1433 -v C:\sql_server_2017/data:/var/opt/mssql/data -v C:\sql_server_2017/log:/var/opt/mssql/log -v C:\sql_server_2017/secrets:/var/opt/mssql/secrets -d mcr.microsoft.com/mssql/server:2017-latest


Las variables que le pasamos son:
ACCEPT_EULA: Aceptación de término de licencia
MSSQL_SA_PASSWORD: Contraseña del usuario sa
MSSQL_PID: Versión de SQL Server, si no ponemos este versión por defecto nos levanta la versión Developer. estas son valores que se puede configurar:

Developer: Esto ejecutará el contenedor usando Developer Edition (este es el valor predeterminado si no se proporciona una variable de entorno MSSQL_PID)
Express: Esto ejecutará el contenedor usando Express Edition
Estándar: Esto ejecutará el contenedor usando la Edición Estándar
Enterprise: Esto ejecutará el contenedor usando Enterprise Edition
EnterpriseCore: Esto ejecutará el contenedor utilizando Enterprise Edition Core

Una vez ejecutado el comando docker, si hacemos "docker ps" veremos los siguiente:



Como la ejecución lo estamos realizando en windows, vemos el contenido de la carpeta asignado como volumen:



Creamos 3 bases de datos:



Ahora vemos si se encuentra en la carpeta "data":


Como se puede ver, los datos y configuraciones de SQL Server, lo guarda en una carpeta externa al contenedor que al momento de iniciar el contenedor se les pasó como parámetro.

Esto es recomendable usar en entornos de producción, donde si por alguna razón tenemos alguna falla en el contenedor, los datos no se pierdan y podremos iniciar otra instancia en un nuevo contenedor y podremos ver los datos nuevamente.


Adicionalmente si queremos habilitar el Agente para los Backups programados, debemos hacerlo mediante un archivo Dockerfile, para ello, creamos un archivo Dockerfile con el siguiente contenido:

FROM mcr.microsoft.com/mssql/server:2017-latest
USER root
RUN /opt/mssql/bin/mssql-conf set sqlagent.enabled true

Ejecutamos el comando:

docker build -t mssql-server:2017-latest .



Ahora ejecutamos, la versión Developer, por que en la versión Express, no se puede habilitar la característica del agente de SQL Server.

Ejecutamos el siguiente comando:

docker run -d -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=SQL3032$" -e "MSSQL_PID=Developer" -p 1433:1433 -v C:\sql_server_2017/data:/var/opt/mssql/data -v C:\sql_server_2017/log:/var/opt/mssql/log -v C:\sql_server_2017/secrets:/var/opt/mssql/secrets -d mssql-server:2017-latest


Y nuevamente nos conectamos:


Como se puede ver, se tiene habilitado el SQL Server Agent.

Es relativamente práctico trabajar con contenedores, esto puede facilitar al desarrollador a que pueda crear su base de datos sin necesidad de requerir un ambiente extra y para los administradores, tener múltiples instancias en múltiples versiones en un mismo servidor.

Saludos.



0 comments:

Publicar un comentario