Udostępnij za pośrednictwem


Wdrażanie kontenerów programu SQL Server z systemem Linux i nawiązywanie z nimi połączenia

Dotyczy:programu SQL Server — Linux

W tym artykule wyjaśniono, jak wdrożyć kontenery programu SQL Server z systemem Linux i nawiązać z nimi połączenie.

W przypadku innych scenariuszy wdrażania zobacz:

Notatka

W tym artykule skupiono się na używaniu obrazu mssql-server-linux. Wdrożenia programu SQL Server w kontenerach systemu Windows nie są objęte pomocą techniczną. Na potrzeby programowania i testowania możesz utworzyć własne niestandardowe obrazy kontenerów do pracy z programem SQL Server w kontenerach systemu Windows. Przykładowe pliki są dostępne w witrynie GitHub. Przykładowe pliki są przeznaczone tylko do celów referencyjnych.

Ważny

Przed podjęciem decyzji o uruchomieniu kontenera programu SQL Server dla przypadków użycia w środowisku produkcyjnym zapoznaj się z zasadami pomocy technicznej dla programu Microsoft SQL Server, aby upewnić się, że korzystasz z obsługiwanej konfiguracji.

Ten 6-minutowy film wideo zawiera wprowadzenie do uruchamiania programu SQL Server w kontenerach:

Ściąganie i uruchamianie obrazu kontenera

Aby ściągnąć i uruchomić obrazy kontenerów Docker dla programu SQL Server, spełnij wymagania wstępne i wykonaj kroki opisane w następującym przewodniku Szybki Start.

Ten artykuł konfiguracji zawiera dodatkowe scenariusze użycia w poniższych sekcjach.

Nawiązywanie połączenia i wykonywanie zapytań

Możesz nawiązać połączenie z programem SQL Server i wysyłać zapytania do programu SQL Server w kontenerze spoza kontenera lub z kontenera. W poniższych sekcjach opisano oba scenariusze.

Narzędzia spoza kontenera

Możesz nawiązać połączenie z wystąpieniem programu SQL Server na hoście kontenera z dowolnego zewnętrznego narzędzia systemu Linux, Windows lub macOS obsługującego połączenia SQL. Oto niektóre typowe narzędzia:

W poniższym przykładzie użyto sqlcmd do nawiązania połączenia z programem SQL Server uruchomionym w kontenerze. Adres IP w parametrach połączenia to adres IP maszyny hosta, na którym działa kontener.

Notatka

Nowsze wersje sqlcmd (w mssql-tools18) są domyślnie bezpieczne. W przypadku korzystania z wersji 18 lub nowszej należy dodać opcję No, aby sqlcmd określić, że szyfrowanie jest opcjonalne, a nie obowiązkowe.

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>"

Jeśli zamapujesz port hosta, który nie był domyślnym 1433, dodaj ten port do parametrów połączenia. Na przykład, jeśli określiłeś -p 1400:1433 w poleceniu docker run, to połącz się, jawnie określając port 1400.

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>"

Narzędzia wewnątrz kontenera

Począwszy od programu SQL Server 2017 (14.x), narzędzia wiersza polecenia programu SQL Server są uwzględnione w obrazie kontenera. Jeśli dołączysz do obrazu za pomocą interaktywnego wiersza polecenia, możesz uruchomić narzędzia lokalnie.

  1. Użyj polecenia docker exec -it, aby uruchomić interaktywną powłokę Bash wewnątrz uruchomionego kontenera. W poniższym przykładzie e69e056c702d jest identyfikatorem kontenera.

    docker exec -it e69e056c702d "bash"
    

    Napiwek

    Nie zawsze trzeba określać cały identyfikator kontenera. Wystarczy określić wystarczającą liczbę znaków, aby ją jednoznacznie zidentyfikować. W tym przykładzie może wystarczyć użycie e6 lub e69, a nie pełnego identyfikatora. Aby dowiedzieć się, jaki jest identyfikator kontenera, uruchom polecenie docker ps -a.

  2. Wewnątrz kontenera nawiąż połączenie lokalne z sqlcmd, używając jego pełnej ścieżki.

    /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P '<YourPassword>'
    

    Notatka

    Nowsze wersje sqlcmd są domyślnie bezpieczne. Aby uzyskać więcej informacji na temat szyfrowania połączeń, zobacz sqlcmd utility for Windows i Connecting with sqlcmd for Linux and macOS (Nawiązywanie połączenia za pomocą sqlcmd dla systemów Linux i macOS). Jeśli połączenie nie powiedzie się, możesz dodać opcję -No, aby sqlcmd określić, że szyfrowanie jest opcjonalne, a nie obowiązkowe.

  3. Po zakończeniu korzystania z sqlcmd, wpisz exit.

  4. Po zakończeniu pracy z interaktywnym wierszem polecenia wpisz exit. Kontener nadal działa po zamknięciu interaktywnej powłoki bash.

Sprawdzanie wersji kontenera

Jeśli chcesz znać wersję programu SQL Server w uruchomionym kontenerze, uruchom następujące polecenie, aby go wyświetlić. Zastąp <Container ID or name> identyfikatorem kontenera docelowego lub nazwą. Zastąp <password> hasłem programu SQL Server dla konta administratora systemu (sa).

docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd \
-S localhost -U sa -P '<password>' \
-Q 'SELECT @@VERSION'

Notatka

Nowsze wersje sqlcmd są domyślnie bezpieczne. Aby uzyskać więcej informacji na temat szyfrowania połączeń, zobacz sqlcmd utility for Windows i Connecting with sqlcmd for Linux and macOS (Nawiązywanie połączenia za pomocą sqlcmd dla systemów Linux i macOS). Jeśli połączenie nie powiedzie się, możesz dodać opcję -No, aby sqlcmd określić, że szyfrowanie jest opcjonalne, a nie obowiązkowe.

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

Notatka

Nowsze wersje sqlcmd są domyślnie bezpieczne. Aby uzyskać więcej informacji na temat szyfrowania połączeń, zobacz sqlcmd utility for Windows i Connecting with sqlcmd for Linux and macOS (Nawiązywanie połączenia za pomocą sqlcmd dla systemów Linux i macOS). Jeśli połączenie nie powiedzie się, możesz dodać opcję -No, aby sqlcmd określić, że szyfrowanie jest opcjonalne, a nie obowiązkowe.

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

Uwaga

Nowsze wersje sqlcmd są domyślnie bezpieczne. Aby uzyskać więcej informacji na temat szyfrowania połączeń, zobacz sqlcmd utility for Windows i Connecting with sqlcmd for Linux and macOS (Nawiązywanie połączenia za pomocą sqlcmd dla systemów Linux i macOS). Jeśli połączenie nie powiedzie się, możesz dodać opcję -No, aby sqlcmd określić, że szyfrowanie jest opcjonalne, a nie obowiązkowe.

Można również zidentyfikować wersję i numer kompilacji programu SQL Server dla docelowego obrazu kontenera. Następujące polecenie wyświetla informacje o wersji programu SQL Server i kompilacji dla obrazu mcr.microsoft.com/mssql/server:2022-latest. Robi to, uruchamiając nowy kontener ze zmienną środowiskową PAL_PROGRAM_INFO=1. Wynikowy kontener natychmiast kończy działanie, a polecenie docker rm je usuwa.

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
docker run -e PAL_PROGRAM_INFO=1 --name sqlver ^
-ti mcr.microsoft.com/mssql/server:2022-latest && ^
docker rm sqlver

Poprzednie polecenia wyświetlają informacje o wersji podobne do następujących danych wyjściowych:

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

Uruchamianie określonego obrazu kontenera programu SQL Server

Notatka

  • Począwszy od programu SQL Server 2019 (15.x) CU3, obsługiwany jest system Ubuntu 18.04.
  • Począwszy od programu SQL Server 2019 (15.x) CU10, obsługiwany jest system Ubuntu 20.04.
  • Listę wszystkich dostępnych tagów programu mssql/server można pobrać pod adresem https://mcr.microsoft.com/v2/mssql/server/tags/list.

Istnieją scenariusze, w których możesz nie chcieć użyć najnowszego obrazu kontenera programu SQL Server. Aby uruchomić określony obraz kontenera programu SQL Server, wykonaj następujące kroki:

  1. Zidentyfikuj Docker tag dla wersji, której chcesz użyć. Aby wyświetlić dostępne tagi, zobacz Microsoft Artifact Registry.

  2. Ściąganie obrazu kontenera programu SQL Server za pomocą tagu . Aby na przykład pobrać obraz 2019-CU18-ubuntu-20.04, zastąp <image_tag> w poniższym poleceniu na 2019-CU18-ubuntu-20.04.

    docker pull mcr.microsoft.com/mssql/server:<image_tag>
    
  3. Aby uruchomić nowy kontener z tym obrazem, określ nazwę tagu w poleceniu docker run. W poniższym poleceniu zastąp <image_tag> wersją, którą chcesz uruchomić. Hasło powinno być zgodne z domyślnymi zasadami haseł programu SQL Server. Domyślnie hasło musi mieć długość co najmniej ośmiu znaków i zawierać znaki z trzech z następujących czterech zestawów: wielkie litery, małe litery, cyfry podstawowe-10 i symbole. Hasła mogą mieć długość maksymalnie 128 znaków. Używaj haseł, które są tak długie i złożone, jak to możliwe.

    Ważny

    Zmienna środowiskowa SA_PASSWORD jest przestarzała. Zamiast tego użyj MSSQL_SA_PASSWORD.

    docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
    

Te kroki mogą również służyć do obniżania poziomu istniejącego kontenera. Na przykład możesz chcieć wycofać lub obniżyć uruchomiony kontener na potrzeby rozwiązywania problemów lub testowania. Aby obniżyć wersję uruchomionego kontenera, musisz użyć techniki persystencji dla folderu danych. Wykonaj te same kroki opisane w sekcji uaktualniania , ale określ nazwę tagu starszej wersji podczas uruchamiania nowego kontenera.

Uruchamianie obrazów kontenerów opartych na systemie RHEL

Dokumentacja obrazów kontenerów systemu Linux oprogramowania SQL Server wskazuje na kontenery oparte na systemie Ubuntu. Począwszy od programu SQL Server 2019 (15.x), można używać kontenerów opartych na systemie Red Hat Enterprise Linux (RHEL). Przykład obrazu dla systemu RHEL będzie wyglądać następująco: mcr.microsoft.com/mssql/rhel/server:2019-CU15-rhel-8.

Na przykład następujące polecenie ściąga kontener Aktualizacji zbiorczej 18 dla programu SQL Server 2019 (15.x), który używa systemu RHEL 8:

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

Uruchamianie obrazów kontenerów produkcyjnych

Szybki start w poprzedniej sekcji uruchamia bezpłatną wersję Developer programu SQL Server z Microsoft Artifact Registry. Większość informacji nadal ma zastosowanie, jeśli chcesz uruchamiać obrazy kontenerów produkcyjnych, takich jak Enterprise, Standard lub Web Edition. Jednak istnieje kilka różnic, które zostały opisane tutaj.

  • Program SQL Server można używać tylko w środowisku produkcyjnym, jeśli masz ważną licencję. Możesz uzyskać bezpłatną licencję produkcyjną programu SQL Server Express tutaj. Licencje programu SQL Server Standard i Enterprise są dostępne za pośrednictwem licencjonowania zbiorowego firmy Microsoft.

  • Obraz kontenera dewelopera można również skonfigurować do uruchamiania wersji produkcyjnych.

Aby uruchomić wersję produkcyjną, zapoznaj się z wymaganiami i procedurami uruchamiania w przewodniku Szybki start . Musisz określić wersję produkcyjną ze zmienną środowiskową MSSQL_PID. W poniższym przykładzie pokazano, jak uruchomić najnowszy obraz kontenera programu SQL Server 2022 (16.x) dla wersji Enterprise Core.

Hasło powinno być zgodne z domyślnymi zasadami haseł programu SQL Server. Domyślnie hasło musi mieć długość co najmniej ośmiu znaków i zawierać znaki z trzech z następujących czterech zestawów: wielkie litery, małe litery, cyfry podstawowe-10 i symbole. Hasła mogą mieć długość maksymalnie 128 znaków. Używaj haseł, które są tak długie i złożone, jak to możliwe.

docker run --name sqlenterprise \
-e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' \
-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=<password>" `
-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=<password>" ^
-e "MSSQL_PID=EnterpriseCore" -p 1433:1433 ^
-d "mcr.microsoft.com/mssql/server:2022-latest"

Ważny

Przekazując wartość Y do zmiennej środowiskowej ACCEPT_EULA i wartość edycji na MSSQL_PID, należy wyrazić, że masz prawidłową i istniejącą licencję na wydanie i wersję programu SQL Server, której zamierzasz użyć. Zgadzasz się również, że korzystanie z oprogramowania SQL Server uruchomionego w obrazie kontenera będzie podlegać warunkom licencji programu SQL Server.

Aby uzyskać pełną listę możliwych wartości dla , zobacz Configure SQL Server settings with environment variables on Linux(Konfigurowanie ustawień programu SQL Server przy użyciu zmiennych środowiskowych w systemie Linux).

Uruchamianie wielu kontenerów programu SQL Server

Platforma Docker umożliwia uruchamianie wielu kontenerów programu SQL Server na tej samej maszynie hosta. Użyj tego podejścia w scenariuszach, które wymagają wielu wystąpień programu SQL Server na tym samym hoście. Każdy kontener musi uwidocznić się na innym porcie.

Poniższy przykład tworzy dwa kontenery programu SQL Server 2017 (14.x) i mapuje je na porty 1401 i 1402 na maszynie hosta.

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

Poniższy przykład tworzy dwa kontenery programu SQL Server 2019 (15.x) i mapuje je na porty 1401 i 1402 na maszynie hosta.

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

Poniższy przykład tworzy dwa kontenery programu SQL Server 2022 (16.x) i mapuje je na porty 1401 i 1402 na maszynie hosta.

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

Ostrożność

Hasło powinno być zgodne z domyślnymi zasadami haseł programu SQL Server. Domyślnie hasło musi mieć długość co najmniej ośmiu znaków i zawierać znaki z trzech z następujących czterech zestawów: wielkie litery, małe litery, cyfry podstawowe-10 i symbole. Hasła mogą mieć długość maksymalnie 128 znaków. Używaj haseł, które są tak długie i złożone, jak to możliwe.

Teraz istnieją dwa wystąpienia programu SQL Server uruchomione w oddzielnych kontenerach. Klienci mogą łączyć się z każdym wystąpieniem programu SQL Server przy użyciu adresu IP hosta kontenera i numeru portu dla kontenera.

Notatka

Nowsze wersje sqlcmd (w mssql-tools18) są domyślnie bezpieczne. W przypadku korzystania z wersji 18 lub nowszej należy dodać opcję No, aby sqlcmd określić, że szyfrowanie jest opcjonalne, a nie obowiązkowe.

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>"

Uaktualnianie programu SQL Server w kontenerach

Aby uaktualnić obraz kontenera za pomocą platformy Docker, najpierw zidentyfikuj tag wydania uaktualnienia. Pobierz tę wersję z rejestru za pomocą polecenia docker pull:

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

Spowoduje to zaktualizowanie obrazu programu SQL Server dla wszystkich nowych utworzonych kontenerów, ale program SQL Server nie jest aktualizowany w żadnych uruchomionych kontenerach. W tym celu należy utworzyć nowy kontener z najnowszym obrazem kontenera programu SQL Server i przeprowadzić migrację danych do tego nowego kontenera.

  1. Upewnij się, że używasz jednej z technik trwałości danych dla istniejącego kontenera programu SQL Server. Dzięki temu można uruchomić nowy kontener z tymi samymi danymi.

  2. Zatrzymaj kontener programu SQL Server za pomocą polecenia docker stop.

  3. Utwórz nowy kontener programu SQL Server z docker run i określ zamapowany katalog hosta lub kontener woluminu danych. Pamiętaj, aby użyć określonego tagu do uaktualnienia programu SQL Server. Nowy kontener używa teraz nowej wersji programu SQL Server z istniejącymi danymi programu SQL Server.

    Ważny

    Uaktualnienie jest obecnie obsługiwane tylko w wersji RC1, RC2 i ogólnie dostępnej.

  4. Zweryfikuj bazy danych i dane w nowym kontenerze.

  5. Opcjonalnie usuń stary kontener przy użyciu docker rm.

  • Rozpocznij pracę z obrazami kontenerów programu SQL Server 2017 (14.x) na platformie Docker, korzystając z przewodnika „Szybki start”
  • Rozpocznij korzystanie z obrazów kontenerów programu SQL Server 2019 (15.x) na platformie Docker, przechodząc przez przewodnik szybkiego startu .
  • Rozpocznij pracę z obrazami kontenerów programu SQL Server 2022 (16.x), przechodząc przez przewodnik Szybki Start na platformie Docker .

Współtworzenie dokumentacji SQL

Czy wiesz, że możesz samodzielnie edytować zawartość SQL? Jeśli to zrobisz, nie tylko pomożesz ulepszyć naszą dokumentację, ale także zostaniesz uznany za współautora strony.

Aby uzyskać więcej informacji, zobacz Jak współtworzyć dokumentację programu SQL Server