3. Para Conectarnos
Registrarse para una membresía gratuita y asociarse al grupo Local SQL Argentina:
pass.org
Sqlargentina.pass.org
https://www.facebook.com/groups/SQLArgentina/
@sqlargentina
https://www.linkedin.com/groups/3664741
https://www.youtube.com/channel/UCGa-ldNDwP8nAVfQwqoeYHw
4. Technical Speaker
NetConf , SQL PASS, 24 HOP, SQL Saturdays and PASS Virtual Groups
GroupBy and DataPlatformGeeks
@sqlargentina
Javier Villegas
DBA Manager at Mediterranean Shipping Company
Involved with the Microsoft SQL Server since early versions
Specialization in SQL Server Administration, Performance Tuning and High
Availability
Microsoft MVP Data Platform
MCP and MCTS
Blogger and MSDN Forums contributor
@javier_vill
/javiervillegas
sql-javier-villegas.blogspot.com.ar
javier.ignacio.villegas@gmail.com
7. Docker es un proyecto de código abierto que automatiza el
despliegue de aplicaciones dentro del contenedor de software
Los contenedores de Docker envuelven una pieza de software
en un completo sistema de archivos que contiene todo lo
necesario para ejecutar: código, tiempo de ejecución,
herramientas del sistema, bibliotecas del sistema – cualquier
cosa que se pueda instalar en un servidor.
Esto garantiza que siempre funcionará de la misma forma,
independientemente del entorno en el que se esté ejecutando.
¿Qué es Docker?
8. LXC (Linux containers) es un método de virtualización a nivel de sistema
operativo para ejecutar múltiples sistemas aislados de Linux
(contenedores) en un host de control usando un solo kernel de Linux.
El kernel de Linux proporciona la funcionalidad que permite limitar y
priorizar los recursos (CPU, memoria, bloque i/o, red, etc.) sin necesidad
de iniciar ninguna máquina virtual, y la funcionalidad de aislamiento de
namespace que permite el aislamiento completo de la vista de una
aplicación del entorno operativo, incluidos los procesos, redes, IDS de
usuarios y sistemas de archivos
Contenedores
10. Contenedores vs VMS
Guest
OS
Guest
OS
Host OS
Server
Bins/Libs Bins/Libs
Docker
AppB’
AppB’
AppB’
AppB
AppA’
AppA
VM
Container
App
A
App
A’
App
B
Bins/
Libs
Bins/
Libs
Bins/
Libs
Guest Guest Guest
OSOS OS
Hypervisor (Type 2)
Host OS
Server
Los contenedores está
aislados pero comparten
el Sistema Operativo
…deployment más rápido, menos
overhead, migración más fácil
11. El ecosistema de Docker
Repos oficial y 14 k + Dockerized
aplicaciones
Comunidad
640 + colaboradores
250 + correr en Docker
38 descargas
16 k proyectos en github
Apoyo
Soporte empresarial
Documentación robusta
Implementación, integración,
capacitación
Red de socios
La plataforma Docker
Motor dDocker
Hub de Docker
Construir, enviar y ejecutar
Socios
Conteni
do
Usuar
ios
Repos oficial y 35 K Dockerized
aplicaciones
13. Construir una vez, ejecutar en cualquier lugar
Un entorno de tiempo de ejecución limpio, seguro, higiénico y portable para su
aplicación
No se preocupe por que faltan dependencias, paquetes y otros Pain Points durante las
implementaciones posteriores.
Ejecute cada aplicación en su propio contenedor aislado, para que pueda ejecutar varias
versiones de las bibliotecas y otras dependencias para cada aplicación sin preocuparse
Automatizar las pruebas, la integración, el empaquetado ... todo lo que puedas por
script
Reduzca/elimine las preocupaciones sobre la compatibilidad en diferentes plataformas,
ya sea su propio ambiente o sus clientes.
¿contenedores baratos de cero penalización para desplegar servicios? ¿una VM sin la
sobrecarga de una VM? ¿Instant replay con reset of image snapshots? Ese es el poder
de Docker
Beneficios para los desarrolladores
14. DevOps es la Unión de personas, procesos y productos para permitir la
entrega continua de valor a nuestros usuarios finales. La contracción de
“Dev" y "OPS" se refiere a la sustitución de operaciones y desarrollo de
silos para crear equipos multidisciplinarios que ahora trabajan junto con
prácticas y herramientas compartidas y eficientes. Las prácticas DevOps
esenciales incluyen planificación ágil, integración continua, entrega
continua y monitoreo de aplicaciones.
Rol de DevOps
15. Configure una vez ... Ejecute en cualquier lugar
Hacer que todo el ciclo de vida sea más eficiente, consistente y repetible
Aumente la calidad del código producido por los desarrolladores.
Elimine las inconsistencias entre el desarrollo, las pruebas, producción y los entornos de
clientes
Apoya la segregación de deberes
Mejora significativamente la velocidad y fiabilidad de los sistemas de implantación
continua y de integración continua
Debido a que los contenedores son ligeros, simplifican los problemas significativos de
performance, costos, despliegue y portabilidad normalmente asociados con VMS.
Importancia para DevOps
16. Sistemas operativos
• Prácticamente cualquier distribución con un 2.6.32
• Red Hat
• CoreOS
Open
• Docker integration into NOVA (& compatibility with Glance, Horizon, etc.) accepted
for Havana release
Privado PaaS
• OpenShift
• Solum RAckspace, OpenStack)
Público PaaS
• Deis, Voxoz, Cocaína (Yandex), BaiduPaaS
Soporte de ecosistemas
20. El motor de Docker es una aplicación cliente-servidor con estos
componentes principales:
• Un servidor que es un tipo de programa de larga duración llamado proceso
daemon.
• Un API REST que especifica las interfaces que los programas pueden utilizar para
hablar con el daemon e instruirlo sobre qué hacer.
• Un cliente de interfaz de línea de comandos (CLI).
Docker Engine
22. Una imagen de Docker es una plantilla de sólo lectura. Por ejemplo, una
imagen podría contener un sistema operativo Ubuntu con Apache y su
aplicación web instalada.
Las imágenes se utilizan para crear contenedores de Docker. Docker
proporciona una forma sencilla de crear nuevas imágenes o actualizar
las imágenes existentes, o puede descargar las imágenes del Dock que
otras personas ya han creado.
Las imágenes de Docker son el componente de compilación de Docker.
Imágenes Docker
23. Lanzado en junio de 2014
Permite que cualquier host de Docker ejecute cualquier aplicación en
segundos
Proporciona repositorios oficiales, públicos y privados de aplicaciones de
Dock
Gestión del flujo de trabajo: compilación automatizada, Webhooks
Canal de distribución: consiga el software con soporte y proporcionado
por el vendedor
Hub de Docker
24. Docker Hub : construir, enviar, ejecutar aplicaciones
Build Ship
Run
Dev
QA
Source
Staging
Physical
Virtual
Cloud
Infrastructure Management
Infrastructure Management
DockerFile
Source Code
Repository
TESTTEST
TESTTEST
TEST
GCE RAX Azure
Mac/Win Dev
Machine
Boot2Docker
Docker
Analytics
DB
Prod
Machine
Linux OS
DockerDocker
+
+
Users Collab
Provenance Policy
Docker Hub
Registries
Public Curated Private
Docker Hub API
Third Party Tools
Prod
Machine
Linux OS
DockerDocker
Prod
Machine
Linux OS
DockerDocker
VM
DockerDocker
VM
DockerDocker
VM
DockerDocker
QA Machine
Linux OS
DockerDocker
25. Ecosistema
Any App
Any infrastructure
• Physical
• Virtual cloud
+ 45K apps
+ 16K projects
API
Engine Hu
bcloud-based platform services for
distributed applications
API
open source software at the heart
of the Docker platform
26. Why Containers?
Container Container Container
Portable
Run anywhere Docker is supported
Lightweight
Reduced disk, CPU, and memory footprint
Consistent
Consistent image of SQL Server, scripts, and tools
Efficient
Faster deployment, reduced patching, and
less downtime
Container configuration
Database
Persisted storage
Switch for
simple
upgrades
27. Containers Explained
Image
Layered snapshot of a set of files
structured in a filesystem
Built with a Dockerfile using docker
build or APIs
Most built with a base image of an OS
The base image OS must be the same
kernel as host
Container
Runtime instance of an image
Run as many you like based on the
same image
Isolated but can communicate with the
“outside”
Has access by default to all CPU and
memory resources
Each container has writeable layer but
share read-only image layer
Start and stop do not affect writeable
layer
Remove deletes writeable layer
Volumes provide persistence on host
VM = emulate
hardware and load
entire OS
Containers =
isolation but
cooperate with host
kernel
28. SQL Server Images
Public Registries
Docker Hub (https://hub.docker.com)
Red Hat Container Catalog (https://access.redhat.com/containers)
The Microsoft Container Registry (mcr.microsoft.com)
SQL Server 2017
Ubuntu based Images
RTM plus each CU and GDR has separate image
Includes mssql-server and mssql-tools packages
SQL Server 2019 Preview images
Ubuntu and RHEL based images
Includes mssql-server and mssql-tools
SQL Server
Engine pre-
installed
SQL Server
tools pre-
installed
See here how
to add other
packages
Database and
application
compatibility
29. Running a SQL Server Container
sudo docker run
-e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=Sql2017isfast’
-p 1401:1433
-v sqlvolume:/var/opt/mssql
--hostname sql1
--name sql1
-d
mcr.microsoft.com/mssql/server:2017-CU8
environment variables
30. How do I update a SQL Server Container?
Interacting with Data
Use your normal T-SQL and app to modify data
Copy into the container a database backup and restore it
Use volumes or your changes will be lost if container removed
Configuration changes for SQL Server
Use the environment variables (mssql-conf)
Modify the container directly
Build a new image with your scripts to make changes
32. Kubernetes es una plataforma de código abierto para automatizar la
implementación, escalamiento y operaciones de contenedores de
aplicaciones a través de clusters de hosts, proporcionando
infraestructura centrada en contenedores.
Con Kubernetes, usted puede:
• Implementar sus aplicaciones de forma rápida y predecible.
• Escalar sus aplicaciones sobre la marcha.
• Despliegue sin problemas nuevas características.
• Optimizar el uso de su hardware utilizando sólo los recursos que necesita
Kubernetes
34. k8s implementations
minikube
• Single node on your
laptop
Kubeadm
• Install your own
cluster
RedHat OpenShift
• K8s platform private or
public cloud
Azure Kubernetes
Service (AKS)
• Azure hosted k8s
OpenShift on
Azure (OSA)
• Managed OpenShift
on Azure
Other
• Azure Stack
• Windows Server
35. Persistent Volume Storage
Kubernetes
Built-in HADR orchestration with no clustering required
User
SQL Server - Shared storage HA in Kubernetes
Node
Pod
SQL Server
Node
Load Balancer Service
Node
Pod
SQL Server
Pod
SQL Server
36. SQL Server 2019
Always On Availability
Groups on Kubernetes
SQL Server/k8s failover integration
Operator deployment
AG concepts all apply
Load Balancer for Primary App
Load Balancer for Secondary Replica
Readers
Availability groups on Kubernetes
AG
Pod
Operator
Pod
SQL Server
primary
AG agent
Load
balancer
Pod
SQL Server
secondary
AG agent
Pod
SQL Server
secondary
AG agent
SQL Server
primary
SQL Server
secondary
Load
balancer
37. Kubernetes es:
• portable: público, privado, híbrido, multi-Cloud
• extensible: modular, pluggable, hookable, composable
• self-healing: auto-placement, auto-restart, auto-replication, auto-scaling
El proyecto Kubernetes fue iniciado por Google en 2014.
Características de Kubernetes
43. Diariamente necesitamos producir entornos de desarrollo y pruebas con nuestras
aplicaciones en línea y bases de datos de SQL Server.
Para solucionar problemas y solucionar errores, queremos utilizar datos en la
producción. Sin embargo, tiene datos de usuario sensibles por lo tanto queremos
enmascarar esos datos en el entorno de desarrollo y pruebas.
La solución debe ser repetible y automatizada para que pueda funcionar
diariamente o sobre una cadencia fija sin intervención humana.
Queremos utilizar Docker para el contenedor de la aplicación y dB y orquestar el
proceso para desplegar, monitorear y contenedorar aplicaciones y dB.
La solución no debe estar vinculada con el entorno específico del sistema operativo,
ya que elegimos tecnologías que sean las más idóneas para nuestro negocio y que
se puedan ejecutar en plataformas de SO múltiples,Prem o Cloud.
SQL Server en Docker
45. Docker tiene un gran impulso construyendo un ecosistema para construir, enviar y
ejecutar aplicaciones
Docker y Microsoft se han asociado para traer el éxito de Docker en Linux a
Windows
Ahora, prácticamente cualquier carga de trabajo se puede implementar y ejecutar
en cualquier lugar
Resumen
46. Imagen de contenedor de SQL Server 2017: https://docs.Microsoft.com/en-US/SQL/Linux/SQL-Server-Linux-
Setup-Docker
MSSQL-scrpter : https://github.com/Microsoft/SQL-xplat-CLI
MSSQL extensión para código vs: https://github.com/Microsoft/vscode-MSSQL
MSSQL-herramientas (Sqlcmd & BCP): https://docs.Microsoft.com/en-US/SQL/Linux/SQL-Server-Linux-Setup-
Tools
MEP 17. x: https://docs.Microsoft.com/en-US/SQL/SSMS/download-SQL-Server-Management-Studio-SSMS
SSDT 17. x: https://docs.Microsoft.com/en-US/SQL/SSDT/download-SQL-Server-Data-Tools-SSDT
PowerShell x-PLAT: https://github.com/PowerShell/PowerShell
PowerShell dbatools: https://dbatools.IO/
Acoplable: https://www.Docker.com/
Kubernetes: https://kubernetes.IO/
Servicio de contenedores Azure: https://docs.Microsoft.com/en-US/Azure/Container-Service/
Registro de contenedores Azure: https://docs.Microsoft.com/en-US/Azure/Container-Registry/Container-
Registry-Get-Started-Azure-CLI
Referencias
47. SQL Server in
Docker Containers
Questions ?
@javier_vill
http://sql-javier-villegas.blogspot.com.ar
https://ar.linkedin.com/in/javiervillegas
javier.ignacio.villegas@gmail.com