Развертывание и подключение к контейнерам SQL Server Linux
Область применения: SQL Server — Linux
В этой статье объясняется, как развернуть и подключиться к контейнерам SQL Server Linux.
Дополнительные сведения о других сценариях развертывания см. в следующих источниках:
Примечание.
В этой статье основное внимание уделяется использованию mssql-server-linux
образа. Развертывания SQL Server в контейнерах Windows не поддерживаются. Для разработки и тестирования можно создавать пользовательские образы контейнеров для работы с SQL Server в контейнерах Windows. Примеры файлов доступны в GitHub. Примеры файлов предназначены только для справки.
Внимание
Прежде чем запустить контейнер SQL Server для использования в рабочей среде, просмотрите нашу политику поддержки для контейнеров SQL Server, чтобы убедиться, что вы используете поддерживаемую конфигурацию.
Это 6-минутное видео содержит введение в запуск SQL Server в контейнерах:
Извлечение и запуск образа контейнера
Чтобы извлечь и запустить образы контейнеров Docker для SQL Server, выполните необходимые условия и действия, описанные в следующем кратком руководстве.
- Запуск образа контейнера с SQL Server 2017 в Docker
- Запуск образа контейнера с SQL Server 2019 в Docker
- Запуск образа контейнера SQL Server 2022 с помощью Docker
Эта статья посвящена настройке и содержит дополнительные сценарии использования, описываемые в следующих разделах.
Подключение и выполнение запросов
Вы можете подключаться и выполнять запросы к SQL Server в контейнере как извне контейнера, так и внутри него. Оба эти сценария описываются в следующих разделах.
Средства за пределами контейнера
Вы можете подключиться к экземпляру SQL Server на узле контейнера из любого внешнего средства Linux, Windows или macOS, поддерживающего подключения SQL. Ниже перечислены некоторые распространенные средства:
В следующем примере sqlcmd используется для подключения к SQL Server, работающему в контейнере. IP-адрес в строке подключения соответствует IP-адресу хост-компьютера, на котором выполняется контейнер.
Примечание.
Более новые версии sqlcmd (в mssql-tools18) по умолчанию защищены. При использовании версии 18 или более поздней необходимо добавить параметр в sqlcmd, чтобы указатьNo
, что шифрование является необязательным, а не обязательным.
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>"
Если вы сопоставляли порт узла, который не был стандартным1433
, добавьте этот порт в строка подключения. Например, если вы указали -p 1400:1433
в команде docker run
, для подключения необходимо явно указать порт 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>"
Средства внутри контейнера
Начиная с SQL Server 2017 (14/x) средства командной строки SQL включены в образ контейнера. Если подключиться к образу с помощью интерактивной командной строки, можно запускать программы локально.
Выполните команду
docker exec -it
, чтобы запустить интерактивную оболочку bash внутри запущенного контейнера. В следующем примереe69e056c702d
— это идентификатор контейнера.docker exec -it e69e056c702d "bash"
Совет
Указывать идентификатор контейнера полностью во всех случаях не требуется. Достаточно указать количество символов, необходимое для его уникальной идентификации. Соответственно, вместо полного идентификатора в этом примере может использоваться форма
e6
илиe69
. Чтобы узнать идентификатор контейнера, выполните командуdocker ps -a
.В контейнере подключитесь локально с помощью sqlcmd, используя полный путь.
/opt/mssql-tools18/bin/sqlcmd -S localhost -U SA -P '<YourPassword>'
Примечание.
Более новые версии sqlcmd по умолчанию защищены. Дополнительные сведения о шифровании подключений см. в программе sqlcmd для Windows и подключении с помощью sqlcmd для Linux и macOS. Если подключение не выполнено, можно добавить параметр в sqlcmd, чтобы указать
-No
, что шифрование является необязательным, а не обязательным.После завершения работы с sqlcmd введите
exit
.После завершения работы с интерактивной командной строкой введите
exit
. Контейнер продолжит работать после выхода из интерактивной оболочки bash.
Проверка версии контейнера
Если вы хотите знать версию SQL Server в работающем контейнере, выполните следующую команду, чтобы отобразить ее. Замените <Container ID or name>
на идентификатор или имя целевого контейнера. Замените <YourStrong!Passw0rd>
на пароль SQL Server для учетной записи системного администратора.
docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P '<YourStrong!Passw0rd>' \
-Q 'SELECT @@VERSION'
Примечание.
Более новые версии sqlcmd по умолчанию защищены. Дополнительные сведения о шифровании подключений см. в программе sqlcmd для Windows и подключении с помощью sqlcmd для Linux и macOS. Если подключение не выполнено, можно добавить параметр в sqlcmd, чтобы указать-No
, что шифрование является необязательным, а не обязательным.
docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd `
-S localhost -U SA -P "<YourStrong!Passw0rd>" `
-Q "SELECT @@VERSION"
Примечание.
Более новые версии sqlcmd по умолчанию защищены. Дополнительные сведения о шифровании подключений см. в программе sqlcmd для Windows и подключении с помощью sqlcmd для Linux и macOS. Если подключение не выполнено, можно добавить параметр в sqlcmd, чтобы указать-No
, что шифрование является необязательным, а не обязательным.
docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd ^
-S localhost -U SA -P "<YourStrong!Passw0rd>" ^
-Q "SELECT @@VERSION"
Примечание.
Более новые версии sqlcmd по умолчанию защищены. Дополнительные сведения о шифровании подключений см. в программе sqlcmd для Windows и подключении с помощью sqlcmd для Linux и macOS. Если подключение не выполнено, можно добавить параметр в sqlcmd, чтобы указать-No
, что шифрование является необязательным, а не обязательным.
Вы также можете определить версию SQL Server и номер сборки для целевого образа контейнера. Следующая команда выводит сведения о версии и номере сборки SQL Server для образа mcr.microsoft.com/mssql/server:2022-latest
. Это делается путем запуска нового контейнера с переменной PAL_PROGRAM_INFO=1
среды. Полученный контейнер моментально закрывается, а команда docker rm
удаляет его.
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
При выполнении указанных выше команд возвращаются сведения о версии примерно следующего вида:
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
Запуск определенного образа контейнера SQL Server
Примечание.
- Начиная с SQL Server 2019 (15.x) с накопительным пакетом обновления 3 (CU3), теперь поддерживается Ubuntu 18.04.
- Начиная с SQL Server 2019 (15.x) с накопительным пакетом обновления 3 (CU10), поддерживается Ubuntu 20.04.
- Список всех доступных тегов для mssql/server можно найти на странице https://mcr.microsoft.com/v2/mssql/server/tags/list.
В некоторых сценариях не требуется использовать последнюю версию образа контейнера с SQL Server. Чтобы запустить определенный образ контейнера с SQL Server, выполните следующие действия:
Определите Docker
tag
для выпуска, который вы хотите использовать. Чтобы просмотреть доступные теги, см. Реестр артефактов Microsoft.Извлеките образ контейнера с SQL Server по соответствующему тегу. Например, чтобы извлечь
2019-CU18-ubuntu-20.04
изображение, замените<image_tag>
в следующей команде2019-CU18-ubuntu-20.04
на .docker pull mcr.microsoft.com/mssql/server:<image_tag>
Чтобы запустить новый контейнер с этим образом, укажите название тега в команде
docker run
. В следующей команде замените<image_tag>
на версию, которую требуется запустить.Внимание
Переменная среды
SA_PASSWORD
является нерекомендуемой. Вместо этого используйте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>
Эти действия также можно использовать для перехода на более раннюю версию существующего контейнера. Например, вы можете откатить контейнер или перейти на более раннюю его версию для устранения неполадок или тестирования. Чтобы перейти на более раннюю версию контейнера, необходимо использовать метод обеспечения сохраняемости для папки данных. Выполните действия, описываемые в разделе, посвященном обновлению, однако при запуске контейнера укажите название тега, соответствующее более старой версии.
Запуск образов контейнеров на основе RHEL
Документация по образам контейнеров с Linux для SQL Server содержит информацию о контейнерах на основе Ubuntu. Начиная с SQL Server 2019 (15.x) вы можете использовать контейнеры на основе Red Hat Enterprise Linux (RHEL). Пример изображения для RHEL будет выглядеть следующим mcr.microsoft.com/mssql/rhel/server:2019-CU15-rhel-8
образом.
Например, следующая команда извлекает контейнер накопительного обновления 18 для SQL Server 2019 (15.x), использующий 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
Запуск образов рабочих контейнеров
Краткое руководство, приведенное в предыдущем разделе, запускает бесплатный выпуск SQL Server из Реестр артефактов Microsoft. Основная часть приведенных здесь сведений также применима для использования рабочих образов контейнеров, таких как выпуски Enterprise, Standard или Web. Однако между ними есть несколько различий, которые будут описываться отдельно.
Для использования SQL Server в рабочей среде вам потребуется действительная лицензия. Чтобы получить бесплатную рабочую лицензию SQL Server Express, воспользуйтесь этой ссылкой. Лицензии на выпуск SQL Server Standard и Enterprise доступны через корпоративное лицензирование Майкрософт.
Образ контейнера с выпуском Developer при необходимости можно настроить для запуска в рабочей среде.
Чтобы запустить выпуск рабочей среды, ознакомьтесь с требованиями и процедурами выполнения в кратком руководстве. Необходимо указать рабочий выпуск с переменной MSSQL_PID
среды. В следующем примере показано, как запустить последний образ контейнера SQL Server 2022 (16.x) для выпуска Enterprise Core.
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"
Внимание
Передав значение в переменную ACCEPT_EULA
среды и значение Y
MSSQL_PID
выпуска, вы выражаете, что у вас есть действительная лицензия на выпуск и версию SQL Server, которую вы планируете использовать. Вы также соглашаетесь с тем, что использование программного обеспечения SQL Server, работающего в образе контейнера, будет регулироваться условиями лицензии SQL Server.
Примечание.
Полный список возможных значений MSSQL_PID
см. в разделе "Настройка параметров SQL Server" с переменными среды в Linux.
Запуск нескольких контейнеров SQL Server
В Docker реализована возможность одновременно запускать несколько контейнеров SQL Server на одном хост-компьютере. Используйте этот подход в сценариях, когда на одном хост-компьютере требуется несколько экземпляров SQL Server. Каждый контейнер должен предоставляться через отдельный порт.
В следующем примере создаются два контейнера SQL Server 2017 (14.x) и сопоставляют их с портами 1401
и 1402
на хост-компьютере.
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
В следующем примере создаются два контейнера SQL Server 2019 (15.x) и сопоставляют их с портами 1401
и 1402
на хост-компьютере.
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
В следующем примере создаются два контейнера SQL Server 2022 (16.x) и сопоставляется с портами 1401
и 1402
на хост-компьютере.
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
Обратите внимание, что в этом случае два экземпляра SQL Server будут выполняться в разных контейнерах. Клиенты могут подключаться к каждому экземпляру SQL Server с помощью IP-адреса узла контейнера и номера порта контейнера.
Примечание.
Более новые версии sqlcmd (в mssql-tools18) по умолчанию защищены. При использовании версии 18 или более поздней необходимо добавить параметр в sqlcmd, чтобы указатьNo
, что шифрование является необязательным, а не обязательным.
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>"
Обновление SQL Server в контейнерах
Чтобы выполнить обновление образа контейнера Docker, сначала необходимо определить тег, соответствующий нужному выпуску. Чтобы извлечь эту версию из реестра, используйте команду docker pull
:
docker pull mcr.microsoft.com/mssql/server:<image_tag>
Образ SQL Server будет обновлен только во вновь создаваемых контейнерах. В работающих контейнерах обновление не производится. Для этого необходимо создать новый контейнер с последней версией образа контейнера с SQL Server и перенести в него данные.
Убедитесь, что в отношении существующего контейнера с SQL Server применяется один из методов обеспечения сохраняемости данных. Таким образом, вы можете запустить новый контейнер с теми же данными.
Остановите контейнер с SQL Server с помощью команды
docker stop
.Создайте новый контейнер с SQL Server с помощью команды
docker run
и укажите сопоставленный каталог узла или контейнер тома данных. Обратите внимание на необходимость использовать тег, соответствующий обновлению SQL Server. В новом контейнере будет использоваться новая версия SQL Server с существующими данными SQL Server.Внимание
На данный момент поддерживается обновление между версиями RC1, RC2 и общедоступной версией.
Убедитесь, что базы данных и данные перенесены в новый контейнер.
При необходимости удалите старый контейнер с помощью команды
docker rm
.
Связанный контент
- Сведения о начале работы с образами контейнеров с SQL Server 2017 (14.x) в Docker можно найти в кратком руководстве
- Сведения о начале работы с образами контейнеров с SQL Server 2019 (15.x) в Docker можно найти в кратком руководстве
- Начало работы с образами контейнеров SQL Server 2022 (16.x) в Docker, выполнив краткое руководство.
- Ссылка на дополнительную конфигурацию и настройку контейнеров Docker
- В репозитории GitHub mssql-docker вы найдете полезные ресурсы, отзывы и информацию об известных проблемах.
- Устранение неполадок контейнеров Docker на SQL Server
- Обеспечение высокого уровня доступности для контейнеров SQL Server
- Защита контейнеров Docker в SQL Server
Примите участие в разработке документации по SQL
Знаете ли вы, что содержимое SQL можно изменить самостоятельно? Это не только улучшит нашу документацию, но и даст вам статус участника в создании этой страницы.
Дополнительные сведения см. в разделе Участие в работе над документацией по SQL Server.