SQL Server - Linux on Docker
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.
Sie haben Interesse an einer Weiterbildung oder Fragen zum Thema MySQL? Sprechen Sie uns an oder besuchen Sie einen unserer Kurse aus unserem Seminarshop:
Zu unseren Microsoft SQL Server Seminaren
Senior Chief Consultant bei ORDIX
Bei Updates im Blog, informieren wir per E-Mail.
Kommentare