Volver al blog

Cómo instalar SQL Server en Docker

Como quizás ya sepas, SQL Server se puede instalar en distribuciones de Linux, una de ellas es un Contenedor de Docker, para seguir este pequeño tutorial (si estás usando un sistema Windows) deberías tener instalado WSL2 (Windows Subsystem for Linux 2), acá tenés algo para empezar.

Empecemos Instalando Docker

Instalando Docker

Andá a este LINK. Descargá el Docker que prefieras

Estoy usando una Mac, ¿qué debería hacer ahora?

Antes que nada, descargá Docker.dmg, abrí una Terminal en la ubicación del Docker.dmg (si tu Mac tiene un chip intel hacé clic ACÁ y si tiene un chip apple hacé clic ACÁ) y escribí los siguientes comandos:

 # Con este comando adjuntás el archivo de Docker a la Mac 
 sudo hdiutil attach Docker.dmg
 # Ahora deberías instalarlo
 sudo /Volumes/Docker/Docker.app/Contents/MacOS/install
 # Por último, desmontá el volumen
 sudo hdiutil detach /Volumes/Docker

Y eso es todo, fácil ¿no? Ahora deberías tener docker instalado en tu Mac.

Usando Windows, esto es lo que deberías hacer

Podés empezar descargando Docker Desktop Install.exe y ejecutarlo, si ya instalaste WSL2 como te dije antes, el proceso de instalación es muy directo, no deberías tener ningún problema acá.

¿Y qué pasa con Linux? ¿Qué debería hacer ahora?

Bueno, esto va a depender de la distro de Linux, Docker soporta instalaciones en Ubuntu, Debian, Fedora y Arch (actualmente experimental), y viene con un paquete para cada una de ellas.

modprobe kvm
#Si tenés un chip intel
modprobe kvm_intel
#Si no, si tenés un chip AMD  
modprobe kvm_amd    
sudo usermod -aG kvm $USER #Agregá tu USER al grupo kvm para acceder al dispositivo kvm

Si todavía tenés problemas corriendo Docker después de esto, deberías leer la Documentación Oficial de Docker sobre instalación en Linux para hacer algo de troubleshooting.

Ya hiciste todo esto, tenés Docker corriendo, ¡ahora instalemos Microsoft SQL Server en un Contenedor de Docker!

Por suerte para nosotros, Microsoft ya se encargó de todo y armó distintas imágenes para SQL Server.

En Windows abrí un Powershell y corré el siguiente código:

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

Si no, en Linux o Mac, más o menos lo mismo pero con sudo adelante:

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

En caso de que quieras usar otras versiones de SQL Server corré una de las siguientes en su lugar:

docker pull mcr.microsoft.com/mssql/server:2019-latest # SQL Server 2019
docker pull mcr.microsoft.com/mssql/server:2017-latest # SQL Server 2017

¡Listo! Ya tenemos una Imagen de SQL Server instalándose en nuestro Contenedor de Docker, si vas a tus imágenes de docker la deberías ver.

Configurando nuestra instalación de SQL Server

Ahora que tenemos nuestra instalación de SQL Server, Microsoft nos pide correrla aceptando el EULA primero, así que deberíamos correr este comando:

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=[poné acá tu nueva contraseña]" -p 1433:1433 -d mcr.microsoft.com/mssql/server:2022-latest # Tené en cuenta que esto es solo para server:2022-latest, en caso de que instales otra versión de SQL Server, deberías cambiar la última parte de esta línea

Si todo sale bien te va a dar una línea de hash y en tus Imágenes de docker vas a ver una etiqueta “IN USE” en tu imagen de MCR.

Conectándonos a nuestro contenedor de Docker

Ya tenemos nuestro Contenedor de Docker con SQL Server levantado y funcionando, una forma de conectarse para correr comandos SQL es a través de sqlcmd dentro del contenedor, para conectarte usá los siguientes comandos:

PS> docker ps -a # Vamos a usar este comando para averiguar el nombre de nuestro contenedor
CONTAINER ID   IMAGE                                        COMMAND                  CREATED          STATUS                        PORTS                                         NAMES
463f5132aa17   mcr.microsoft.com/mssql/server:2022-latest   "/opt/mssql/bin/perm…"   12 minutes ago   Up 12 minutes                 0.0.0.0:1433->1433/tcp                        vigorous_rosalind
1c16dedd96f6   recordviewer_nginx                           "/docker-entrypoint.…"   2 months ago     Exited (255) 44 minutes ago   0.0.0.0:8080->80/tcp, 0.0.0.0:8443->443/tcp   recordviewer_nginx_1
69740c6d6ef1   recordviewer_web                             "bash -c 'node app.j…"   2 months ago     Exited (255) 44 minutes ago                                                 recordviewer_web_1

PS> docker exec -it vigorous_rosalind "bash" # En mi caso el Contenedor se llamaba vigorous_rosalind así que corramos bash en él

# si todo sale bien, ahora estás dentro del contenedor de SQL

mssql@463f5132aa17:/$  /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "[PONÉ ACÁ TU CONTRASEÑA]"
1> CREATE DAtABASE TestDB;
2> SELECT Name from sys.databases;
3> GO
Name
--------------------------------------------------------------------------------------------------------------------------------
master
tempdb
model
msdb
TestDB
1> QUIT
mssql@463f5132aa17:/$ exit

Perfecto, pudimos correr un comando dentro de nuestro SQL Server, todo está funcionando bien.

Conectate usando SQL Server Management Studio (SSMS)

Si estás en Windows y seguiste nuestro tutorial acá ya tenés SSMS instalado en tu PC, en caso de que estés en Linux o Mac considerá usar Azure Data Studio que viene con herramientas para administrar un servidor SQL corriendo en Linux

En SSMS, deberíamos ir a File > Connect Object Explorer…

En Authentication > seleccioná SQL Server Authentication

En Server Name > [Dirección IP (si estás usando la misma máquina, sería 127.0.0.1], [PUERTO (si seguís este tutorial paso a paso, sería 1433, lo podés cambiar cuando corras tu Contenedor de Docker)] (en mi caso: 127.0.0.1,1433)

Login: User (SA) por defecto, para agregar nuevos usuarios vamos a hacer otro tutorial, por ahora empecemos con esto.

Password: la contraseña que definiste cuando creaste tu Contenedor de Docker

Conclusión

Instalamos docker, clonamos una Imagen de un SQL Server, la Dockerizamos y nos conectamos a ella. Podrías usar esto para armar un entorno de staging o para armar un entorno de pruebas.

¡Ahora podés Dockerizar tus SQL Servers! ¡Espero que este tutorial te haya sido útil!

Read in English