00:00 / 00:00
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:
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).
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.