Bereitstellen von und Herstellen einer Verbindung mit SQL Server in Linux-Containern

Gilt für:SQL Server – Linux

In diesem Artikel werden das Bereitstellen von und das Herstellen einer Verbindung mit SQL Server in Linux-Containern beschrieben.

Informationen zu weiteren Bereitstellungsszenarios finden Sie unter:

Hinweis

In diesem Artikel liegt der Fokus auf dem mssql-server-linux-Image. SQL Server-Bereitstellungen in Windows-Containern werden vom Support nicht unterstützt. Für Entwicklungs- und Testzwecke können Sie eigene benutzerdefinierte Containerimages erstellen, um mit SQL Server in Windows-Containern zu arbeiten. Beispieldateien finden Sie auf GitHub. Beispieldateien dienen nur zur Referenz.

Wichtig

Bevor Sie sich für die Ausführung eines SQL Server-Containers für Anwendungsfälle in der Produktion entscheiden, lesen Sie unsere Richtlinie zur Unterstützung von SQL Server-Containern, um sicherzustellen, dass Sie mit einer unterstützten Konfiguration arbeiten.

Dieses 6-minütige Video enthält eine Einführung in die Ausführung von SQL Server in Containern:

Übertragen mithilfe von Pull und Ausführen von Containerimages

Wenn Sie Docker-Containerimages für SQL Server herunterladen und ausführen möchten, sollten Sie zunächst die im folgenden Schnellstart beschriebenen Voraussetzungen schaffen und die Schritte ausführen:

In diesem Artikel zur Konfiguration werden zusätzliche Anwendungsfälle beschrieben.

Herstellen einer Verbindung und Ausführen von Abfragen

Sie können von innerhalb oder außerhalb des Containers eine Verbindung mit einer SQL Server-Instanz herstellen, die in einem Container ausgeführt wird, und Abfragen an diese senden. In den folgenden Abschnitten werden beide Szenarios erläutert.

Tools außerhalb des Containers

Sie können über jedes externe Linux-, Windows- oder macOS-Tool, das SQL-Verbindungen unterstützt, eine Verbindung mit der SQL Server-Instanz auf Ihrem Containerhost herstellen. Folgende Tools werden häufig verwendet:

Im folgenden Beispiel wird sqlcmd verwendet, um eine Verbindung mit einer SQL Server-Instanz herzustellen, die in einem Container ausgeführt wird. Die IP-Adresse in der Verbindungszeichenfolge ist die IP-Adresse des Hostcomputers, auf dem der Container ausgeführt wird.

Hinweis

Neuere Versionen von sqlcmd (in mssql-tools18) sind standardmäßig sicher. Wenn Sie Version 18 oder höher verwenden, müssen Sie Nosqlcmd die Option hinzufügen, um anzugeben, dass die Verschlüsselung optional und nicht obligatorisch ist.

sqlcmd -S 10.3.2.4 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4 -U SA -P "<YourPassword>"

Wenn Sie eine Hostport zugeordnet haben, der nicht dem Standardport 1433 entspricht, fügen Sie diesen Port der Verbindungszeichenfolge hinzu. Wenn Sie beispielsweise -p 1400:1433 in Ihrem docker run-Befehl angegeben haben, stellen Sie die Verbindung her, indem Sie explizit Port 1400 angeben.

sqlcmd -S 10.3.2.4,1400 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4,1400 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1400 -U SA -P "<YourPassword>"

Tools innerhalb des Containers

Ab SQL Server 2017 (14.x) sind die SQL Server-Befehlszeilentools im Containerimage enthalten. Wenn Sie diese mit einer interaktiven Befehlszeile an das Image anfügen, können Sie die Tools lokal ausführen.

  1. Verwenden Sie den Befehl docker exec -it, um in Ihrem laufenden Container eine interaktive Bash-Shell zu starten. Im folgenden Beispiel entspricht e69e056c702d der Container-ID.

    docker exec -it e69e056c702d "bash"
    

    Tipp

    Sie müssen nicht immer die gesamte Container-ID angeben. Sie müssen nur ausreichend Zeichen angeben, um diese eindeutig zu identifizieren. In diesem Beispiel reicht es ggf. aus, e6 oder e69 anstelle der vollständigen ID zu verwenden. Führen Sie den Befehl docker ps -a aus, um die Container-ID zu ermitteln.

  2. 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 SA -P '<YourPassword>'
    

    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.

  3. Wenn Sie mit sqlcmd fertig sind, geben Sie exit ein.

  4. Wenn Sie mit der interaktiven Eingabeaufforderung fertig sind, geben Sie exit ein. Der Container wird auch nach dem Beenden der interaktiven Bash-Shell weiter ausgeführt.

Überprüfen der Containerversion

Führen Sie den folgenden Befehl aus, um die SQL Server-Version in einem ausgeführten Container zu ermitteln. Ersetzen Sie <Container ID or name> durch die Zielcontainer-ID oder den Namen. Ersetzen Sie <YourStrong!Passw0rd> durch das SQL Server-Kennwort für das Systemadministratorkonto (SA) an.

sudo docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P '<YourStrong!Passw0rd>' \
-Q 'SELECT @@VERSION'

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.

docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd `
-S localhost -U SA -P "<YourStrong!Passw0rd>" `
-Q "SELECT @@VERSION"

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.

docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd ^
-S localhost -U SA -P "<YourStrong!Passw0rd>" ^
-Q "SELECT @@VERSION"

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 auch die SQL Server-Version und die Buildnummer für ein Zielcontainerimage ermitteln. Der folgende Befehl zeigt die SQL Server-Version und die Buildinformationen für das mcr.microsoft.com/mssql/server:2022-latest-Image an. Hierfür wird ein neuer Container mit der Umgebungsvariable PAL_PROGRAM_INFO=1 ausgeführt. Der daraus resultierende Container wird sofort beendet und durch den Befehl docker rm entfernt.

sudo docker run -e PAL_PROGRAM_INFO=1 --name sqlver \
-ti mcr.microsoft.com/mssql/server:2022-latest && \
sudo docker rm sqlver
docker run -e PAL_PROGRAM_INFO=1 --name sqlver `
-ti mcr.microsoft.com/mssql/server:2022-latest; `
docker rm sqlver
docker run -e PAL_PROGRAM_INFO=1 --name sqlver ^
-ti mcr.microsoft.com/mssql/server:2022-latest && ^
docker rm sqlver

In den vorherigen Befehlen werden Versionsinformationen angezeigt, die der folgenden Ausgabe ähneln:

sqlservr
  Version 16.0.1000.6
  Build ID d81e9b6de06534e649bd57dd609aa3050f5e380f361b7f8a80a80eeb71e7422c
  Build Type release
  Git Version 2aede92f
  Built at Tue Nov 01 06:11:40 GMT 2022

PAL
  Build ID 754097e8f0db68f559e1cbc9d46952ac9fd518b5da9f12964ef40fc9033720e3
  Build Type release
  Git Version d88e3e1130
  Built at Tue Nov 01 06:08:02 GMT 2022

Packages
  system.security                         mssql-16.0.1000.6_26_official-release
  system.certificates                     mssql-16.0.1000.6_26_official-release
  sqlagent                                16.0.1000.6
  system.wmi                              10.0.17763.2061.202107231
  system.netfx                            4.7.0.0.202104262
  system                                  mssql-16.0.1000.6_26_official-release
  system.common                           10.0.17763.2061.202107231
  sqlservr                                16.0.1000.6
  secforwarderxplat                       16.0.1000.6

Ausführen eines bestimmten SQL Server-Containerimages

Hinweis

  • Ab dem kumulativen Update 3 (CU3) von SQL Server 2019 (15.x) wird Ubuntu 18.04 unterstützt.
  • Ab dem kumulativen Update 10 (CU10) von SQL Server 2019 (15.x) wird Ubuntu 20.04 unterstützt.
  • Sie können eine Liste aller verfügbaren Tags für mssql/server unter https://mcr.microsoft.com/v2/mssql/server/tags/list abrufen.

In manchen Fällen möchten Sie nicht das neueste SQL Server-Containerimage verwenden. Mithilfe der folgenden Schritte können Sie ein bestimmtes SQL Server-Containerimage ausführen:

  1. Ermitteln Sie das tag für das Release, das Sie verwenden möchten. Zur Anzeige der verfügbaren Tags finden Sie in der Microsoft-Artefaktregistrierung.

  2. Laden Sie das SQL Server-Containerimage mit diesem Tag herunter. Wenn Sie z. B. das 2019-CU18-ubuntu-20.04-Image herunterladen möchten, ersetzen Sie <image_tag> im folgenden Befehl durch 2019-CU18-ubuntu-20.04.

    docker pull mcr.microsoft.com/mssql/server:<image_tag>
    
  3. Wenn Sie einen neuen Container mit diesem Image ausführen möchten, geben Sie den Tagnamen im Befehl docker run an. Ersetzen Sie im folgenden Befehl <image_tag> durch die Version, die Sie ausführen möchten.

    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 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
    

Diese Schritte können auch zum Herabstufen eines vorhandenen Containers verwendet werden. Sie können beispielsweise einen Rollback oder ein Downgrade für einen Container ausführen, um Probleme zu beheben oder Tests durchzuführen. Zum Herabstufen eines ausgeführten Containers müssen Sie eine Persistenzmethode für den Datenordner verwenden. Führen Sie die Schritte durch, die im Abschnitt zu Upgrades beschrieben werden, aber geben Sie den Tagnamen der älteren Version an, wenn Sie den neuen Container ausführen.

Ausführen von RHEL-basierten Containerimages

Die Dokumentation für SQL Server-Containerimages für Linux bezieht sich auf Ubuntu-basierte Container. Ab SQL Server 2019 (15.x) können Sie auch RHEL-basierte Container (Red Hat Enterprise Linux) verwenden. Ein Beispiel für das Image für RHEL sieht wie folgt aus: mcr.microsoft.com/mssql/rhel/server:2019-CU15-rhel-8.

Der folgende Befehl ruft beispielsweise das kumulative Update 18 für Container mit SQL Server 2019 (15.x) ab, für das RHEL 8 verwendet wird:

sudo docker pull mcr.microsoft.com/mssql/rhel/server:2019-CU18-rhel-8.4
docker pull mcr.microsoft.com/mssql/rhel/server:2019-CU18-rhel-8.4
docker pull mcr.microsoft.com/mssql/rhel/server:2019-CU18-rhel-8.4

Ausführen von Produktionscontainerimages

Im Schnellstart im vorherigen Abschnitt wird die kostenlose Developer Edition von SQL Server über die Microsoft-Artefaktregistrierung ausgeführt. Die meisten Angaben gelten weiterhin, wenn Sie Produktionscontainerimages wie für die Enterprise-, Standard- und Web-Edition ausführen möchten. Es gibt jedoch einige Unterschiede, die im Folgenden erläutert werden.

  • Sie können SQL Server nur in einer Produktionsumgebung verwenden, wenn Sie über eine gültige Lizenz verfügen. Sie können eine kostenlose SQL Server Express-Lizenz für die Produktion erwerben. Lizenzen für SQL Server Standard und SQL Server Enterprise sind über die Microsoft-Volumenlizenzierung verfügbar.

  • Das Developer-Containerimage kann so konfiguriert werden, dass auch die Produktionseditionen ausgeführt werden können.

Wenn Sie eine Produktionsedition ausführen möchten, sehen Sie sich die Anforderungen an, und führen Sie die Schritte im Schnellstart aus. Sie müssen Ihre Produktionsedition mit der Umgebungsvariable MSSQL_PID angeben. Im folgenden Beispiel wird die Ausführung des neuesten Containerimage mit SQL Server 2022 (16.x) für die Enterprise Core Edition veranschaulicht.

docker run --name sqlenterprise \
-e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
-e 'MSSQL_PID=EnterpriseCore' -p 1433:1433 \
-d mcr.microsoft.com/mssql/server:2022-latest
docker run --name sqlenterprise `
-e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
-e "MSSQL_PID=EnterpriseCore" -p 1433:1433 `
-d "mcr.microsoft.com/mssql/server:2022-latest"
docker run --name sqlenterprise ^
-e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" ^
-e "MSSQL_PID=EnterpriseCore" -p 1433:1433 ^
-d "mcr.microsoft.com/mssql/server:2022-latest"

Wichtig

Indem Sie den Wert Y an die Umgebungsvariable ACCEPT_EULA und einen Editionswert an MSSQL_PID übergeben, bestätigen Sie, dass Sie eine gültige und vorhandene Lizenz für die Edition und Version von SQL Server besitzen, die Sie verwenden möchten. Außerdem stimmen Sie den Nutzungsbedingungen für Ihre SQL Server-Lizenz zu, die für die Verwendung von SQL Server-Software gilt, die in einem Containerimage ausgeführt wird.

Hinweis

Eine vollständige Liste der möglichen Werte für MSSQL_PID finden Sie unter Konfigurieren von SQL Server-Einstellungen mit Umgebungsvariablen unter Linux.

Ausführen mehrerer SQL Server-Container

Docker ermöglicht die Ausführung mehrerer SQL Server-Container auf demselben Hostcomputer. Verwenden Sie diesen Ansatz, wenn mehrere SQL Server-Instanzen auf demselben Host benötigt werden. Jeder Container muss sich an einem anderen Port verfügbar machen.

Im folgenden Beispiel werden zwei SQL Server 2017-Container (14.x) erstellt und den Ports 1401 und 1402 auf dem Hostcomputer zugeordnet.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest

Im folgenden Beispiel werden zwei SQL Server 2019-Container (15.x) erstellt und den Ports 1401 und 1402 auf dem Hostcomputer zugeordnet.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-latest

Im folgenden Beispiel werden zwei Container mit SQL Server 2022 (16.x) erstellt und den Ports 1401 und 1402 auf dem Hostcomputer zugeordnet.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2022-latest

Nun gibt es zwei Instanzen von SQL Server, die in separaten Containern ausgeführt werden. Clients können eine Verbindung mit der jeweiligen SQL Server-Instanz herstellen, indem sie die IP-Adresse des Containerhosts und die Portnummer für den Container verwenden.

Hinweis

Neuere Versionen von sqlcmd (in mssql-tools18) sind standardmäßig sicher. Wenn Sie Version 18 oder höher verwenden, müssen Sie Nosqlcmd die Option hinzufügen, um anzugeben, dass die Verschlüsselung optional und nicht obligatorisch ist.

sqlcmd -S 10.3.2.4,1401 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4,1402 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4,1401 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1402 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1401 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1402 -U SA -P "<YourPassword>"

Aktualisieren von SQL Server in Containern

Wenn Sie das Containerimage mit Docker aktualisieren möchten, müssen Sie zunächst das Tag für das Release des Upgrades ermitteln. Rufen Sie diese Version mit dem Befehl docker pull aus der Registrierung ab:

docker pull mcr.microsoft.com/mssql/server:<image_tag>

Dadurch wird das SQL Server-Image für neu erstellte Container aktualisiert. SQL Server wird jedoch nicht in ausgeführten Containern aktualisiert. Zu diesem Zweck müssen Sie einen neuen Container mit dem neuesten SQL Server-Containerimage erstellen und die Daten in diesen neuen Container migrieren.

  1. Stellen Sie sicher, dass Sie eine der Datenpersistenzmethoden für Ihren vorhandenen SQL Server-Container verwenden. So können Sie einen neuen Container mit den gleichen Daten starten.

  2. Halten Sie den SQL Server-Container mit dem Befehl docker stop an.

  3. Erstellen Sie mit docker run einen neuen SQL Server-Container, und geben Sie entweder ein zugeordnetes Hostverzeichnis oder einen Datenvolumecontainer an. Verwenden Sie das jeweilige Tag für Ihr SQL Server-Upgrade. Der neue Container verwendet nun eine neue Version von SQL Server mit Ihren vorhandenen SQL Server-Daten.

    Wichtig

    Upgrades werden derzeit nur zwischen RC1, RC2 und der allgemein verfügbaren Version unterstützt.

  4. Überprüfen Sie Ihre Datenbanken und Daten im neuen Container.

  5. Entfernen Sie den alten Container optional mit docker rm.

  • Der Schnellstart erleichtert Ihnen den Einstieg in die Verwendung von SQL Server 2017-Containerimages (14.x) in Docker.
  • Der Schnellstart erleichtert Ihnen den Einstieg in die Verwendung von SQL Server 2019-Containerimages (15.x) in Docker.
  • Der Schnellstart vereinfacht Ihnen den Einstieg in die Verwendung von Containerimages in SQL Server 2022 (16.x) in Docker.

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.