Installation de SQL Server Express dans un conteneur Docker

Lors de la session que j’ai animé lors de SQLSaturday #510 à Paris, j’ai présenté un certain nombre de techniques de scaleout pour SQL Server.

Une partie des démonstrations s’appuyaient sur SQL Server Express qui fonctionnait dans un environnement Docker sous Windows 2016 (TP5).

Sans vouloir m’étendre sur la notion de micro service qui semble être une brique incontournable pour les prochaines années, du moins côté IT, je trouvais intéressant d’aborder ce point qui peut faciliter le déploiement rapide d’une instance, à des fins de tests ou pourquoi pas de production. Couplé à des outils tiers et au service broker, j’ai présenté des scénarios de load balancing et de multicasting apte à supporter un grand nombre de connexion.

Tous les script, ainsi que le slides de la sessions sont disponibles. Certains ont souhaité voir de manière plus détaillée la mise en œuvre de SQL Server sous Docker.

Voici brièvement les quelques étapes, relativement simples, à suivre pour construire votre propre environnement.

Dans un premier temps, installation de votre hôte. Il peut s’agir d’une machine physique ou bien d’une machine virtuelle. Dans cette dernière optique, votre hyperviseur et votre processeur doivent être en mesure de le supporter. De plus s’il s’agit d’une VM, veillez quand même à ce qu’elle soit doté d’un minimum de 8GB de mémoire.

Il n’y a pas d’intérêt à détailler l’installation de Windows 2016 (Technical preview 5 pour cette démo). Next Next Next Finish.

Une fois terminé, il faut ajouter la fonctionnalité “Containers”. J’en profite pour ajouter le Framework 2.0 (et 3.5) nécessaires au SQL Server 2014.

Install-windowsfeature NET-Framework-Features -source D:\Sources\sxs
Install-WindowsFeature containers

image

L’étape suivant consiste à “installer” Docker sur le serveur.

New-Item -Type Directory -Path 'C:\Program Files\docker\'
Invoke-WebRequest https://aka.ms/tp5/b/dockerd -OutFile $env:ProgramFiles\docker\dockerd.exe
Invoke-WebRequest https://aka.ms/tp5/b/docker -OutFile $env:ProgramFiles\docker\docker.exe
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\Program Files\Docker", [EnvironmentVariableTarget]::Machine)

image

Ensuite il suffit d’enregistrer Docker en tant que service.

cd "C:\Program Files\Docker"
.\dockerd --register-service
Start-Service Docker

Une fois fait, je suggère de redémarrer votre serveur.

Ensuite, il faut installer le container image package provider suivi de l’ajout d’une image Windows Server Core afin de supporter l’instance SQL.

# install the container image package provider 
Install-PackageProvider ContainerImage -Force

# Install the Windows Server core image. 
Install-ContainerImage -Name WindowsServerCore

image

En fonction de la vitesse de votre connexion internet, cela peut prendre un certain temps. Si vous disposez d’un fichier WIM disponible localement, vous gagnerez alors du temps en utilisant la commande Install-ContainerOSImage.

Si on exécute un “docker images”, malheureusement on ne voit …. rien.

Il suffit de stopper et redémarrer Docker afin que l’image téléchargée soit visible. Afin de pouvoir construire une image SQL a partir de l’image WindowsServerCore, il faut alors la tagger comme étant la dernière disponible.

docker tag 50eb6792a3d4 windowsservercore:latest
docker images

image

Afin de pouvoir construire un image, un fichier Dockerfile est nécessaire. Il contient toutes les instructions à exécuter au moment de la création de l’image et de son exécution.

J’ai choisi d’utiliser le fichier fourni par Buc Rogers. ma commande PowerShell étant exécutée avec le répertoire c:\Users\Administrator comme répertoire courant, cela justifie la présence du “cd …” à la fin du script pour se positionner dans le répertoire contenant le fichier Dockerfile. Bien entendu vous pouvez travailler dans un autre répertoire.

wget https://github.com/brogersyh/Dockerfiles-for-windows/archive/master.zip -outfile master.zip
expand-archive master.zip
cd C:\Users\Administrator\master\Dockerfiles-for-windows-master\sqlexpress 

Note : Il y a quelques jours, une nouvelle version a été publiée par Perry Skountrianos.

Il ne reste plus qu’à créer un image contenant SQL Server Express “héritant” de l’image Windows Server Core.

docker.exe build -t sqlexpress .

Le fichier Dockerfile est configuré pour télécharger SQL Server express directement chez Microsoft. Vous pouvez également modifier ce paramètre pour utiliser un fichier sur un site Web de votre intranet voire faire une copie depuis un partage de fichier.

On peut vérifier que l’image est bien crée

image

A présent, il suffit de créer des instances de cette image pour profiter de plusieurs “serveurs” SQL, à la demande…

docker run --name sql01 -d -p 51431:1433 -p 51771:7022 -v e:\mssql\sql01:c:\sql sqlexpress
docker run --name sql02 -d -p 51432:1433 -p 51772:7022 -v e:\mssql\sql02:c:\sql sqlexpress
docker run --name sql03 -d -p 51433:1433 -p 51773:7022 -v e:\mssql\sql03:c:\sql sqlexpress
docker run --name sql04 -d -p 51434:1433 -p 51774:7022 -v e:\mssql\sql04:c:\sql sqlexpress
docker run --name sql05 -d -p 51435:1433 -p 51775:7022 -v e:\mssql\sql05:c:\sql sqlexpress

Plusieurs point remarquables sur ces lignes de commande :

    • -p : permet de rediriger les ports. Sachant que tous les conteneurs ne sont visibles sur le réseau public qu’au travers de l’IP du host, il faut rediriger les ports vers le 1433 configuré dans ‘liage SQL Server Express. la démo faisant également appel au service broker, le port 7022 était destiné au routage inter serveur.
    • -v : permet de rediriger le stockage du conteneur vers un dossier “local” sur le host (disque E dans mon cas, les répertoires mssql et sqlxx doivent exister). Du coup un simple attach, ou bien une recopie du backup dans le répertoire du même nom permet de jouer simplement avec l’instance SQL Express sous Docker.

image

A présent, vous pouvez vous connecter à vos instances en utilisant les ports du Host…

Enjoy Sourire

A propos Christophe

Consultant SQL Server Formateur certifié Microsoft MVP SQL Server MCM SQL Server 2008
Cet article, publié dans Docker, SQL Server, est tagué , , , . Ajoutez ce permalien à vos favoris.

Un commentaire pour Installation de SQL Server Express dans un conteneur Docker

  1. Ping : SQL Server Express 2016 dans un container | Christophe LAPORTE – Consultant SQL Server

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s