Bereitstellen von und Herstellen einer Verbindung mit SQL Server Docker-Containern

Gilt für:yes SQL Server (alle unterstützten Versionen) – Linux

In diesem Artikel wird erläutert, wie Sie SQL Server Docker-Container bereitstellen und eine Verbindung damit herstellen.

Informationen zu weiteren Bereitstellungsszenarios finden Sie unter:

Hinweis

Dieser Artikel konzentriert sich speziell auf die Verwendung des Mssql-Server-Linux-Images . 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

Um die Docker-Containerimages für SQL Server 2017 (14.x) und SQL Server 2019 (15.x) zu pullen und auszuführen, führen Sie die Voraussetzungen und Schritte in der folgenden Schnellstartanleitung aus:

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 Docker-Computer 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 Docker-Container ausgeführt wird. Die IP-Adresse in der Verbindungszeichenfolge ist die IP-Adresse des Hostcomputers, auf dem der Container ausgeführt wird.

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 einen Hostport zugeordnet haben, der nicht der Standardport 1433 war, fügen Sie diesen Port der Verbindungszeichenfolge hinzu. Wenn Sie beispielsweise in Ihrem docker run Befehl angegeben -p 1400:1433 haben, stellen Sie eine Verbindung her, indem Sie port 1400 explizit 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-tools/bin/sqlcmd -S localhost -U SA -P '<YourPassword>'
    
  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

Wenn Sie die Version von SQL Server in einem ausgeführten Docker-Container kennen möchten, führen Sie den folgenden Befehl aus, um ihn anzuzeigen. Ersetzen Sie <Container ID or name> durch die Zielcontainer-ID oder den Namen. Ersetzen Sie durch <YourStrong!Passw0rd> das SQL Server Kennwort für das Systemadministratorkonto.

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

Sie können auch die SQL Server Version und Buildnummer für ein Docker-Zielcontainerimage identifizieren. Der folgende Befehl zeigt die SQL Server Version und Buildinformationen für das mcr.microsoft.com/mssql/server:2019-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:2019-latest && \
sudo docker rm sqlver
docker run -e PAL_PROGRAM_INFO=1 --name sqlver `
-ti mcr.microsoft.com/mssql/server:2019-latest; `
docker rm sqlver
docker run -e PAL_PROGRAM_INFO=1 --name sqlver ^
-ti mcr.microsoft.com/mssql/server:2019-latest && ^
docker rm sqlver

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

sqlservr
  Version 15.0.4198.2
  Build ID 52e9e8d493d41fd93627371c4c7d3e2a6b52a65f47f07c8c737931a208c45824
  Build Type release
  Git Version d6f11919
  Built at Sat Jan 22 05:09:51 GMT 2022

PAL
  Build ID 2d0b057b139c49b6933e896f56af464a2893fd9aa3da2e2a709d5fc220cb0225
  Build Type release
  Git Version 52a534725
  Built at Sat Jan 22 05:07:25 GMT 2022

Packages
  system.security                         6.2.9200.11,52a534725+hls-win4-20220122044858,
  system.certificates                     6.2.9200.11,52a534725+hls-win4-20220122044858,
  secforwarderxplat                       15.0.4198.2
  sqlservr                                15.0.4198.2
  system.common                           10.0.17134.2145.202104262
  system.netfx                            4.7.0.0.202104262
  system                                  6.2.9200.11,52a534725+hls-win4-20220122044858,
  sqlagent                                15.0.4198.2

Ausführen eines bestimmten SQL Server-Containerimages

Hinweis

  • Ab SQL Server 2019 (15.x) CU3 wird Ubuntu 18.04 unterstützt.
  • Ab SQL Server 2019 (15.x) CU10 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 Docker-Tag für das Release, das Sie verwenden möchten. Die verfügbaren Tags finden Sie auf der Docker Hub-Seite zu „mssql-server-linux“.

  2. Laden Sie das SQL Server-Containerimage mit diesem Tag herunter. Um beispielsweise das Image 2019-CU15-ubuntu-20.04 zu pullen, ersetzen Sie im folgenden Befehl durch 2019-CU15-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.

    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. Beispielsweise können Sie ein Rollback oder Downgrade für einen ausgeführten Container ausführen, um Probleme zu beheben oder zu testen. 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 Container verwenden, die auf Red Hat Enterprise Linux (RHEL) basieren. Ein Beispiel für das Image für RHEL sieht wie mcr.microsoft.com/mssql/rhel/server:2019-CU15-rhel-8 aus.

Mit dem folgenden Befehl wird beispielsweise der Container für das kumulative Update 15 für SQL Server 2019 (15.x) abgerufen, der RHEL 8 verwendet:

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

Ausführen von Produktionscontainerimages

Im Schnellstart im vorherigen Abschnitt wird die kostenlose Developer Edition von SQL Server über Docker Hub 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. Führen Sie Folgendes durch, um Produktionseditionen auszuführen:

Machen Sie sich im Schnellstart mit den Voraussetzungen vertraut, und führen Sie die dort aufgeführten Befehle aus. Sie müssen Ihre Produktionsedition mit der Umgebungsvariable MSSQL_PID angeben. Das folgende Beispiel zeigt, wie sie das neueste Containerimage SQL Server 2019 (15.x) für die Enterprise Edition ausführen:

docker run --name sqlenterprise \
-e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=<YourStrong!Passw0rd>' \
-e 'MSSQL_PID=Enterprise' -p 1433:1433 \
-d mcr.microsoft.com/mssql/server:2019-latest
docker run --name sqlenterprise `
-e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong!Passw0rd>" `
-e "MSSQL_PID=Enterprise" -p 1433:1433 `
-d "mcr.microsoft.com/mssql/server:2019-latest"
docker run --name sqlenterprise `
-e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong!Passw0rd>" ^
-e "MSSQL_PID=Enterprise" -p 1433:1433 ^
-d "mcr.microsoft.com/mssql/server:2019-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 Docker-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 container SQL Server 2017 (14.x) erstellt und den Ports 1401 und 1402 auf dem Hostcomputer zu zuordnungen.

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 Container SQL Server 2019 (15.x) erstellt und den Ports 1401 und 1402 auf dem Hostcomputer zu zuordnungen.

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

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 Docker-Hosts und die Portnummer für den Container verwenden.

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 für alle neuen Container aktualisiert, die Sie erstellen, aber es werden keine SQL Server 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.

Nächste Schritte