Installer SQL Server vNext CTP1 dans un container windows

Les containers sont à la mode. La fonctionnalité de containers docker est présente dans Windows Server 2016. Et elle est aussi disponible pour les stations de travail depuis la version anniversaire de Windows 10.

L'avantage des container docker : ils permettent de déployer rapidement et simplement une application "virtualisée", qui restera isolée du système hôte : 

Installer sur ma machine de travail une version CTP du moteur SGBD SQL Server ? Pas question !...
Mais c'est maintenant possible sans polluer ma machine : dans un container Docker, encore plus rapide à déployer qu'une VM !

Le petit tutoriel que voici vous permettra d'installer le composant docker et d'installer SQL Server vNext sur une machine Windows 10 (version anniversaire) ou un serveur Windows 2016 en quelques commandes PowerShell.
La fonctionnalité de conteneurs vous permettra de faire tourner des conteneurs basés sur Windows.
Pour des conteneurs Linux, il existe une version (bêta) sur le site docker qui permet de prendre en charge côte à côte des containers Windows et Linux. A tenter pour une autre fois...

Pour que toute l'installation fonctionne, vous devez lancer powershell en tant qu'administrateur

Première étape : activer les composants requis

La fonctionnalité de containers et celle d'hyper-v doivent être activées.

Enable-WindowsOptionalFeature -Online -FeatureName containers -All
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

Si vous préférez, vous pouvez le faire depuis l'interface graphique (ajout de fonctionnalités Windows).

Redémarrez ensuite l'ordinateur

Deuxième étape : installer docker

Téléchargez l'image docker : https://master.dockerproject.org/windows/amd64/docker-1.14.0-dev.zip et décompressez la dans Program Files. Avec powershell, cela donne :

Invoke-WebRequest "https://master.dockerproject.org/windows/amd64/docker-1.14.0-dev.zip" -OutFile "$env:TEMP\docker-1.14.0-dev.zip" -UseBasicParsing

Expand-Archive -Path "$env:TEMP\docker-1.14.0-dev.zip" -DestinationPath $env:ProgramFiles


Configurez le path pour inclure le répertoire docker :

$env:path += ";c:\program files\docker"
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\Program Files\Docker", [EnvironmentVariableTarget]::Machine)

Puis enregistrez docker en tant que service, et démarrez le :

dockerd --register-service

Start-Service Docker

Troisième étape : télécharger l'image docker de SQL Server vnext

docker pull microsoft/mssql-server-windows

Cela peut être un peu long si vous n'avez qu'une pauvre bande passante...

Quatrième étape : créer le container

docker run -d --name vnext -p 1433:1433 -h vnext -e sa_password=P@ssw0rd -e ACCEPT_EULA=Y microsoft/mssql-server-windows


Quelques commandes de gestion de votre container :lister les containers existants, arrêter ou démarrer son container...

docker container ls -a
docker container stop vNext 
docker container rm vNext

Cinquième étape : s'y connecter

Il vous faut trouver l'adresse IP de votre instance SQL Server :
Sur votre machine, Docker a créé un réseau "nat", un switch virtuel et une carte réseau virtuelle qui vous permettra de communiquer entre la machine hôte et le container.
Le container SQL Server a sa propre adresse IP dans le sous-réseau nat, et une translation du port 1433 a été activée.
Identifiez l'adresse IP de votre container avec la commande :

docker container inspect vnext -f="{{.NetworkSettings.Networks.nat.IPAddress}}"

Il ne vous reste plus qu'à vous connecter avec SSMS, ceci ne fonctionnant que depuis votre machine hôte avec cette configuration réseau interne.

Ce qui est un peu trompeur, c'est que l'OS renvoyé par SQL Server est Windows 2016, alors que la plate-forme hôte est Windows 10...