Schnellstart: Ausführen von SQL Server Linux-Containerimages mit Docker
Gilt für: SQL Server – Linux
In diesem Schnellstart wird Docker verwendet, um das SQL Server 2017 (14.x) Linux-Containerimage mssql-server-linux mithilfe von Pull zu übertragen und auszuführen. Anschließend können Sie eine Verbindung mit sqlcmd herstellen, um Ihre erste Datenbank zu erstellen und Abfragen auszuführen.
Weitere Informationen zu unterstützten Plattformen finden Sie in den Versionshinweisen zu SQL Server 2017 unter Linux.
Warnung
Wenn Sie einen Container beenden oder entfernen, werden die SQL Server-Daten im Container dauerhaft gelöscht. Um weitere Informationen zum Beibehalten der Daten zu erhalten, erstellen und kopieren Sie eine Sicherungsdatei des Containers. Alternativ können Sie für die Containerdaten eine Methode zur Datenpersistenz nutzen.
In dieser Schnellstartanleitung werden SQL Server 2017 (14.x)-Container erstellt. Wenn Sie lieber Linux-Container für verschiedene Versionen von SQL Server erstellen möchten, lesen Sie die Versionen dieses Artikels für SQL Server 2019 (15.x) oder SQL Server 2022 (16.x).
In diesem Schnellstart wird Docker verwendet, um das SQL Server 2019 (15.x) Linux-Containerimage mssql-server-linux mithilfe von Pull zu übertragen und auszuführen. Anschließend können Sie eine Verbindung mit sqlcmd herstellen, um Ihre erste Datenbank zu erstellen und Abfragen auszuführen.
Weitere Informationen zu unterstützten Plattformen finden Sie in den Versionshinweisen zu SQL Server 2019 unter Linux.
Warnung
Wenn Sie einen Container beenden oder entfernen, werden die SQL Server-Daten im Container dauerhaft gelöscht. Um weitere Informationen zum Beibehalten der Daten zu erhalten, erstellen und kopieren Sie eine Sicherungsdatei des Containers. Alternativ können Sie für die Containerdaten eine Methode zur Datenpersistenz nutzen.
In dieser Schnellstartanleitung werden SQL Server 2019 (15.x)-Container erstellt. Wenn Sie Linux-Container für verschiedene Versionen von SQL Server erstellen möchten, lesen Sie die Versionen für SQL Server 2017 (14.x) oder SQL Server 2022 (16.x) dieses Artikels.
In diesem Schnellstart wird Docker verwendet, um das SQL Server 2022 (16.x) Linux-Containerimage mssql-server-linux mithilfe von Pull zu übertragen und auszuführen. Anschließend können Sie eine Verbindung mit sqlcmd herstellen, um Ihre erste Datenbank zu erstellen und Abfragen auszuführen.
Weitere Informationen zu unterstützten Plattformen finden Sie in den Versionshinweisen zu SQL Server 2022 unter Linux.
Warnung
Wenn Sie einen Container beenden oder entfernen, werden die SQL Server-Daten im Container dauerhaft gelöscht. Um weitere Informationen zum Beibehalten der Daten zu erhalten, erstellen und kopieren Sie eine Sicherungsdatei des Containers. Alternativ können Sie für die Containerdaten eine Methode zur Datenpersistenz nutzen.
In diesem Schnellstart werden SQL Server 2022 (16.x)-Container erstellt. Wenn Sie Linux-Container für verschiedene Versionen von SQL Server erstellen möchten, lesen Sie die Versionen SQL Server 2017 (14.x) oder SQL Server 2019 (15.x) dieses Artikels.
Dieses Image enthält SQL Server für Linux (basierend auf Ubuntu). Es kann unter Linux mit der Docker-Engine 1.8 und höher verwendet werden.
Ab SQL Server 2022 (16.x) CU 14 und SQL Server 2019 (15.x) CU 28 enthalten die Containerimages das neue Paket mssql-tools18. Das vorherige Verzeichnis /opt/mssql-tools/bin
wird außer Betrieb genommen. Das neue Verzeichnis für Tools von Microsoft ODBC 18 lautet entsprechend dem neuesten Angebot an Tools /opt/mssql-tools18/bin
. Weitere Informationen zu Änderungen und Sicherheitsverbesserungen finden Sie unter ODBC-Treiber 18.0 für SQL Server herausgegeben.
In den Beispielen in diesem Artikel wird der Befehl „docker
“ verwendet. Die meisten dieser Befehle funktionieren jedoch auch mit Podman. Podman bietet eine Befehlszeilenschnittstelle ähnlich der Docker-Engine. Hier erfahren Sie mehr über Podman.
Wichtig
sqlcmd unterstützt den MSSQL_PID
-Parameter beim Erstellen von Containern derzeit nicht. Wenn Sie die Sqlcmd-Anweisungenin dieser Schnellstartanleitung verwenden, erstellen Sie einen Container mit der Developer Edition von SQL Server. Verwenden Sie die Befehlszeilenschnittstellenanweisungen (CLI), um einen Container mit der Lizenz Ihrer Wahl zu erstellen. Mehr Informationen finden Sie unter Bereitstellen von und Herstellen einer Verbindung mit SQL Server in Linux-Containern.
Voraussetzungen
- Docker Engine 1.8 oder höher unter einer beliebigen unterstützten Linux-Distribution. Weitere Informationen finden Sie unter Install Docker (Installieren von Docker).
- Weitere Informationen zu Hardwareanforderungen und zur Prozessorunterstützung finden Sie unter SQL Server 2016 und 2017: Hardware- und Softwareanforderungen
- Weitere Informationen zu Hardwareanforderungen und zur Prozessorunterstützung finden Sie unter SQL Server 2019: Hardware- und Softwareanforderungen
- Weitere Informationen zu Hardwareanforderungen und zur Prozessorunterstützung finden Sie unter SQL Server 2022: Hardware- und Softwareanforderungen
Docker-Speichertreiber
overlay2
. Dieser Treiber ist die Standardeinstellung für die meisten Benutzer. Wenn Sie diesen Speicheranbieter nicht verwenden und ihn ändern müssen, finden Sie weitere Anweisungen und Warnungen in der Docker-Dokumentation zur Konfiguration von „overlay2“.Installieren Sie das neueste sqlcmd auf Ihrem Docker-Host.
Mindestens 2 GB freier Speicherplatz.
Mindestens 2 GB RAM.
Pullen und Ausführen des SQL Server-Linux-Containerimages
Bevor Sie die folgenden Schritte ausführen, stellen Sie sicher, dass Sie am Anfang dieses Artikels Ihre bevorzugte Shell (bash, PowerShell oder cmd) ausgewählt haben.
Für die bash-Befehle in diesem Artikel wird sudo
verwendet. Wenn Sie sudo
nicht zum Ausführen von Docker verwenden möchten, können Sie eine docker
-Gruppe konfigurieren und dieser Gruppe Benutzer hinzufügen. Weitere Informationen finden Sie unter Post-installation steps for Linux (Schritte nach der Installation unter Linux).
Abrufen des Containers aus der Registrierung
Pullen Sie das Linux-Containerimage von SQL Server 2017 (14.x) aus Microsoft Container Registry.
sudo docker pull mcr.microsoft.com/mssql/server:2017-latest
docker pull mcr.microsoft.com/mssql/server:2017-latest
docker pull mcr.microsoft.com/mssql/server:2017-latest
In dieser Schnellstartanleitung werden SQL Server 2017 (14.x)-Container erstellt. Wenn Sie Linux-Container für verschiedene Versionen von SQL Server erstellen möchten, lesen Sie die Versionen für SQL Server 2019 (15.x) oder SQL Server 2022 (16.x) dieses Artikels.
Mit dem obenstehenden Befehl wird das neueste Linux-Containerimage von SQL Server 2017 (14.x) mithilfe von Pull übertragen. Wenn Sie ein bestimmtes Image pullen möchten, fügen Sie einen Doppelpunkt und den Tagnamen hinzu, wie z. B. „mcr.microsoft.com/mssql/server:2017-GA-ubuntu
“. Alle verfügbaren Bilder finden Sie in der Microsoft-Artefaktregistrierung.
Ausführen des Containers
Zum Ausführen des Linux-Containerimages in Docker können Sie eine Bash-Shell oder eine PowerShell-Eingabeaufforderung mit erhöhten Rechten verwenden. Nachfolgend finden Sie den dafür benötigten Befehl.
Wichtig
Die Umgebungsvariable SA_PASSWORD
ist veraltet. Verwenden Sie stattdessen MSSQL_SA_PASSWORD
.
sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" \
-p 1433:1433 --name sql1 --hostname sql1 \
-d \
mcr.microsoft.com/mssql/server:2017-latest
Wenn Sie PowerShell Core verwenden, ersetzen Sie die doppelten Anführungszeichen durch einfache Anführungszeichen.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
-p 1433:1433 --name sql1 --hostname sql1 `
-d `
mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
-p 1433:1433 --name sql1 --hostname sql1 `
-d `
mcr.microsoft.com/mssql/server:2017-latest
Ihr Kennwort sollte der Standardrichtlinie für SQL Server-Kennwörter entsprechen. Ist dies nicht der Fall, kann der Container SQL Server nicht einrichten und funktioniert nicht mehr. Ein Standardkennwort enthält mindestens acht Zeichen, die aus drei der folgenden vier Kategorien stammen müssen: Großbuchstaben, Kleinbuchstaben, Grundzahlen (0–9) und Symbole. Mit dem Befehl docker logs
können Sie das Fehlerprotokoll untersuchen.
Standardmäßig wird bei diesem Schnellstart ein Container erstellt, der die Developer Edition von SQL Server enthält. Die Vorgehensweise zum Ausführen von Produktionseditionen in Containern weicht hiervon minimal ab. Weitere Informationen finden Sie unter Run production container images (Ausführen von Containerimages für Produktionsumgebungen).
In der folgenden Tabelle finden Sie Beschreibungen der Parameter des vorangegangenen Beispiels für docker run
:
Parameter | Beschreibung |
---|---|
-e "ACCEPT_EULA=Y" |
Legen Sie für die Variable ACCEPT_EULA einen beliebigen Wert fest, um zu bestätigen, dass Sie dem Endbenutzer-Lizenzvertrag (End-User Licensing Agreement, EULA) zustimmen. Diese Einstellung ist für das SQL Server-Image zwingend erforderlich. |
-e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" |
Geben Sie Ihr eigenes starkes Kennwort an, das aus mindestens acht Zeichen besteht und der Kennwortrichtlinie entspricht. Diese Einstellung ist für das SQL Server-Image zwingend erforderlich. |
-e "MSSQL_COLLATION=<SQL_Server_collation>" |
Geben Sie anstelle der Standardeinstellung SQL_Latin1_General_CP1_CI_AS eine benutzerdefinierte SQL Server-Sortierung an. |
-p 1433:1433 |
Ordnen Sie einen TCP-Port in der Hostumgebung (erster Wert) einem TCP-Port im Container zu (zweiter Wert). In diesem Beispiel lauscht SQL Server an TCP 1433 im Container. Dieser Container-Port wird danach für TCP-Port 1433 auf dem Host offengelegt. |
--name sql1 |
Geben Sie dem Container selbst einen Namen, anstatt einen willkürlich generierten zu verwenden. Wenn Sie mehrere Container ausführen, können Sie nicht mehrfach denselben Namen verwenden. |
--hostname sql1 |
Wird verwendet, um den Containerhostnamen explizit festzulegen. Wenn Sie den Hostnamen nicht angeben, wird standardmäßig die Container-ID verwendet, bei der es sich um eine zufällig generierte System-GUID handelt. |
-d |
Hiermit wird der Container im Hintergrund ausgeführt (Daemon). |
mcr.microsoft.com/mssql/server:2017-latest |
Das SQL Server-Linux-Containerimage. |
Liste der Container anzeigen
Verwenden Sie den Befehl
docker ps
, um Ihre Docker-Container anzeigen zu lassen.sudo docker ps -a
docker ps -a
docker ps -a
Die Ausgabe sollte etwa folgendem Beispiel entsprechen:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d4a1999ef83e mcr.microsoft.com/mssql/server:2017-latest "/opt/mssql/bin/perm..." 2 minutes ago Up 2 minutes 0.0.0.0:1433->1433/tcp, :::1433->1433/tcp sql1
Wenn in der Spalte
STATUS
Up
(Aktiv) eingetragen ist, wird SQL Server im Container ausgeführt und überwacht den Port, der in der SpaltePORTS
angegeben ist. Wenn in der SpalteSTATUS
Ihres SQL Server-ContainersExited
angezeigt wird, lesen Sie Problembehandlung von SQL Server Docker-Containern. Der Server steht für Verbindungen bereit, sobald in den SQL Server-Fehlerprotokollen die folgende Meldung angezeigt wird:SQL Server is now ready for client connections. This is an informational message; no user action is required
. Sie können das SQL Server-Fehlerprotokoll im Container mithilfe des folgenden Befehls überprüfen:sudo docker exec -t sql1 cat /var/opt/mssql/log/errorlog | grep connection
Der
--hostname
-Parameter ändert den internen Namen des Containers in einen benutzerdefinierten Wert, wie schon erläutert. Dieser Wert wird in der folgenden Transact-SQL-Abfrage zurückgegeben:SELECT @@SERVERNAME, SERVERPROPERTY('ComputerNamePhysicalNetBIOS'), SERVERPROPERTY('MachineName'), SERVERPROPERTY('ServerName');
Wenn Sie für
--hostname
und--name
denselben Wert festlegen, kann der Zielcontainer ganz einfach ermittelt werden.Ändern Sie als letzten Schritt das Systemadministratorkennwort in eine Produktionsumgebung, da das
MSSQL_SA_PASSWORD
in derps -eax
-Ausgabe sichtbar und in der Umgebungsvariablen mit dem gleichen Namen gespeichert ist.
Pullen und Ausführen des SQL Server-Linux-Containerimages
Bevor Sie die folgenden Schritte ausführen, stellen Sie sicher, dass Sie am Anfang dieses Artikels Ihre bevorzugte Shell (bash, PowerShell oder cmd) ausgewählt haben.
Für die bash-Befehle in diesem Artikel wird sudo
verwendet. Wenn Sie sudo
nicht zum Ausführen von Docker verwenden möchten, können Sie eine docker
-Gruppe konfigurieren und dieser Gruppe Benutzer hinzufügen. Weitere Informationen finden Sie unter Post-installation steps for Linux (Schritte nach der Installation unter Linux).
Abrufen des Containers aus der Registrierung
Pullen Sie das Linux-Containerimage von SQL Server 2019 (15.x) aus Microsoft Container Registry.
docker pull mcr.microsoft.com/mssql/server:2019-latest
docker pull mcr.microsoft.com/mssql/server:2019-latest
docker pull mcr.microsoft.com/mssql/server:2019-latest
In dieser Schnellstartanleitung werden SQL Server 2019 (15.x)-Container erstellt. Wenn Sie Linux-Container für verschiedene Versionen von SQL Server erstellen möchten, lesen Sie die Versionen für SQL Server 2017 (14.x) oder SQL Server 2022 (16.x) dieses Artikels.
Mit dem obenstehenden Befehl wird das neueste Linux-Containerimage von SQL Server 2019 (15.x) mithilfe von Pull übertragen. Wenn Sie ein bestimmtes Image pullen möchten, fügen Sie einen Doppelpunkt und den Tagnamen hinzu, wie z. B. „mcr.microsoft.com/mssql/server:2019-GA-ubuntu
“. Alle verfügbaren Bilder finden Sie in der Microsoft-Artefaktregistrierung.
Ausführen des Containers
Zum Ausführen des Linux-Containerimages in Docker können Sie eine Bash-Shell oder eine PowerShell-Eingabeaufforderung mit erhöhten Rechten verwenden. Nachfolgend finden Sie den dafür benötigten Befehl.
Wichtig
Die Umgebungsvariable SA_PASSWORD
ist veraltet. Verwenden Sie stattdessen MSSQL_SA_PASSWORD
.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" \
-p 1433:1433 --name sql1 --hostname sql1 \
-d \
mcr.microsoft.com/mssql/server:2019-latest
Wenn Sie PowerShell Core verwenden, ersetzen Sie die doppelten Anführungszeichen durch einfache Anführungszeichen.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
-p 1433:1433 --name sql1 --hostname sql1 `
-d `
mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
-p 1433:1433 --name sql1 --hostname sql1 `
-d `
mcr.microsoft.com/mssql/server:2019-latest
Ihr Kennwort sollte der Standardrichtlinie für SQL Server-Kennwörter entsprechen. Ist dies nicht der Fall, kann der Container SQL Server nicht einrichten und funktioniert nicht mehr. Ein Standardkennwort enthält mindestens acht Zeichen, die aus drei der folgenden vier Kategorien stammen müssen: Großbuchstaben, Kleinbuchstaben, Grundzahlen (0–9) und Symbole. Mit dem Befehl docker logs
können Sie das Fehlerprotokoll untersuchen.
Standardmäßig wird bei diesem Schnellstart ein Container erstellt, der die Developer Edition von SQL Server enthält. Die Vorgehensweise zum Ausführen von Produktionseditionen in Containern weicht hiervon minimal ab. Weitere Informationen finden Sie unter Run production container images (Ausführen von Containerimages für Produktionsumgebungen).
In der folgenden Tabelle finden Sie Beschreibungen der Parameter des vorangegangenen Beispiels für docker run
:
Parameter | Beschreibung |
---|---|
-e "ACCEPT_EULA=Y" |
Legen Sie für die Variable ACCEPT_EULA einen beliebigen Wert fest, um zu bestätigen, dass Sie dem Endbenutzer-Lizenzvertrag (End-User Licensing Agreement, EULA) zustimmen. Diese Einstellung ist für das SQL Server-Image zwingend erforderlich. |
-e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" |
Geben Sie Ihr eigenes starkes Kennwort an, das aus mindestens acht Zeichen besteht und der Kennwortrichtlinie entspricht. Diese Einstellung ist für das SQL Server-Image zwingend erforderlich. |
-e "MSSQL_COLLATION=<SQL_Server_collation>" |
Geben Sie anstelle der Standardeinstellung SQL_Latin1_General_CP1_CI_AS eine benutzerdefinierte SQL Server-Sortierung an. |
-p 1433:1433 |
Ordnen Sie einen TCP-Port in der Hostumgebung (erster Wert) einem TCP-Port im Container zu (zweiter Wert). In diesem Beispiel lauscht SQL Server an TCP 1433 im Container. Dieser Container-Port wird danach für TCP-Port 1433 auf dem Host offengelegt. |
--name sql1 |
Geben Sie dem Container selbst einen Namen, anstatt einen willkürlich generierten zu verwenden. Wenn Sie mehrere Container ausführen, können Sie nicht mehrfach denselben Namen verwenden. |
--hostname sql1 |
Wird verwendet, um den Containerhostnamen explizit festzulegen. Wenn Sie den Hostnamen nicht angeben, wird standardmäßig die Container-ID verwendet, bei der es sich um eine zufällig generierte System-GUID handelt. |
-d |
Hiermit wird der Container im Hintergrund ausgeführt (Daemon). |
mcr.microsoft.com/mssql/server:2019-latest |
Das SQL Server-Linux-Containerimage. |
Liste der Container anzeigen
Verwenden Sie den Befehl
docker ps
, um Ihre Docker-Container anzeigen zu lassen.docker ps -a
docker ps -a
docker ps -a
Die Ausgabe sollte etwa folgendem Beispiel entsprechen:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d4a1999ef83e mcr.microsoft.com/mssql/server:2019-latest "/opt/mssql/bin/perm..." 2 minutes ago Up 2 minutes 0.0.0.0:1433->1433/tcp, :::1433->1433/tcp sql1
Wenn in der Spalte
STATUS
Up
(Aktiv) eingetragen ist, wird SQL Server im Container ausgeführt und überwacht den Port, der in der SpaltePORTS
angegeben ist. Wenn in der SpalteSTATUS
Ihres SQL Server-ContainersExited
angezeigt wird, lesen Sie Problembehandlung von SQL Server Docker-Containern. Der Server steht für Verbindungen bereit, sobald in den SQL Server-Fehlerprotokollen die folgende Meldung angezeigt wird:SQL Server is now ready for client connections. This is an informational message; no user action is required
. Sie können das SQL Server-Fehlerprotokoll im Container mithilfe des folgenden Befehls überprüfen:docker exec -t sql1 cat /var/opt/mssql/log/errorlog | grep connection
Der
--hostname
-Parameter ändert den internen Namen des Containers in einen benutzerdefinierten Wert, wie schon erläutert. Dieser Wert wird in der folgenden Transact-SQL-Abfrage zurückgegeben:SELECT @@SERVERNAME, SERVERPROPERTY('ComputerNamePhysicalNetBIOS'), SERVERPROPERTY('MachineName'), SERVERPROPERTY('ServerName');
Wenn Sie für
--hostname
und--name
denselben Wert festlegen, kann der Zielcontainer ganz einfach ermittelt werden.Ändern Sie als letzten Schritt das Systemadministratorkennwort in eine Produktionsumgebung, da das
MSSQL_SA_PASSWORD
in derps -eax
-Ausgabe sichtbar und in der Umgebungsvariablen mit dem gleichen Namen gespeichert ist.
Pullen und Ausführen des SQL Server-Linux-Containerimages
Bevor Sie die folgenden Schritte ausführen, stellen Sie sicher, dass Sie am Anfang dieses Artikels Ihre bevorzugte Shell (bash, PowerShell oder cmd) ausgewählt haben.
Für die bash-Befehle in diesem Artikel wird sudo
verwendet. Wenn Sie sudo
nicht zum Ausführen von Docker verwenden möchten, können Sie eine docker
-Gruppe konfigurieren und dieser Gruppe Benutzer hinzufügen. Weitere Informationen finden Sie unter Post-installation steps for Linux (Schritte nach der Installation unter Linux).
Abrufen des Containers aus der Registrierung
Pullen Sie das Linux-Containerimage von SQL Server 2022 (16.x) aus Microsoft Container Registry.
docker pull mcr.microsoft.com/mssql/server:2022-latest
docker pull mcr.microsoft.com/mssql/server:2022-latest
docker pull mcr.microsoft.com/mssql/server:2022-latest
In diesem Schnellstart werden SQL Server 2022 (16.x)-Container erstellt. Wenn Sie Linux-Container für verschiedene Versionen von SQL Server erstellen möchten, lesen Sie die Versionen SQL Server 2017 (14.x) oder SQL Server 2019 (15.x) dieses Artikels.
Mit dem obenstehenden Befehl wird das neueste Linux-Containerimage von SQL Server 2022 (16.x) mithilfe von Pull übertragen. Wenn Sie ein bestimmtes Image pullen möchten, fügen Sie einen Doppelpunkt und den Tagnamen hinzu, wie z. B. „mcr.microsoft.com/mssql/server:2022-GA-ubuntu
“. Alle verfügbaren Bilder finden Sie in der Microsoft-Artefaktregistrierung.
Ausführen des Containers
Zum Ausführen des Linux-Containerimages in Docker können Sie eine Bash-Shell oder eine PowerShell-Eingabeaufforderung mit erhöhten Rechten verwenden. Nachfolgend finden Sie den dafür benötigten Befehl.
Wichtig
Die Umgebungsvariable SA_PASSWORD
ist veraltet. Verwenden Sie stattdessen MSSQL_SA_PASSWORD
.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" \
-p 1433:1433 --name sql1 --hostname sql1 \
-d \
mcr.microsoft.com/mssql/server:2022-latest
Wenn Sie PowerShell Core verwenden, ersetzen Sie die doppelten Anführungszeichen durch einfache Anführungszeichen.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
-p 1433:1433 --name sql1 --hostname sql1 `
-d `
mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
-p 1433:1433 --name sql1 --hostname sql1 `
-d `
mcr.microsoft.com/mssql/server:2022-latest
Ihr Kennwort sollte der Standardrichtlinie für SQL Server-Kennwörter entsprechen. Ist dies nicht der Fall, kann der Container SQL Server nicht einrichten und funktioniert nicht mehr. Ein Standardkennwort enthält mindestens acht Zeichen, die aus drei der folgenden vier Kategorien stammen müssen: Großbuchstaben, Kleinbuchstaben, Grundzahlen (0–9) und Symbole. Mit dem Befehl docker logs
können Sie das Fehlerprotokoll untersuchen.
Standardmäßig wird bei diesem Schnellstart ein Container erstellt, der die Developer Edition von SQL Server enthält. Die Vorgehensweise zum Ausführen von Produktionseditionen in Containern weicht hiervon minimal ab. Weitere Informationen finden Sie unter Run production container images (Ausführen von Containerimages für Produktionsumgebungen).
In der folgenden Tabelle finden Sie Beschreibungen der Parameter des vorangegangenen Beispiels für docker run
:
Parameter | Beschreibung |
---|---|
-e "ACCEPT_EULA=Y" |
Legen Sie für die Variable ACCEPT_EULA einen beliebigen Wert fest, um zu bestätigen, dass Sie dem Endbenutzer-Lizenzvertrag (End-User Licensing Agreement, EULA) zustimmen. Diese Einstellung ist für das SQL Server-Image zwingend erforderlich. |
-e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" |
Geben Sie Ihr eigenes starkes Kennwort an, das aus mindestens acht Zeichen besteht und der Kennwortrichtlinie entspricht. Diese Einstellung ist für das SQL Server-Image zwingend erforderlich. |
-e "MSSQL_COLLATION=<SQL_Server_collation>" |
Geben Sie anstelle der Standardeinstellung SQL_Latin1_General_CP1_CI_AS eine benutzerdefinierte SQL Server-Sortierung an. |
-p 1433:1433 |
Ordnen Sie einen TCP-Port in der Hostumgebung (erster Wert) einem TCP-Port im Container zu (zweiter Wert). In diesem Beispiel lauscht SQL Server an TCP 1433 im Container. Dieser Container-Port wird danach für TCP-Port 1433 auf dem Host offengelegt. |
--name sql1 |
Geben Sie dem Container selbst einen Namen, anstatt einen willkürlich generierten zu verwenden. Wenn Sie mehrere Container ausführen, können Sie nicht mehrfach denselben Namen verwenden. |
--hostname sql1 |
Wird verwendet, um den Containerhostnamen explizit festzulegen. Wenn Sie den Hostnamen nicht angeben, wird standardmäßig die Container-ID verwendet, bei der es sich um eine zufällig generierte System-GUID handelt. |
-d |
Hiermit wird der Container im Hintergrund ausgeführt (Daemon). |
mcr.microsoft.com/mssql/server:2022-latest |
Das SQL Server-Linux-Containerimage. |
Das Systemadministratorkennwort ändern
Das SA-Konto ist ein Systemadministrator auf der SQL Server-Instanz, der beim Setup erstellt wird. Nach dem Erstellen Ihres SQL Server-Containers können Sie die von Ihnen festgelegte Umgebungsvariable MSSQL_SA_PASSWORD
ermitteln, indem Sie echo $MSSQL_SA_PASSWORD
im Container ausführen. Für Sicherheitszwecke sollten Sie Ihr Systemadministratorkennwort in einer Produktionsumgebung ändern.
Wählen Sie ein sicheres Kennwort für den SA-Benutzer aus.
Verwenden Sie
docker exec
in Transact-SQL sqlcmd zum Ausführen und Ändern des Kennworts. Im folgenden Beispiel werden das alte und das neue Kennwort aus der Benutzereingabe gelesen.docker exec -it sql1 /opt/mssql-tools18/bin/sqlcmd \ -S localhost -U SA \ -P "$(read -sp "Enter current SA password: "; echo "${REPLY}")" \ -Q "ALTER LOGIN SA WITH PASSWORD=\"$(read -sp "Enter new SA password: "; echo "${REPLY}")\""
docker exec -it sql1 /opt/mssql-tools18/bin/sqlcmd ` -S localhost -U SA -P "<YourStrong@Passw0rd>" ` -Q "ALTER LOGIN SA WITH PASSWORD='<YourNewStrong@Passw0rd>'"
docker exec -it sql1 /opt/mssql-tools18/bin/sqlcmd ` -S localhost -U SA -P "<YourStrong@Passw0rd>" ` -Q "ALTER LOGIN SA WITH PASSWORD='<YourNewStrong@Passw0rd>'"
Die jüngsten Versionen von sqlcmd sind standardmäßig sicher. Weitere Informationen zur Verbindungsverschlüsselung finden Sie unter sqlcmd-Hilfsprogramm für Windows und Herstellen einer Verbindung mit sqlcmd für Linux und macOS. Wenn die Verbindung nicht erfolgreich ist, können Sie sqlcmd die Option
-No
hinzufügen, um anzugeben, dass die Verschlüsselung optional und nicht obligatorisch ist.
Deaktivieren des sa
-Kontos als bewährte Methode
Wichtig
Sie benötigen diese Anmeldeinformationen noch in späteren Schritten. Notieren Sie sich unbedingt die hier eingegebene Benutzer-ID und das Kennwort.
Wenn Sie nach der Installation zum ersten Mal eine Verbindung zu Ihrer SQL Server-Instanz unter Verwendung des sa
-Kontos herstellen, sollten Sie unbedingt diese Schritte befolgen und anschließend die sa
-Anmeldung als bewährte Sicherheitsmethode sofort deaktivieren.
Erstellen Sie eine neue Anmeldung und machen Sie diese zu einem Mitglied der Serverrolle SysAdmin.
Je nachdem, ob es sich um eine Container- oder Nicht-Container-Bereitstellung handelt, aktivieren Sie die Windows-Authentifizierung, erstellen eine neue Windows-basierte Anmeldung und fügen sie der SysAdmin-Serverrolle hinzu.
Andernfalls erstellen Sie eine Anmeldung mit SQL Server-Authentifizierung und fügen sie der Serverrolle SysAdmin hinzu.
Stellen Sie mit der neu erstellten Anmeldung eine Verbindung zur SQL Server-Instanz her.
Deaktivieren Sie das
sa
-Konto, wie es die bewährte Sicherheitspraxis empfiehlt.
Liste der Container anzeigen
Verwenden Sie den Befehl
docker ps
, um Ihre Docker-Container anzeigen zu lassen.docker ps -a
docker ps -a
docker ps -a
Die Ausgabe sollte etwa folgendem Beispiel entsprechen:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d4a1999ef83e mcr.microsoft.com/mssql/server:2022-latest "/opt/mssql/bin/perm..." 2 minutes ago Up 2 minutes 0.0.0.0:1433->1433/tcp, :::1433->1433/tcp sql1
Wenn in der Spalte
STATUS
Up
(Aktiv) eingetragen ist, wird SQL Server im Container ausgeführt und überwacht den Port, der in der SpaltePORTS
angegeben ist. Wenn in der SpalteSTATUS
Ihres SQL Server-ContainersExited
angezeigt wird, lesen Sie Problembehandlung von SQL Server Docker-Containern. Der Server steht für Verbindungen bereit, sobald in den SQL Server-Fehlerprotokollen die folgende Meldung angezeigt wird:SQL Server is now ready for client connections. This is an informational message; no user action is required
. Sie können das SQL Server-Fehlerprotokoll im Container mithilfe des folgenden Befehls überprüfen:docker exec -t sql1 cat /var/opt/mssql/log/errorlog | grep connection
Der
--hostname
-Parameter ändert den internen Namen des Containers in einen benutzerdefinierten Wert, wie schon erläutert. Dieser Wert wird in der folgenden Transact-SQL-Abfrage zurückgegeben:SELECT @@SERVERNAME, SERVERPROPERTY('ComputerNamePhysicalNetBIOS'), SERVERPROPERTY('MachineName'), SERVERPROPERTY('ServerName');
Wenn Sie für
--hostname
und--name
denselben Wert festlegen, kann der Zielcontainer ganz einfach ermittelt werden.
Verbindung mit SQL Server herstellen
In den folgenden Schritten wird das SQL Server-Befehlszeilentool, das Dienstprogramm sqlcmd, innerhalb des Containers verwendet, um eine Verbindung zu SQL Server herzustellen.
Verwenden Sie den Befehl
docker exec -it
, um in Ihrem laufenden Container eine interaktive Bash-Shell zu starten. Im folgenden Beispiel stehtsql1
für den Namen, den Sie bei der Erstellung des Containers mit dem Parameter--name
angegeben haben.docker exec -it sql1 "bash"
docker exec -it sql1 "bash"
docker exec -it sql1 "bash"
Stellen Sie innerhalb des Containers eine lokale Verbindung mit sqlcmd her, indem Sie den vollständigen Pfad verwenden.
/opt/mssql-tools/bin/sqlcmd -S localhost -U <userid> -P "<YourNewStrong@Passw0rd>"
Die jüngsten Versionen von sqlcmd sind standardmäßig sicher. Weitere Informationen zur Verbindungsverschlüsselung finden Sie unter sqlcmd-Hilfsprogramm für Windows und Herstellen einer Verbindung mit sqlcmd für Linux und macOS. Wenn die Verbindung nicht erfolgreich ist, können Sie sqlcmd die Option
-No
hinzufügen, um anzugeben, dass die Verschlüsselung optional und nicht obligatorisch ist.Sie können das Kennwort in der Befehlszeile auslassen, damit Sie aufgefordert werden, es einzugeben. Zum Beispiel:
/opt/mssql-tools/bin/sqlcmd -S localhost -U <userid>
Stellen Sie innerhalb des Containers eine lokale Verbindung mit sqlcmd her, indem Sie den vollständigen Pfad verwenden.
/opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid> -P "<YourNewStrong@Passw0rd>"
Die jüngsten Versionen von sqlcmd sind standardmäßig sicher. Weitere Informationen zur Verbindungsverschlüsselung finden Sie unter sqlcmd-Hilfsprogramm für Windows und Herstellen einer Verbindung mit sqlcmd für Linux und macOS. Wenn die Verbindung nicht erfolgreich ist, können Sie sqlcmd die Option
-No
hinzufügen, um anzugeben, dass die Verschlüsselung optional und nicht obligatorisch ist.Sie können das Kennwort in der Befehlszeile auslassen, damit Sie aufgefordert werden, es einzugeben. Zum Beispiel:
/opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid>
Stellen Sie innerhalb des Containers eine lokale Verbindung mit sqlcmd her, indem Sie den vollständigen Pfad verwenden.
/opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid> -P "<YourNewStrong@Passw0rd>"
Die jüngsten Versionen von sqlcmd sind standardmäßig sicher. Weitere Informationen zur Verbindungsverschlüsselung finden Sie unter sqlcmd-Hilfsprogramm für Windows und Herstellen einer Verbindung mit sqlcmd für Linux und macOS. Wenn die Verbindung nicht erfolgreich ist, können Sie sqlcmd die Option
-No
hinzufügen, um anzugeben, dass die Verschlüsselung optional und nicht obligatorisch ist.Sie können das Kennwort in der Befehlszeile auslassen, damit Sie aufgefordert werden, es einzugeben. Zum Beispiel:
/opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid>
- Wenn dies erfolgreich war, sollten zu einer sqlcmd Eingabeaufforderung:
1>
gelangen.
Erstellen und Abfragen von Daten
Die folgenden Abschnitte führen Sie durch die Verwendung von sqlcmd und Transact-SQL, um eine neue Datenbank zu erstellen, Daten hinzuzufügen und eine Abfrage auszuführen.
Erstellen einer neuen Datenbank
Mit den folgenden Schritten wird eine neue Datenbank mit dem Namen TestDB
erstellt.
Fügen Sie aus der sqlcmd-Eingabeaufforderung den folgenden Transact-SQL-Befehl zur Erstellung einer Testdatenbank ein:
CREATE DATABASE TestDB;
Schreiben Sie in der nächsten Zeile eine Abfrage, um den Namen all Ihrer Datenbanken auf Ihrem Server zurückzugeben:
SELECT Name from sys.databases;
Die vorherigen beiden Befehle wurden nicht sofort ausgeführt. Geben Sie
GO
in einer neuen Zeile ein, um die vorherigen Befehle auszuführen:GO
Einfügen von Daten
Erstellen Sie als Nächstes eine neue Tabelle, Inventory
, und fügen Sie zwei neue Zeilen ein.
Wechseln Sie den Kontext aus der sqlcmd-Eingabeaufforderung zur neuen
TestDB
-Datenbank:USE TestDB;
Erstellen Sie eine neue Tabelle mit dem Namen
Inventory
:CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT);
Fügen Sie Daten in die neue Tabelle ein:
INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);
Geben Sie
GO
ein, um die zuvor eingegebenen Befehle auszuführen:GO
Auswählen von Daten
Führen Sie nun eine Abfrage zum Zurückgeben von Daten aus der Inventory
-Tabelle aus.
Geben Sie aus der sqlcmd-Eingabeaufforderung eine Abfrage ein, die Reihen aus der
Inventory
-Tabelle zurückgibt, bei denen die Menge größer als 152 ist:SELECT * FROM Inventory WHERE quantity > 152;
Führen Sie den folgenden Befehl aus:
GO
Beenden der sqlcmd-Eingabeaufforderung
Zum Beenden der sqlcmd-Sitzung, geben Sie
QUIT
ein:QUIT
Geben Sie
exit
ein, um die interaktive Befehlszeile in Ihrem Container zu beenden. Der Container wird auch nach dem Beenden der interaktiven Bash-Shell weiter ausgeführt.
Herstellen einer Verbindung von außerhalb des Containers
Sie können auch über jedes externe Linux-, Windows- oder macOS-Tool, das SQL-Verbindungen unterstützt, eine Verbindung mit der SQL Server-Instanz auf Ihrem Docker-Computer herstellen. Das externe Tool verwendet die IP-Adresse für den Hostcomputer.
Mithilfe der folgenden Schritte stellen Sie über sqlcmd von außerhalb Ihres Containers eine Verbindung mit SQL Server im Container her. Voraussetzung ist, dass Sie außerhalb Ihres Containers bereits SQL Server-Befehlszeilentools installiert haben. Für alle Tools gelten dieselben Prinzipien. Die Verbindung wird jedoch bei jedem Tool auf eine andere Weise hergestellt.
Suchen Sie die IP-Adresse für den Hostcomputer Ihres Containers mithilfe von
ifconfig
oderip addr
.Installieren Sie für dieses Beispiel das Tool sqlcmd auf Ihrem Clientcomputer. Weitere Informationen finden Sie unter Dienstprogramm sqlcmd oder Installieren der SQL Server-Befehlszeilentools sqlcmd und bcp unter Linux.
Führen Sie sqlcmd aus. Geben Sie dabei die IP-Adresse und den Port an, der dem Port 1433 Ihres Containers zugeordnet ist. In diesem Beispiel ist das derselbe Port 1433 auf dem Hostcomputer. Wenn Sie einen anderen zugeordneten Port auf dem Hostcomputer angegeben haben, verwenden Sie diesen hier. Außerdem müssen Sie den entsprechenden Eingangsport in der Firewall öffnen, um die Verbindung zuzulassen.
Die jüngsten Versionen von sqlcmd sind standardmäßig sicher. Wenn die Verbindung nicht erfolgreich ist, und Sie Version 18 oder höher verwenden, können Sie sqlcmd die Option
-No
hinzufügen, um anzugeben, dass die Verschlüsselung optional und nicht obligatorisch ist.sudo sqlcmd -S <ip_address>,1433 -U <userid> -P "<YourNewStrong@Passw0rd>"
sqlcmd -S <ip_address>,1433 -U <userid> -P "<YourNewStrong@Passw0rd>"
sqlcmd -S <ip_address>,1433 -U <userid> -P "<YourNewStrong@Passw0rd>"
Führen Sie Transact-SQL-Befehle aus. Wenn Sie fertig sind, geben Sie
QUIT
ein.
Für eine Verbindung mit SQL Server werden häufig auch folgende Tools verwendet:
- SQL Server-Erweiterung für Visual Studio Code
- Verwenden von SQL Server Management Studio unter Windows zum Verwalten von SQL Server für Linux
- Was ist Azure Data Studio?
- mssql-cli (Vorschauversion)
- Verwalten von SQL Server für Linux mit PowerShell Core
Entfernen Ihres Containers
Wenn Sie den in diesem Tutorial verwendeten SQL Server-Container entfernen möchten, führen Sie die folgenden Befehle aus:
docker stop sql1
docker rm sql1
docker stop sql1
docker rm sql1
docker stop sql1
docker rm sql1
Docker-Demo
Nachdem Sie nun das SQL Server Linux-Containerimage für Docker fertig benutzt haben, sollten Sie auch wissen, welche Vorteile Ihnen Docker beim Entwickeln und Testen bringt. Im folgenden Video sehen Sie, wie sich Docker in einem Continuous Integration-Szenario bzw. einem Continuous Deployment-Szenario verwenden lässt.
Zugehörige Aufgaben
Zugehöriger Inhalt
- Wiederherstellen einer SQL Server-Datenbank in einem Linux-Container
- Problembehandlung von SQL Server-Docker-Containern
- mssql-docker GitHub-Repository
Zur SQL-Dokumentation beitragen
Wussten Sie schon, dass Sie SQL-Inhalte selbst bearbeiten könnten? Hierdurch helfen Sie nicht nur mit, unsere Dokumentation zu verbessern, sondern Sie werden auch als Mitwirkender an der Seite aufgeführt.
Weitere Informationen finden Sie unter Mitwirken an der SQL Server-Dokumentation.