Schnellstart: Ausführen von SQL Server Linux-Containerimages mit Docker

Gilt für:yesSQL Server (alle unterstützten Versionen) – 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 SQL Server 2019 (15.x) oder SQL Server 2022 (16.x) Preview 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 SQL Server 2017 (14.x) oder SQL Server 2022 (16.x) Preview dieses Artikels.

In diesem Schnellstart wird Docker verwendet, um das SQL Server 2022 (16.x) Preview 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) Preview unter Linux.

Tipp

In dieser Schnellstartanleitung werden Container von SQL Server 2022 (16.x) Preview 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 20.04). 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.

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.

  1. 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 SQL Server 2019 (15.x) oder SQL Server 2022 (16.x) Preview 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 Images finden Sie auf der Docker-Hubseite zu „mssql-server“.

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

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

    sudo docker run -e "ACCEPT_EULA=Y" -e "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 "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 "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 "SA_PASSWORD=<YourStrong@Passw0rd>" Geben Sie ein starkes Kennwort ein, das aus mindestens acht Zeichen besteht und den Kennwortanforderungen von SQL Server entspricht. Diese Einstellung ist für das SQL Server-Image zwingend erforderlich.
    -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.
  3. 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 in etwa wie folgt aussehen:

    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
    
  4. 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 (Beendet) steht, lesen Sie bitte im Abschnitt „Problembehebung“ im Konfigurationshandbuch nach. 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 oben 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.

  5. Ändern Sie als letzten Schritt das Systemadministratorkennwort, da das SA_PASSWORD in der ps -eax-Ausgabe sichtbar und in der Umgebungsvariablen mit dem gleichen Namen gespeichert ist. Weitere Informationen finden Sie nachfolgend.

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.

  1. 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 SQL Server 2017 (14.x) oder SQL Server 2022 (16.x) Preview 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 Images finden Sie auf der Docker-Hubseite zu „mssql-server“.

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

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

    sudo docker run -e "ACCEPT_EULA=Y" -e "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 "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 "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 "SA_PASSWORD=<YourStrong@Passw0rd>" Geben Sie ein starkes Kennwort ein, das aus mindestens acht Zeichen besteht und den Kennwortanforderungen von SQL Server entspricht. Diese Einstellung ist für das SQL Server-Image zwingend erforderlich.
    -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.
  3. 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 in etwa wie folgt aussehen:

    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
    
  4. 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 (Beendet) steht, lesen Sie bitte im Abschnitt „Problembehebung“ im Konfigurationshandbuch nach. 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 oben 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.

  5. Ändern Sie als letzten Schritt das Systemadministratorkennwort, da das SA_PASSWORD in der ps -eax-Ausgabe sichtbar und in der Umgebungsvariablen mit dem gleichen Namen gespeichert ist. Weitere Informationen finden Sie nachfolgend.

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.

  1. Pullen Sie das Linux-Containerimage von SQL Server 2022 (16.x) Preview 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 dieser Schnellstartanleitung werden Container von SQL Server 2022 (16.x) Preview 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) Preview 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 Images finden Sie auf der Docker-Hubseite zu „mssql-server“.

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

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

    sudo docker run -e "ACCEPT_EULA=Y" -e "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 "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 "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 "SA_PASSWORD=<YourStrong@Passw0rd>" Geben Sie ein starkes Kennwort ein, das aus mindestens acht Zeichen besteht und den Kennwortanforderungen von SQL Server entspricht. Diese Einstellung ist für das SQL Server-Image zwingend erforderlich.
    -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.
  3. 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 in etwa wie folgt aussehen:

    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
    
  4. 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 (Beendet) steht, lesen Sie bitte im Abschnitt „Problembehebung“ im Konfigurationshandbuch nach. 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 oben 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.

  5. Ändern Sie als letzten Schritt das Systemadministratorkennwort, da das SA_PASSWORD in der ps -eax-Ausgabe sichtbar und in der Umgebungsvariablen mit dem gleichen Namen gespeichert ist. Weitere Informationen finden Sie nachfolgend.

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 SA_PASSWORD ermitteln, indem Sie echo $SA_PASSWORD im Container ausführen. Ändern Sie aus Sicherheitsgründen ihr SA-Kennwort.

  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}")\""
    
  1. Wählen Sie ein sicheres Kennwort für den SA-Benutzer aus.

  2. Ersetzen Sie im folgenden Beispiel das alte Kennwort, <YourStrong@Passw0rd>, und das neue Kennwort, <YourNewStrong@Passw0rd>, durch Ihre eigenen Kennwortwerte.

    docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd `
       -S localhost -U SA -P "<YourStrong@Passw0rd>" `
       -Q "ALTER LOGIN SA WITH PASSWORD='<YourNewStrong@Passw0rd>'"
    
  1. Wählen Sie ein sicheres Kennwort für den SA-Benutzer aus.

  2. Ersetzen Sie im folgenden Beispiel das alte Kennwort, <YourStrong@Passw0rd>, und das neue Kennwort, <YourNewStrong@Passw0rd>, durch Ihre eigenen Kennwortwerte.

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

Verbindung mit SQL Server herstellen

In den folgenden Schritten wird im Container das SQL Server-Befehlszeilentool sqlcmd genutzt, um eine Verbindung mit 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.

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

    Tipp

    Sie können das Kennwort in der Befehlszeile auslassen, damit Sie aufgefordert werden, es einzugeben.

  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.

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 Installieren von sqlcmd unter Windows oder unter Installieren von sqlcmd 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.

    sqlcmd -S <ip_address>,1433 -U SA -P "<YourNewStrong@Passw0rd>"
    
    sqlcmd -S <ip_address>,1433 -U SA -P "<YourNewStrong@Passw0rd>"
    
    sqlcmd -S <ip_address>,1433 -U SA -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 getestet 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.

Nächste Schritte

Ressourcen, Feedback und Informationen über bekannte Probleme finden Sie im GitHub-Repository „mssql-docker“.