MSSQL Linux con Docker

El 18 de febrero tuve la oportunidad de dar una charla sobre SQL Server corriendo dentro de un contenedor Docker en el evento SQL Saturday Guatemala, más detalles aquí. Pensé que nadie iba a asistir debido a que al mismo tiempo Jason Horner (Microsoft Certified Master of SQL Server) estaba dando una charla sobre trucos de rendimiento en Bases de Datos, pero para mi sorpresa algunas personas estaban interesadas en la charla (sí, la mayoría eran desarrolladores, un DBA y un auditor), genial!.

Por lo tanto, quiero compartir la agenda con algunos enlaces de referencia útil y voy a extenderme en la diapositiva más importante de la PPT, asi que se las dejo:

Agenda

La agenda era bastante sencilla y corta:

  1. Docker
  2. MSSQL + Linux
  3. Casos de Uso
  4. Demo

1. Docker

Comencé dando un recorrido rápido de Docker (el que y el por que), la arquitectura que esta detrás y algunos detalles de adopción en los últimos años. Aquí está la lista de los links de referencia:

2. MSSQL Linux + Docker

Debido a que había otra charla sobre MSSQL en Linux no me enfoqué en eso y fui directo a las instrucciones y consideraciones para correr dentro de contenedor:

Ahora, debemos considerar lo siguiente al momento de correr el contenedor (de lo contrario, el contenedor no levantará):

Aquí está el comando para levantar el contenedor:

docker run -e 'ACCEPT_EULA=Y' e 'SA_PASSWORD=YourStrong!Passw0rd' -p 1433:1433 -d microsoft/mssql-server-linux:ctp1 linux:ctp1-2

Aquí está el comando para levantar el contenedor con un volumen adjunto:

docker run -e 'ACCEPT_EULA=Y' e 'SA_PASSWORD=YourStrong!Passw0rd' -p 1433:1433 -v <host directory>:/var/opt/mssql -d microsoft/mssql-server-linux:ctp1 linux:ctp1-2

Si estás en Windows, puedes reemplazar por ejemplo con C:/mssql

3. Casos de Uso

Mencione algunos casos de uso que me vinieron a la mente, las cosas para las que utilizaria MSSQL en un contenedor, por lo que si tienes cualquier otro caso de uso por favor compartelo en los comentarios, me alegraria saber de la comunidad:

  1. Prototipos, las cosas que uno necesita para validar rápidamente y no queremos tener un servidor completo para la BD
  2. Entorno local para los desarrolladores, un desarrollador puede comenzar a trabajar en el código desde el día 1 sin tener que preocuparse por la versión de la BD por ejemplo
  3. Entorno de prueba/práctica para DBA, hay veces que nos gustaría probar algunas secuencias de comandos que podrían matar el servidor o causar inconsistencia
  4. Pruebas de scripts de migración, es posible que desee practicar la migración de una versión de BD a una versión más reciente
  5. Práctica de restauración de copias de seguridad, podemos configurar una práctica periódica para restaurar copias de seguridad, tenemos que asegurarnos de que cuando las necesitemos, funcionen
  6. Separar la capa de precesamiento de la capa de almacenamiento, es posible que deseemos tener todos los datos en la nube o una SAN y no en nuestra computadora, esto también nos da la capacidad de copiar datos de un entorno a otro (aunque tenemos el riesgo de corrupción datos)
  7. Microservice Arquitecture, esto se ajusta muy bien cuando queremos tener una BD por servicio (también puede ayudarnos a migrar a un tipo de almacenamiento más ligero como una NoSQL)

4. Demo

Seguí la página de "Getting Started" para desarrolladores, pero no tuve tiempo suficiente para hacer todo, así que aquí están las actividades que podemos hacer para practicar:

  1. Configurar el entorno
  2. Crear una aplicación en C # conectándose a un MSSQL
  3. Cambiar la aplicación usando Columnstore para una aplicación 100 veces más rápida
  4. Extensión de mssql en Visual Studio Code

Link de referencia: https://www.microsoft.com/en-us/sql-server/developer-get-started/csharp-ubuntu

SQL Saturday Guatemala

Aquí hay algunas fotos de ese día :)

MSSQL Linux and Docker

SQL Saturday Guatemala Speakers

Resumen

Como pudimos ver, es realmente fácil comenzar con MSSQL para Linux usando un contenedor Docker. Les presente algunos casos de uso que me vinieron a la mente, podrían existir más y otros quizas van a querer discutir algunos de ellos y es por eso que quiero dejar claro que mi idea no es definir una regla, solo quería darles algunos ejemplos de cómo YO usaría esta combinación. Todavía no estoy seguro de si recomendaría usar MSSQL en un contenedor Docker para entornos de producción, lo veo más como una forma rápida de experimentar.

Ah sí, aquí está la PPT de la charla para ese día: Descargar aquí