SQL Server in Docker auf Linux
[[academy-video-youtube({"vid": "-H5mMexO4_I", "start_time": "0", "title": "SQL Server in Docker on Linux", "creator": "Tim Corey", "length": "18m 20s"})]]
Das direkte Installieren eines Datenbank-Engines auf einer Entwicklungsmaschine ist eine häufige Abkürzung, die langfristige Probleme schafft. Datenbankserver sind für dedizierte Hardware konzipiert. Sie verbrauchen signifikanten Speicher und CPU, akkumulieren Konfigurationsschulden, wenn Sie mehrere Versionen installieren, und erschweren Upgrades, wenn Sie gegen eine andere Veröffentlichung testen müssen. Docker-Container lösen all dies, indem sie jede Datenbankinstanz in einer leichten, austauschbaren Umgebung isolieren.
In seinem Video "SQL Server in Docker on Linux" zeigt Tim Corey, wie man eine Microsoft SQL Server-Instanz auf Linux mit einem einzigen Docker-Befehl hochzieht, sich von VS Code aus damit verbindet und Abfragen dagegen ausführt. Er zeigt auch, wie man mehrere SQL Server-Versionen nebeneinander ausführt und wie man aufräumt, wenn man fertig ist. Wenn Sie der C# auf Linux-Serie folgen oder eine schnelle, wiederholbare Methode wünschen, um einen SQL Server für die Entwicklung zum Laufen zu bringen, deckt dieses Tutorial das vollständige Setup ab.
Warum Docker statt einer lokalen Installation
[0:00 - 0:57] Tim beginnt mit dem Fall gegen native Datenbankinstallationen. Das Kernargument: Datenbank-Engines sind für dedizierte Server konzipiert. Das Installieren von ihnen lokal bedeutet, dass sie Ressourcen verbrauchen, egal ob Sie sie benutzen oder nicht, und das Verwalten mehrerer Versionen (SQL 2019, 2022, 2025) auf derselben Maschine wird schnell zu einer Wartungsbelastung.
Docker-Container drehen dieses Modell um. Jede Datenbank läuft in ihrer eigenen isolierten Umgebung. Starten Sie sie, wenn Sie sie benötigen, stoppen Sie sie, wenn nicht. Löschen Sie sie und beginnen Sie frisch ohne übriggebliebene Konfiguration. Für Entwicklung und Testen ist dieser Ansatz schneller einzurichten, sauberer zu warten und flexibler als eine traditionelle Installation.
Beheben der Portainer-Neustart-Richtlinie
[0:57 - 2:17] Bevor SQL Server gestartet wird, bemerkt Tim, dass Portainer (das GUI-Verwaltungstool für Docker-Container aus der vorherigen Folge) nicht läuft. Es wurde beendet, als die Maschine das letzte Mal heruntergefahren wurde, weil keine Neustart-Richtlinie festgelegt war.
Der Fix sind zwei Befehle:
// Set Portainer to restart automatically (unless manually stopped)
docker update --restart unless-stopped portainer
// Start it now
docker start portainer
// Set Portainer to restart automatically (unless manually stopped)
docker update --restart unless-stopped portainer
// Start it now
docker start portainer
Die unless-stopped-Richtlinie bedeutet, dass Portainer beim Neustart automatisch neu startet, aber heruntergefahren bleibt, wenn Sie ihn ausdrücklich stoppen. Nach dem Start ist Portainer im Browser unter localhost:9000 zugänglich. Tim empfiehlt diese Richtlinie für Verwaltungstools, die Sie ständig laufen lassen möchten, während Sie Datenbank-Container auf manuellen Start setzen.
Der Docker-Run-Befehl für SQL Server
[2:17 - 6:09] Das gesamte SQL Server-Setup reduziert sich auf einen einzigen Befehl. Tim überträgt ihn von seiner Windows-Maschine mit LocalSend (behandelt im vorherigen Nebenquest-Video) und zerteilt es Stück für Stück:
// Single command to launch SQL Server 2025 in Docker
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Test12345" -p 1433:1433 --name sql2025 mcr.microsoft.com/mssql/server:2025-latest
// Single command to launch SQL Server 2025 in Docker
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Test12345" -p 1433:1433 --name sql2025 mcr.microsoft.com/mssql/server:2025-latest
Jede Flagge erfüllt einen bestimmten Zweck. Das -e "ACCEPT_EULA=Y"-Flag akzeptiert Microsofts Lizenzvereinbarung. Das -e "SA_PASSWORD=Test12345"-Flag setzt das Systemadministrator-Passwort im Klartext, was Tim für die lokale Entwicklung als in Ordnung ansieht, aber niemals für produktive Anwendungen verwendet werden sollte. Das -p 1433:1433-Flag ordnet den internen SQL Server-Port des Containers dem gleichen Port auf dem Host-Rechner zu. Das --name sql2025-Flag gibt dem Container ein menschenlesbares Etikett. Und das Image-Tag 2025-latest zieht den neuesten SQL Server 2025 Build aus Microsofts Container-Registry.
Nach dem Ausführen des Befehls lädt Docker die Image-Ebenen herunter, extrahiert sie und startet den Server. Der gesamte Prozess dauert ein paar Minuten, wobei der Großteil der Zeit dem initialen Download gewidmet ist.
In Portainer überprüfen
[6:09 - 7:04] Zurück in Portainer erscheint der neue SQL Server-Container in der Containerliste und zeigt seinen Status als laufend. Tim trifft hier eine bewusste Entscheidung: kein Volume-Einhängen für Datenpersistenz. Wenn der Container gelöscht wird, verschwinden auch die darin enthaltenen Datenbanken.
Das ist absichtlich so für ein Entwicklungs-Setup. Ein neuer Start bedeutet keine angesammelten Testdaten, kein Schema-Drift von früheren Experimenten und keine "es funktioniert auf meiner Maschine"-Probleme durch verbleibenden Zustand. Wenn Sie jemals Datenbanken sichern müssen, bevor Sie einen Container löschen, können Sie sie zuerst exportieren, aber der Neuanfang ist der bevorzugte Workflow für lokale Arbeit.
Verbindung aus VS Code herstellen
[7:04 - 8:50] Um die Datenbank zu verwalten, installiert Tim die SQL Server-Erweiterung für VS Code von Microsoft. Nach der Installation erscheint ein neues SQL Server-Panel in der Seitenleiste, in dem Sie Verbindungen hinzufügen können.
Die Verbindungsparameter sind minimal. Der Servername ist . (Punkt), was localhost bedeutet. Da der Container Port 1433 (der SQL Server-Standard) abbildet, muss keine Portnummer angegeben werden. Der Benutzername ist sa, das Passwort ist das aus dem Docker-Befehl, und die Standarddatenbank ist master. Vertrauen Sie dem Serverzertifikat, wenn Sie dazu aufgefordert werden.
Sobald die Verbindung hergestellt ist, zeigt VS Code das Docker-Symbol neben der Verbindung an, was bestätigt, dass es die containerisierte Umgebung erkannt hat. Die Systemdatenbanken (master, model, msdb, tempdb) erscheinen im Baum und sind einsatzbereit.
Erstellen einer Datenbank und Ausführen von Abfragen
[8:50 - 12:45] Mit der hergestellten Verbindung erstellt Tim eine neue Datenbank namens PeopleDB direkt aus der VS Code-Seitenleiste. Darin erstellt er eine People-Tabelle mit dem visuellen Designer und fügt eine automatisch inkrementierende Id-Spalte, eine FirstName-Spalte und eine LastName-Spalte hinzu (beide NVARCHAR(50), nicht null).
Dann öffnet er ein neues Abfragefenster und fügt Testdaten ein:
INSERT INTO dbo.People (FirstName, LastName)
VALUES
('Tim', 'Corey'),
('Sue', 'Storm'),
('Dave', 'Corey')
INSERT INTO dbo.People (FirstName, LastName)
VALUES
('Tim', 'Corey'),
('Sue', 'Storm'),
('Dave', 'Corey')
Das Ausführen eines SELECT bestätigt, dass die Zeilen vorhanden sind:
SELECT * FROM dbo.People
-- Returns: Tim Corey, Sue Storm, Dave Corey
SELECT * FROM dbo.People WHERE LastName = 'Corey'
-- Returns: Tim Corey, Dave Corey
SELECT * FROM dbo.People
-- Returns: Tim Corey, Sue Storm, Dave Corey
SELECT * FROM dbo.People WHERE LastName = 'Corey'
-- Returns: Tim Corey, Dave Corey
Der vollständige Zyklus (Datenbank erstellen, Tabelle entwerfen, Daten einfügen, Abfrage mit Filtern) dauert nur wenige Minuten. Alles läuft innerhalb des Docker-Containers, verwaltet durch VS Code, ohne dass SQL Server auf der Hostmaschine installiert ist.
Anhalten, Starten und Ressourcenmanagement
[12:45 - 14:20] Wenn Sie mit SQL Server fertig sind, ist das Stoppen ein Klick in Portainer oder ein Befehl im Terminal:
docker stop sql2025
docker stop sql2025
Ein gestoppter Container gibt alle CPU- und Speicherressourcen frei. Das einzige, was er weiterhin verbraucht, ist Speicherplatz für die Image- und Container-Dateien, was vergleichbar mit (und meistens kleiner als) einer nativen SQL Server-Installation ist.
Tim weist darauf hin, dass dies der Hauptvorteil gegenüber einer herkömmlichen Installation ist. Ein lokal installierter SQL Server läuft als Windows- oder Linux-Dienst und verbraucht jederzeit Ressourcen. Ein Docker-Container verwendet nur Ressourcen, wenn Sie sich entscheiden, ihn zu starten.
Mehrere Versionen nebeneinander ausführen
[14:20 - 17:17] Eine der praktischsten Funktionen von Docker für die Datenbankentwicklung ist die Fähigkeit, mehrere Versionen gleichzeitig laufen zu lassen. Tim demonstriert dies, indem er SQL Server 2022 neben dem bestehenden 2025-Container startet:
// SQL Server 2022 on a different port
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Test12345" -p 2022:1433 --name sql2022 mcr.microsoft.com/mssql/server:2022-latest
// SQL Server 2022 on a different port
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Test12345" -p 2022:1433 --name sql2022 mcr.microsoft.com/mssql/server:2022-latest
Der entscheidende Unterschied ist das Port-Mapping: -p 2022:1433 ordnet den internen Port 1433 des Containers dem Port 2022 auf dem Host zu. Dadurch wird ein Portkonflikt mit der 2025-Instanz vermieden, die bereits 1433 verwendet. Nach dem Abschluss des Downloads erscheinen beide Container in Portainer, beide laufen gleichzeitig.
Dies ist nützlich, wenn ein Kunde SQL Server 2022 in der Produktion ausführt, das Team jedoch gegen 2025 entwickelt. Der Wechsel zwischen den Versionen erfordert keine Neuinstallation, sondern nur das Starten des richtigen Containers. Alle verfügbaren SQL Server-Images (2017, 2019, 2022, 2025) sind bei mcr.microsoft.com aufgelistet, und dieselbe Vorgehensweise funktioniert für MySQL, PostgreSQL, MongoDB und Cosmos DB.
Übersicht: Ein Befehl zu einer vollständigen Datenbankumgebung
[17:17 - 17:47] Die Anleitung zeigt, dass ein einzelner Docker-Befehl ersetzt, was früher ein mehrstufiger Installationsprozess mit Konfigurationsassistenten, Dienstverwaltung und Versionskonflikten war. Der Container startet in Minuten, läuft nur bei Bedarf und kann gelöscht werden, ohne Spuren auf dem Hostsystem zu hinterlassen.
Für Entwickler, die an mehreren Projekten mit unterschiedlichen Datenbankanforderungen arbeiten, skaliert dieses Muster sauber. Jedes Projekt erhält seinen eigenen Container, seine eigene Version und seine eigenen isolierten Daten.
Abschluss
[17:47 - 18:20] Zusammengefasst: SQL Server auf Linux läuft in Docker mit einem einzigen docker run-Befehl. Verbinden Sie sich damit aus VS Code mit der SQL Server-Erweiterung, erstellen Sie Datenbanken und Tabellen über die Seitenleiste und schreiben Sie Abfragen, genau wie Sie es gegen eine andere SQL Server-Instanz tun würden. Wenn Sie fertig sind, stoppen Sie den Container und stellen Sie die Ressourcen wieder her.
Die Kombination aus Docker für das Datenbankmanagement und VS Code für Abfragen bietet Ihnen einen kompletten SQL-Entwicklungs-Workflow auf Linux ohne native Datenbankinstallation.
Beispiel-Tipp: Wenn Sie gegen eine bestimmte SQL Server-Version testen müssen, überprüfen Sie mcr.microsoft.com für alle verfügbaren Tags. Sie können 2017, 2019, 2022 und 2025 gleichzeitig betreiben, indem Sie jedem Container einen anderen Hostport (1433, 2019, 2022, 2025) zuweisen. Benennen Sie sie beschreibend (sql2019, sql2022), damit Portainer und docker ps-Ausgaben lesbar bleiben.
Schauen Sie sich das vollständige Video auf seinem YouTube-Kanal an und erhalten Sie weitere Einblicke in die Entwicklung von C# mit Datenbanken auf Linux.
