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.

Tipp

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.

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.

Tipp

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 (16.x) unter Linux.

Tipp

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.

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

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.

Hinweis

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

Tipp

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

Hinweis

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

  1. 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
    
  2. Wenn in der Spalte STATUSUp (Aktiv) eingetragen ist, wird SQL Server im Container ausgeführt und überwacht den Port, der in der Spalte PORTS angegeben ist. Wenn in der Spalte STATUS Ihres SQL Server-Containers Exited 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.

  3. Ändern Sie als letzten Schritt das Systemadministratorkennwort in eine Produktionsumgebung, da das MSSQL_SA_PASSWORD in der ps -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.

Hinweis

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.

sudo 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

Tipp

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.

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:2019-latest

Hinweis

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

  1. 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:2019-latest   "/opt/mssql/bin/perm..."   2 minutes ago   Up 2 minutes   0.0.0.0:1433->1433/tcp, :::1433->1433/tcp   sql1
    
  2. Wenn in der Spalte STATUSUp (Aktiv) eingetragen ist, wird SQL Server im Container ausgeführt und überwacht den Port, der in der Spalte PORTS angegeben ist. Wenn in der Spalte STATUS Ihres SQL Server-Containers Exited 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.

  3. Ändern Sie als letzten Schritt das Systemadministratorkennwort in eine Produktionsumgebung, da das MSSQL_SA_PASSWORD in der ps -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.

Hinweis

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.

sudo 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

Tipp

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.

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:2022-latest

Hinweis

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.

  1. Wählen Sie ein sicheres Kennwort für den SA-Benutzer aus.

  2. 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.

    sudo docker exec -it sql1 /opt/mssql-tools/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-tools/bin/sqlcmd `
       -S localhost -U SA -P "<YourStrong@Passw0rd>" `
       -Q "ALTER LOGIN SA WITH PASSWORD='<YourNewStrong@Passw0rd>'"
    
    docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd `
       -S localhost -U SA -P "<YourStrong@Passw0rd>" `
       -Q "ALTER LOGIN SA WITH PASSWORD='<YourNewStrong@Passw0rd>'"
    

    Hinweis

    Neuere 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.

  1. Erstellen Sie eine neue Anmeldung und machen Sie diese zu einem Mitglied der Serverrolle SysAdmin.

  2. Stellen Sie mit der neu erstellten Anmeldung eine Verbindung zur SQL Server-Instanz her.

  3. Deaktivieren Sie das sa-Konto, wie es die bewährte Sicherheitspraxis empfiehlt.

Liste der Container anzeigen

  1. 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:2022-latest   "/opt/mssql/bin/perm..."   2 minutes ago   Up 2 minutes   0.0.0.0:1433->1433/tcp, :::1433->1433/tcp   sql1
    
  2. Wenn in der Spalte STATUSUp (Aktiv) eingetragen ist, wird SQL Server im Container ausgeführt und überwacht den Port, der in der Spalte PORTS angegeben ist. Wenn in der Spalte STATUS Ihres SQL Server-Containers Exited 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.

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.

  1. Verwenden Sie den Befehl docker exec -it, um in Ihrem laufenden Container eine interaktive Bash-Shell zu starten. Im folgenden Beispiel steht sql1 für den Namen, den Sie bei der Erstellung des Containers mit dem Parameter --name angegeben haben.

    sudo docker exec -it sql1 "bash"
    
    docker exec -it sql1 "bash"
    
    docker exec -it sql1 "bash"
    
  2. Stellen Sie innerhalb des Containers eine lokale Verbindung mit sqlcmd her, indem Sie den vollständigen Pfad verwenden.

    sudo /opt/mssql-tools/bin/sqlcmd -S localhost -U <userid> -P "<YourNewStrong@Passw0rd>"
    

    Hinweis

    Neuere 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:

    sudo /opt/mssql-tools/bin/sqlcmd -S localhost -U <userid>
    
  3. 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.

  1. Fügen Sie aus der sqlcmd-Eingabeaufforderung den folgenden Transact-SQL-Befehl zur Erstellung einer Testdatenbank ein:

    CREATE DATABASE TestDB;
    
  2. 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;
    
  3. 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.

  1. Wechseln Sie den Kontext aus der sqlcmd-Eingabeaufforderung zur neuen TestDB-Datenbank:

    USE TestDB;
    
  2. Erstellen Sie eine neue Tabelle mit dem Namen Inventory:

    CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT);
    
  3. Fügen Sie Daten in die neue Tabelle ein:

    INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);
    
  4. 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.

  1. 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;
    
  2. Führen Sie den folgenden Befehl aus:

    GO
    

Beenden der sqlcmd-Eingabeaufforderung

  1. Zum Beenden der sqlcmd-Sitzung, geben Sie QUIT ein:

    QUIT
    
  2. 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.

  1. Suchen Sie die IP-Adresse für den Hostcomputer Ihres Containers mithilfe von ifconfig oder ip addr.

  2. 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.

  3. 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.

    Hinweis

    Neuere 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>"
    
  4. 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:

Entfernen Ihres Containers

Wenn Sie den in diesem Tutorial verwendeten SQL Server-Container entfernen möchten, führen Sie die folgenden Befehle aus:

sudo docker stop sql1
sudo docker rm sql1
docker stop sql1
docker rm sql1
docker stop sql1
docker rm sql1

Warnung

Wenn Sie einen Container beenden oder entfernen, werden die SQL Server-Daten dauerhaft aus diesem Container gelöscht. Wenn Sie Ihre Daten weiterhin benötigen, erstellen Sie eine Sicherungskopie des Containers, oder nutzen Sie für die Containerdaten eine Methode zur Datenpersistenz.

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.

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.