MSSQL Linux con Docker
Tweet Mon 27 February 2017El 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:
- Docker
- MSSQL + Linux
- Casos de Uso
- 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:
- ¿Qué es Docker? https://www.docker.com/what-docker
- Descripción General de Docker https://docs.docker.com/engine/understanding-docker/
- La Adopción de Docker https://www.datadoghq.com/docker-adoption/
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:
- Preparar la imagen de Docker de SQL Server en Linux, Mac o Windows https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-docker
- MSSQL para Linux Containers https://hub.docker.com/r/microsoft/mssql-server-linux/
- MSSQL para Windows Containers https://hub.docker.com/r/microsoft/mssql-server-windows/
- MSSQL Express para Windows Containers https://hub.docker.com/r/microsoft/mssql-server-windows-express/
Ahora, debemos considerar lo siguiente al momento de correr el contenedor (de lo contrario, el contenedor no levantará):
- Hacemos pull de la imagen del Docker Registry
- Tu computadora necesita tener por lo menos 3.25 GB de RAM (para ser honesto, no me gustó esto, pero todavía tengo que probar si levanta con menos memoria asignada)
- Debemos aceptar el "License Agreement" con la variable de ambiente ACCEPT_EULA
- Debemos proporcionar una contraseña segura con la variable de ambiente SA_PASSWORD
- Tengamos en cuenta que se está ejecutando la versión completa de MSSQL por lo que tenemos un periodo de prueba de 150 días
- Podemos tener datos persistentes adjuntando un volumen, esto se debe a que por defecto los datos son efímeros y se perderán una vez que el contenedor se detenga. Para esto, es necesario adjuntar un volumen a la ruta "/var/opt/mssql"
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
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:
- Prototipos, las cosas que uno necesita para validar rápidamente y no queremos tener un servidor completo para la BD
- 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
- 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
- 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
- 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
- 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)
- 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:
- Configurar el entorno
- Crear una aplicación en C # conectándose a un MSSQL
- Cambiar la aplicación usando Columnstore para una aplicación 100 veces más rápida
- 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 :)
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í