SQL Server on Docker – Demo-Umgebung mit Docker Desktop

Photo by frank mckenna on Unsplash

Ich benötige für mehrere Demos und Präsentation immer mal wieder einen SQL Server um gewisse Dinge zu zeigen, egal ob beim Kunden, bei Veranstaltungen oder mal eben so dem Kollegen. Meist hat man ja irgendwie eine Internet-Verbindung und könnte dann seine virtuelle Maschine in Azure hochfahren und dann dort die Aufgaben durchführen, manchmal gibt es diesen Luxus nicht oder manchmal muss es auch schneller gehen, um zum Beispiel den Gesprächsfluss nicht zu unterbrechen. Daher habe ich mir überlegt, dass es doch ganz großartig wäre, wenn ich einen SQL Server auf meinem Laptop starten könnte… nun habe ich aber keinen “großen” Laptop auf dem ich mal eben eine virtuelle Maschine mit VirtualBox oder VM-Workstation starten könnte. Also musste eine andere Lösung her 😉
In den vergangenen Monaten hatte ich mich immer wieder mit Frank Geisler (b|t) unterhalten, bei dem in jedem Satz mindestens einmal “Docker” vorkommt (Sorry Frank 😉 )… also was lag näher als sich selber noch einmal damit auseinanderzusetzen. Wie kann man nun ohne großen Aufwand auf einem Windows 10 Laptop eine Docker-Umgebung installieren???

Docker Desktop for Windows 10

Docker selber bietet hier eine Laufzeit-Umgebung für Windows und Mac an, den kostenfreien “Docker Desktop“. Mit ~930MB nicht unbedingt ein Leichtgewicht, aber es bietet sehr viele Möglichkeiten inklusive dem Rollout eines lokalen 1-Knoten Kubernetes Clusters für Dev-Zwecke, aber dazu in einem weiteren Post mehr Informationen. Jetzt geht es hier erst einmal um das einfach Rollout eines oder mehrerer SQL Server Container mittels Docker Desktop.

Dazu lade ich den Docker Desktop herunter und starte die Installation, hier geht es dann mit “weiter, weiter, Finish” durch… dann dauert etwas, bis Docker Desktop überprüft hat, ob die Installationsroutine noch etwas nachladen muss, aber alles in allem keine “Ewigkeit”.

Docker Desktop checks installable packages

Danach findet ihr im Startmenü ein entsprechenden Verweis auf die neue Installation des Docker Desktops, diese müsst ihr als Administrator starten und erhaltet als “Startbildschirm” die folgende Ansicht… es ist aktuell nach der Erst-Installation natürlich kein Container verfügbar 😉

Docker Desktop show "no containers running" - and gives example

Wenn man nun diesen Beispiel-Container einmal startet, erhält man auf jeden Fall eine Web-Applikation in/aus einem Container, welche sich auch über den Browser aufrufen lässt. Damit dies aber geschieht, beginnt docker erst einmal mit der Überprüfung ob das Container-Image überhaupt verfügbar ist bzw in welcher Version es vorliegt und ob es ggfs ein Update dazu gibt. Je nach Ergebnis wird dann ein entsprechender Download durchgeführt, um im Anschluss den Container erfolgreich zu starten.

docker run -d -p 80:80 docker/getting-started
Unable to find image 'docker/getting-started:latest' locally
latest: Pulling from docker/getting-started
cbdbe7a5bc2a: Pull complete
85434292d1cb: Pull complete
75fcb1e58684: Pull complete
2a8fe5451faf: Pull complete
42ceeab04dd4: Pull complete
bdd639f50516: Pull complete
c446f16e1123: Pull complete
Digest: sha256:79d5eae6e7b1dec2e911923e463240984dad111a620d5628a5b95e036438b2df
Status: Downloaded newer image for docker/getting-started:latest
74ff7cc76ca107a5bb27e7013e3d9715129ce182518d9fd8d4c363ffadc84b51

Jetzt sehen wir in Docker Desktop unsere Beispiel-Applikation als laufenden Container, nach dem Aufrufen der Webseite (localhost) gelangen wir zu dem Einstiegs-Tutorial und weiteren Erläuterungen rund um die Möglichkeiten von Containern.
Soviel erst einmal zu den Grundlagen von Docker Desktop und dem Starten von Containern… wir wollten uns aber um den SQL Server kümmern bzw die Erstellung einer lokalen Demo-Umgebung mit Docker Containern. Wie man es aus den Blogbeiträgen von Frank Geisler , anderen Docker-Enthuasiasten oder auch von mir kennt, muss man nun das zu ladende Image aus einem Container-Repository definieren, mittels “docker pull” herunterladen und dann über “docker run” entsprechend starten.

$imagepath = 'mcr.microsoft.com/mssql/server:2019-latest'
## CU5
$imagepath = 'mcr.microsoft.com/mssql/server:2019-CU5-ubuntu-16.04'
## Windows 
$imagepath = 'mcr.microsoft.com/microsoft/mssql-server-windows-developer'

docker pull $imagepath

$new_sqlserver_name = "SQLServer2019"

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=SQLServerDemo@2020" -p 1433:1433 --name $new_sqlserver_name -d $imagepath
Docker Desktop dashboard shows a container called SQLServer2019 is running based on SQL Server 2019 latest image.

Nun läuft unser SQL Server 2019 in einem Docker Container und wir können wie gewohnt den vollen Umfang entsprechend nutzen und auch mit dem SQL Server Management Studio als auch dem Azure Data Studio auf diese neue SQL Server Instanz zugreifen. Aber auch über die Commando-Zeile ist es möglich den SQL Server zu administrieren, hierzu muss man sich entsprechend mit dem Container verbinden und z.B. eine Connection über sqlcmd eröffnen oder einen Zwischenschritt in die Bash und dann erst auf den SQL Server… hier sind die Möglichkeiten vielfältig.

docker exec -it $new_sqlserver_name /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P SQLServerDemo@2020

docker exec -it $new_sqlserver_name "bash"
cd /var/opt/mssql/data/
wget https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak
/opt/mssql-tools/bin/sqlcmd -S . -U sa -P SQLServerDemo@2020 -Q "RESTORE DATABASE [WideWorldImporters] FROM  DISK = N'/var/opt/mssql/data/WideWorldImporters-Full.bak' WITH  FILE = 1,  MOVE N'WWI_Primary' TO N'/var/opt/mssql/data/WideWorldImporters.mdf',  MOVE N'WWI_UserData' TO N'/var/opt/mssql/data/WideWorldImporters_UserData.ndf',  MOVE N'WWI_Log' TO N'/var/opt/mssql/data/WideWorldImporters.ldf',  MOVE N'WWI_InMemory_Data_1' TO N'/var/opt/mssql/data/WideWorldImporters_InMemory_Data_1',  NOUNLOAD,  STATS = 5"

Ich wünsche euch viel Spaß beim Ausprobieren eurer lokalen Demo-Umgebungen. 😉
Bei Fragen stehe ich natürlich gerne zur Verfügung!

Azure Data Studio shows basic dashboard direct after first connection to sql server in a docker container

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.