00:00 / 00:00

Fecha publicación: Apr 15, 2021

Introducción

Tener que instalarte tu SQL Sever en tu máquina local para desarrollar es un tostón, que si settings para allá, que si versiones, que si en mi máquina no me instala por no se qué motivo...

¿Por qué no ejecutarlo desde un contenedor docker? En este video de Gisela Torres verás como hacerlo.

Docker + SQL Server

En este ejemplo, vamos a hablar de cómo podemos usar Docker y SQL Server para que tus desarrollos en local sean mucho más rápidos.

Para ello vamos a usar Visual Studio Code y lo primero que vamos a hacer es crear este contenedor a través del comando docker run. Vamos a ir añadiendo y explicando poco a poco los parámetros que necesitamos para ejecutar un SQL Server con docker.

docker run

Para referirnos a este contenedor de la manera más sencilla posible, vamos a indicarle un nombre.

docker run --name sqlserver

Lo siguiente que necesitamos es mapear un puerto de la máquina local contra este contenedor, de tal forma que podemos acceder a ese servidor de manera sencilla. Vamos a usar el puerto 1433 que es el puerto por defecto de SQL server.

docker run --name sqlserver -p 1433:1433 

Definimos dos variables de entorno, que nos permite configurar el contenedor. La primera de ella, es para aceptar la licencia del fabricante para poder utilizar este software.

docker run --name sqlserver -p 1433:1433 -e 'ACCEPT_EULA=Y'

Y la segunda es para configurar la contraseña del usuario por defecto SA (System Administrator) en SQL Server.

docker run --name sqlserver -p 1433:1433 -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Lem0nCode!'

El siguiente parámetro que vamos a utilizar, es el parámetro -d, que significa que vamos a hacer un detach de este contenedor una vez que se empiece a ejecutar. ¿Ésto qué significa? Que en vez de que este terminal se quede enganchado a este proceso, va a dejar que este contenedor se ejecute en segundo plano y el terminal se quedará libre para poder utilizar otros comandos.

docker run --name sqlserver -p 1433:1433 -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Lem0nCode!' -d

Por último, vamos a indicar la imagen para poder crear el contendor. En este caso, vamos a utilizar una de las que ofrece Microsoft con diferentes versiones de SQL Server, en concreto, vamos a utilizar la última version.

docker run --name sqlserver -p 1433:1433 -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Lem0nCode!' -d mcr.microsoft.com/mssql/server:2019-latest

Cuando ejecutamos este comando, lo primero que va a ocurrir es que como no tenemos la imagen en la máquina local, Docker Engine va a coger esta imagen de Docker Hub y la va a descargar en local. Este proceso, puede durar unos segundos hasta que se complete dependiendo del ancho de banda desde donde te estés conectando.

Una vez que la imagen se descarga y se genera este nuevo contenedor, a través del comando docker ps, podemos ver que se creó hace 9 segundos y lleva 7 segundos ejecutándose.

docker ps

Lo siguente que vamos a hacer, ahora sí, es engancharnos a este contenedor para crear una base de datos dentro de este servidor, alguna tabla y algunos registros.

Para ello vamos a utilizar el comando docker exec y enganchar este terminal con el contenedor anterior:

docker exec -it sqlserver

Utilizamos el comando sqlcmd para poder crear la base de datos, que se encuentra en la siguiente ruta:

docker exec -it sqlserver /opt/mssql-tools/bin/sqlcmd

Este comando necesita varios parámetros. Primero, indicar a qué servidor se va a conectar, en este caso sería localhost porque estamos utilizando esta herramienta dentro del mismo contenedor que tiene ahora este servidor de base de datos.

docker exec -it sqlserver /opt/mssql-tools/bin/sqlcmd -S localhost

Segundo, vamos a utilizar el usuario sa.

docker exec -it sqlserver /opt/mssql-tools/bin/sqlcmd -S localhost -U sa

Y por último, la contraseña que hemos elegido anteriormente a través de la variable de entorno.

docker exec -it sqlserver /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Lem0nCode!

Ahora, ya estamos conectados a este servidor de base de datos. Y lo primero que vamos a hacer es crear una nueva base de datos:

CREATE DATABASE Lemoncode;
GO

Lo siguiente es utilizar esta base de datos para crear una tabla:

USE Lemoncode;
GO

Vamos a crear una tabla sencilla para ver que funciona todo correctamente y exactamente igual que si estuviéramos utilizando un SQL Server instalado por ejemplo en una máquina virtual o incluso en local.

CREATE TABLE Courses(ID int, Name varchar(max), Fecha DATE);
GO

Vamos a asegurarnos de que el lenguaje está en inglés, para no tener problemas con la fecha.

SET LANGUAGE ENGLISH; 
GO

Y ahora, ya podemos insertar algunos registros en esta tabla. Por ejemplo, vamos a insertar un par de cursos:

INSERT INTO Courses VALUES (1, 'Bootcamp DevOps', '2020-10-5'), (2, 'Máster FrontEnd', '2020-09-25');
GO

Ahora mismo, tenemos dos registros insertados en esta nueva tabla, en nuestra nueva base de datos, en nuestro SQL Server ejecutándose en un contenedor de Docker.

Para ver que todo ésto está funcionando correctamente, lo siguiente que vamos a hacer, es utilizar una herramienta externa a Docker. Sin tener que utilizar ningún comando dentro del propio contenedcor, para ver que efectivamente podemos utilizar esta nueva base de datos desde una aplicación externa, un SQL Server Management Studio o lo que quieras.

Este caso, vamos a utilizar Azure Data Studio, el cuál es multi plataforma y nos permite conectarnos también a un SQL Server que esté incluso fuera de Azure.

Como está mapeado el puerto 1433 al localhost, sería tan sencillo como añadir nueva conexión:

Nueva conexión en Azure Data Studio

Y rellenamos los detalles de conexión:

  • El servidor: localhost (no hace falta añadir el puerto porque estamos usando el de por defecto).
  • Nombre de usuario: sa
  • Contraseña: Lem0nCode! (que es la que definimos anteriormente como variable de entorno).

Rellenamos los detalles de conexión

Ya estamos conectados al servidor de SQL, que contiene la base de datos que hemos generado llamada Lemoncode, la tabla de Courses y si seleccionamos los registros de esta tabla, veremos los cursos creados anteriormente.

De esta forma, con unas pocas líneas que podemos ejecutar dentro de un script, podemos trabajar con SQL Server sin tener que mantener o crear una máquina virtual con esta base de datos, de una forma super rápida y que va a agilizar muchísimo el día a día.

¿Te gusta el mundo Devops?

En Lemoncode impartimos un Bootcamp Devops Online, en él encontrarás todos los recursos necesarios: clases de los mejores profesionales del sector, tutorías en cuanto las necesites y ejercicios para desarrollar lo aprendido en los distintos módulos. Si quieres saber más puedes pinchar aquí para más información sobre este Bootcamp Devops.