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:
- Windows
- Linux
- klaster kontenerów na platformie Azure
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.
- Uruchamianie obrazu kontenera programu SQL Server 2017 przy użyciu platformy Docker
- Uruchom obraz kontenera programu SQL Server 2019 przy użyciu platformy Docker
- Uruchamianie obrazu kontenera programu SQL Server 2022 przy użyciu platformy Docker
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:
- sqlcmd
- Azure Data Studio
- programu Visual Studio Code
- SQL Server Management Studio (SSMS) w systemie Windows
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.
Użyj polecenia
docker exec -it
, aby uruchomić interaktywną powłokę Bash wewnątrz uruchomionego kontenera. W poniższym przykładziee69e056c702d
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
lube69
, a nie pełnego identyfikatora. Aby dowiedzieć się, jaki jest identyfikator kontenera, uruchom poleceniedocker ps -a
.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 iConnecting 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.Po zakończeniu korzystania z sqlcmd, wpisz
exit
.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 -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 -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 -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:
Zidentyfikuj Docker
tag
dla wersji, której chcesz użyć. Aby wyświetlić dostępne tagi, zobacz Microsoft Artifact Registry.Ś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 na2019-CU18-ubuntu-20.04
.docker pull mcr.microsoft.com/mssql/server:<image_tag>
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żyjMSSQL_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
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.
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.
Zatrzymaj kontener programu SQL Server za pomocą polecenia
docker stop
.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.
Zweryfikuj bazy danych i dane w nowym kontenerze.
Opcjonalnie usuń stary kontener przy użyciu
docker rm
.
Powiązana zawartość
- Konfigurowanie i dostosowywanie kontenerów systemu Linux programu SQL Server
- Zobacz repozytorium mssql-docker w usłudze GitHub, aby uzyskać informacje o zasobach, opiniach i znanych problemach,
- Rozwiązywanie problemów z kontenerami Docker SQL Server
- wysoka dostępność kontenerów programu SQL Server
- Zabezpieczanie kontenerów systemu Linux programu SQL Server
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