SQL Server - Linux on Docker

blog_tutorials-5238355_1280

In diesem Blog-Artikel wird eine kurze Anleitung aufgezeigt, wie Sie den Microsoft SQL Server in der Linux-Variante unter Docker mit wenigen PowerShell-Befehlen zum Laufen bekommen. Zusätzlich wird das Einrichten eines Docker-Volumes aufgezeigt, um Daten vom Host in den Docker-Container zu kopieren.

Voraussetzungen:


Bevor die Installation von Docker auf Windows gestartet werden kann, muss das Hyper-V-Feature aktiviert werden. Eine Anleitung dafür ist über folgenden Link erreichbar: https://docs.microsoft.com/de-de/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v

Nachdem die Installation von Docker erfolgreich durchgelaufen ist, muss der Arbeitsspeicher auf min. 3.250 MB angepasst werden. Standardmäßig steht der Wert auf 2.048 MB. Im folgenden Beispiel sind 15,75 GB an Arbeitsspeicher zugeordnet. 

Jetzt sind wir in der Lage, den SQL Server mittels PowerShell in einem Docker-Container aufzusetzen. In diesem Beispiel erstellen wir zunächst ein einfaches Volume, welches wir später dem Docker-Container zuweisen werden, um Daten vom Host in den Docker-Container zu kopieren. Zusätzlich dient das Volume der persistenten Datenhaltung.

#Volumes prüfen
docker volume ls

#Volume erstellen
docker volume create sqlserverdata_volume 

#Volumes prüfen
docker volume ls  

Im nächsten Schritt erstellen wir den SQL Server Docker Container mit dem Namen sbh_sql und weisen das zuvor erstellte Volume (sqlserverdata_volume) dem Container mit dem Parameter -v sqlserverdata_volume:/sqlserver/data zu.

#Installation von SQL Server (Linux)
docker run --name sbh_sql -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=P@ssw0rd' -p 1433:1433 -v sqlserverdata_volume:/sqlserver/data -d mcr.microsoft.com/mssql/server:2019-latest  

Jetzt kann überprüft werden, ob der Container läuft.

#Läuft der Container
docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Command}}\t{{.Status}}'  

Im Folgenden wird die Backup-Datei auf das Volume im Docker-Container kopiert.

#Kopiere die AW-Backupdatei in den Docker Container
docker cp "D:\_VM\AdventureWorks2017.bak" sbh_sql:/sqlserver/data/AdventureWorks2017.bak  

Im letzten Schritt wollen wir jetzt die Datenbank aus der Backup-Datei in der SQL-Server-Instanz wiederherstellen. Dies kann mit dem SQL Server Management Studio (SSMS) oder Azure Data Studio erfolgen. Als Möglichkeit bieten sich die dbatools an.

Zunächst wollen wir uns die Verbindung und das Einspielen des Backups mittels SQL Server Management Studio anschauen. Eine einfache Verbindung auf den erstellten Container mittels localhost als Servername reicht aus. Wenn bei der Container-Erstellung ein anderer Port als 1433 angegeben wurde, so muss dieser natürlich entsprechend mit angegeben werden.

Nachdem wir erfolgreich eine Verbindung auf den SQL Server Container hergestellt haben, wird abschließend die Backup-Datei aus dem angehängten Volume wiederhergestellt. Hierzu wird die bekannte GUI zum Wiederherstellen einer Datenbank des SSMS geöffnet und entsprechend zur Backup-Datei unter /sqlserver/data navigiert.

Abschließend ist jetzt das Beispiel mittels PowerShell und dbatools an der Reihe. Voraussetzung für dieses Vorgehen ist natürlich, dass die dbatools installiert sind. Eine Anleitung ist hier zu finden: https://dbatools.io/download/

Wenn die dbatools auf Ihrem System installiert sind, kann mit dem Befehl Restore-DbaDatabase der Restore auf dem SQL Server Container durchgeführt werden. Durch den Parameter -SqlCredential wird das Passwort für das sa-Login abgefragt und für den Restore-Prozess anschließend verwendet. Dies ist notwendig, da wir auf dem Linux System nicht mit Windows-Logins arbeiten können.

#Restore AdventureWorks2017 mittels PowerShell und dbatools
Restore-DbaDatabase -SqlInstance localhost -SqlCredential sa -Path /sqlserver/data/AdventureWorks2017.bak 

Nach der Ausführung wird folgender Output geliefert:

ComputerName         : localhost
InstanceName         : MSSQLSERVER
SqlInstance          : 17458d119008
BackupFile           : /sqlserver/data/AdventureWorks2017.bak
BackupFilesCount     : 1
BackupSize           : 206,08 MB
CompressedBackupSize : 47,96 MB
Database             : AdventureWorks2017
Owner                : sa
DatabaseRestoreTime  : 00:00:03
FileRestoreTime      : 00:00:03
NoRecovery           : False
RestoreComplete      : True
RestoredFile         : AdventureWorks2017.mdf,AdventureWorks2017_log.ldf
RestoredFilesCount   : 2
Script               : {RESTORE DATABASE [AdventureWorks2017] FROM  DISK = N'/sqlserver/data/AdventureWorks2017.bak'
                       WITH  FILE = 1,  MOVE N'AdventureWorks2017' TO N'/var/opt/mssql/data/AdventureWorks2017.mdf',
                       MOVE N'AdventureWorks2017_log' TO N'/var/opt/mssql/data/AdventureWorks2017_log.ldf',  NOUNLOAD,
                        STATS = 10}
RestoreDirectory     : /var/opt/mssql/data
WithReplace          : False  

Zusammenfassung

Mit nur wenigen PowerShell-Befehlen kann ein SQL Server in einem Docker-Container inkl. eines Volumes erstellt werden. Gerade für schnelle Testszenarien ist dies eine schöne aber vor allem schnelle Alternative, um ein Test-System in kurzer Zeit aufzusetzen. Auf die erstellte SQL-Server-Instanz und die enthaltenen Datenbanken kann jetzt mit jedem gewünschten Tool (z.B. SSMS, PowerShell oder Power BI) mit gewohnten Verbindungseigenschaften zugegriffen werden.

By accepting you will be accessing a service provided by a third-party external to https://blog.ordix.de/