Saturday, December 15, 2018
Docker

Restaurar backups en Docker con SQL Server 2017 Linux en Windows

>helibertoarias helibertoarias
diciembre 06, 2018

Docker se ha convertido en una pieza importante dentro del ambito del desarrollo debido a que facilita la automatización de despliegue de aplicaciones. En este post no pretendo dar una introducción a Docker, tal vez en un post posterior lo haga, hoy solo voy a presentar un ejemplo de los beneficios que nos proporciona el uso de Docker en los desarrollos que realizamos cada día.

El escenario es el siguiente: Se necesita restaurar de manera rápida una base de datos, crear un usuario y concederle permisos para accederla. Esto es simple si solo lo haces una vez y si ya cuentas con la instalación necesaria para la base de datos pero que pasa si no cuentas o no deseas instalar el software para dicho fin y que además no cuentas con el motor de base de datos instalado y configurado?  Bueno ahora te planteo esto, imagina que con la ejecución de 2 líneas de comando puedes restuar tu ambiente con tu base de datos y todo sin la necesidad de tener SQL Server instalado y configurado.

En este ejemplo vamos a utilizar Windows 10 Pro como host y una imagen en Linux con SQL Server 2017 sobre la que se restaurara un backup y se creará una nueva imagen. Finalmente lanzaremos un contenedor con la imagen creada y podremos acceder a la base de datos restaurada desde nuestra aplicación o desde el SQL Management Studio.

1. Requerimientos técnicos

Ten encuenta que Docker requiere Hyper-V y este solo esta disponible en la versión PRO de Windows 10. Adicional a ello si tienes Virtual Box este no es es compatible con Hyper-V, así que no podrás ejecutar los simultaneamente. Si quiere más detalle revisa aquí.  A continuación que se requiere para este post.

Los comandos serán ejecutado utilizando PowerShell en modo Administrador.

2. Configurando Docker

Aunqúe Docker te permite crear contenedores sobre Linux y Windows para SQL Sever hay algo muy importante, una imagen de SQL Server Developer para un contenedor Windows tiene un tamaño de 14GB una para Linux esta alrededor de 1.4GB. Sin embargo hay otras versiones de SQL Server para Windows como la Express que puede estar en los 6GB. En este post trabajaremos con SQL Server 2017. El primer paso será habilitar los contenedores Linux en Windows  en la interfas grafica de Docker, luego será descargar la imagen base que contiene el SQL Server en Linux.

 

Descargando imagen SQL Server Linux

Descargando imagen SQL Server Linux

3. Creando la estructura de archivos

La estrucutra de archivos para este ejemplo es la siguiente.

En la carpeta DOCKER-SQL-SERVER-LINUX  crearemos otra carpeta para adicionar nuestro nuestro backup a restaurar, en este ejemplo usaremos AdventureWorks2017.bak. En la carpeta src esta el Restore.sh el cual tendrá los comandos para configurar la instancia de SQL Server, parametros como RAM asignada, clave y la ejecución del script RestoreDb.sql el cual tiene los comandos de restauración, creación de usuario y asignación de permisos a la base restaurada. Finalmente en la raíz estan los archivos dockerfile y README.MD; el primero con los comandos para crear la nueva imagen y el segundo con la documentación básica del proyecto.

4. Creando el archivo Dockerfile

El archivo dockerfile, como se apreciará a continuación utiliza la imagen base “microsoft/mssql-server-linux” , seguidamente se definen los directorios de trabajo a los cuales de copiará el backup y los archivos RestoreDb.sql y Restore.sh. Finalmente se asignan permisos de ejecución sobre Restore.sh y ejecuta el comando envíado como parametro el RestoreDb.sql.

5. Creado el comando de restauración en  SQL

6. Configurando instancia con Restore.sh

En este archivo realizaremos todos las configuraciones que deseamos aplicar a nuestra instancia de SQL Server como asignar clave, configurar limite de memoria, ejecutar script de restauración.  La clave asignada al usuario SA es  Sa.@2018Password. Si desea ver más comandos de configuración ingresa aquí,

7. Creando la imagen

En este punto ya se debe haber descargado la imagen base de SQL Server para Linux y haber creados la estructura tal como se aprecia en pasos previos. Ahora ejecutaremos los comandos necesarios para ejecutar el contenedor y poder conectarnos mediante SQL Server Management a el. Lo primero que debemo hacer es ubicarnos en la carpeta en la que se encuentra el archivo dockerfile. Luego ejecutar lo siguiente:

Docker build

Docker build

Con este comado hemos creado una nueva imagen llamada  sql-server-linux, esta imagen ya contiene la base de datos restaurada. Al consultar con el siguiente comando debemos visualizar la 2 imágenes. La primera imagen sql-server-linux que ha sido creada a partir de la segunda mssql-server-linux.

Docker images

Docker images

8. Creando el contenedor

Ahora ya tenemos una imagen que tiene restaurada la base de datos Adventure Works 2017 y podemos crear un contenedor y realizar las pruebas que deseemos.

Para validar si todo esta bien podemos ejecutar el siguiente comando para visualizar los contenedores creados.

Docker contenedores

Docker contenedores

 

Ahora te puede conectar desde SQL Server Management a la base de datos con los parametros localhost, 1500 y el usuario AdventureUser con clave AdventureWorks2017.

Conexión desde SQL Server Management

Conexión desde SQL Server Management

 

Conexión desde SQL Server Management

Conexión desde SQL Server Management

Finalmente si ya terminastes de probar con el contenedor recuerda detenerlo para liberar recursos de tu equipo.

 

Descargar código fuente

 

Photo by Rye Jessen on Unsplash

(Visitado 14 veces, 1 visitas hoy)
Heliberto Arias
Senior .NET Developer
Mi nombre es Heliberto Arias y vivo en Barranquilla, Colombia. Soy desarrollador de software. He estado en el desarrollo de software desde el 2007. Cree este blog en 2013 para compartir lo que voy aprendiendo cada año y en el escribo de tecnologías Microsoft principalmente en C# (y aunque he usado VB declaro que lo detesto) y SQL Server desarrollado aplicaciones y servicios web entre otros. Me gustaría mucho si te suscribes a mis redes en Youtube, Google+, Twitter, e Instagram.

Comments

No comments found!

Leave a Comment

Your email address will not be published.

dieciseis − siete =

Login
Remember me
Lost your Password?
Password Reset
Login