SQL Server & Containers

Visits: 769

Containers – Que y para qué?

Un Contenedor es fundamentalmente una manera de empaquetar el software para que una aplicación pueda ser ejecutada, incluyendo los binarios y sus dependencias pero haciendo a esta independiente de la arquitectura subyacente.

Todo código, bibliotecas y dependencias de la aplicación se agrupan en un paquete como como un artefacto inmutable.  Es decir, que cuando una aplicación es empaquetada en un Contenedor , sabremos exactamente cómo se ejecutará de manera predecible, repetible e inmutable. No encontraremos ningún error inesperado al moverlo a una nueva máquina, o entre entornos.

Un Contenedor puede ser pensado como ejecutar una máquina virtual, pero sin todo el overhead de tener que levantar todo un sistema operativo. Por esta razón, empaquetar una aplicación en un contenedor frente a instanciar una máquina virtual mejorará el tiempo total de encendido significativamente y reducirá el footprint total de consumo de recursos. 

Las características anteriores hacen a los Contenedores una gran herramienta y un bloque de construcción esencial en una arquitectura de la nube moderna o de microservicios.

Los contenedores originalmente construidos sobre instrucciones de Kernel Linux, se volvieron disponibles sobre Windows a partir Windows Server 2016.

Ref.: https://msdn.microsoft.com/en-us/magazine/mt797649

https://docs.microsoft.com/en-us/virtualization/windowscontainers/about/

El objetivo principal de usar contenedores fue y es actualmente poder ejecutar las aplicaciones en un entorno de servidor de la misma manera que lo realiza en un entorno de desarrollo, evitando los cambios de arquitectura y dependencias. 

Ahora bien, a esta excelente idea le faltaba un componente esencial para poder ser utilizada. De qué manera los usuarios pueden interactuar con esta tecnología? Esto incluye la administración, la orquestación y la seguridad para los contenedores. La respuesta lleva a otro componente de software, como Docker (ampliamente utilizado), Kubernetes, y otros más específicos en Cloud como Azure Container Server (AKS). 

https://kubernetes.io/

https://www.docker.com/

https://docs.microsoft.com/en-us/azure/aks/

Construcción y Deploy de Containers con Docker

Docker es un software de código abierto, que provee un amplio set de herramientas para construir e implementar software en contenedores.

Para descargar la versión Destkop (para Windows o Mac) : https://www.docker.com/get-started

Una vez instalado el software, como primer paso, se crea un archivo especial llamado “Dockerfile”. Los archivos “Dockerfile” definen un proceso de construcción, el cual una vez utilizado con el comando ‘docker build’ , se produce una “imagen docker” inmutable. Este proceso sería como pensar en un “Snapshot” de la aplicación, que se prepara para ser instanciada en cualquier momento.

Para iniciar esta imagen, se ejecuta el comando ‘docker run’ en cualquier ambiente donde se encuentre corriendo el proceso de docker. Este puede correr tanto en un desktop como en un servidor de producción o en la Nube. Sin importar donde se ejecute la imagen, esta correrá de la misma forma siempre.

Adicionalmente Docker provee un repositorio en la Nube, llamado Docker Hub. Podríamos pensar en esto como si fuera GitHub para imágenes Docker. De esta forma se puede utilizar Docker Hub para almacenar y distribuir las imágenes de los contenedores que uno construya.

Bien, hasta este punto hicimos una introducción a Containers y Docker, pero… Que somos? Somos Base de datos!

Entonces, veamos un ejemplo para descargar una imagen de SQL Server 2017 sobre Linux ya contenerizada sobre Docker, desde el repositorio oficial de Micosoft.

Docker Pull – Descargando la imagen

Desde la linea de comandos, realizaremos un Pull de la imagen de SQL Server 2017 para Linux la cual es completamente compatible para ser ejecutada en containers. Este proceso es realmente rápido pensando en que estamos bajando una imagen funcional de SQL Server.

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

Docker Run – Instanciando la imagen

Una vez finalizado el proceso de Pull, solo resta instanciar la imagen. En el caso de SQL Server se deben configurar los parámetros de Aceptación de Contrato de Usuario Final, establecer la Contraseña del SysAdmin, el puerto TCP para conectarnos y el nombre de la instancia docker.


docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Strong!Passw0rd@" `
   -p 1433:1433 --name sql1 `
   -d microsoft/mssql-server-linux:2017-latest

Inmediatamente tendremos nuestro contenedor ejecutando un SQL Server 2017 completo y listo para conectarnos y trabajar.

Conectándonos a la Instancia

Podemos conectarnos directamente desde la misma línea de comandos, invocando un shell de Linux sobre nuestro container:

docker exec -it sql1 "bash"

Y luego, una vez dentro de la instancia, podemos utilizar el viejo y querido SQLCMD

/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'Strong!Passw0rd@'

Todo esto en cuestión de escasos minutos y pudiendo realizar todos los pasos en una forma completamente programática. En definitiva un proceso completamente definible como DEVOps.

En próximos posts, veremos cómo avanzar en la configuración y la orquestación de estas nuevas tecnologías.

Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.