Краткое руководство. Запуск образов контейнеров SQL Server на Linux с помощью Docker
Область применения: SQL Server — Linux
В этом кратком руководстве вы используете Docker для извлечения и запуска образа контейнера SQL Server 2017 (14.x) Linux, mssql-server-linux. Затем вы сможете подключиться с помощью sqlcmd, чтобы создать первую базу данных и выполнять запросы.
Дополнительные сведения о поддерживаемых платформах см. в заметках о выпуске SQL Server 2017 для Linux.
Предупреждение
При остановке и удалении контейнера данные SQL Server в контейнере удаляются окончательно. Дополнительные сведения о сохранении данных, создании и копировании файла резервной копии из контейнера или использовании метода сохраняемости данных контейнера.
В этом кратком руководстве создаются контейнеры SQL Server 2017 (14.x). Если вы предпочитаете создавать контейнеры Linux для разных версий SQL Server, ознакомьтесь с версиями этой статьи для SQL Server 2019 (15.x) или SQL Server 2022 (16.x) этой статьи.
В этом кратком руководстве вы используете Docker для извлечения и запуска образа контейнера LINUX SQL Server 2019 (15.x), mssql-server-linux. Затем вы сможете подключиться с помощью sqlcmd, чтобы создать первую базу данных и выполнять запросы.
Дополнительные сведения о поддерживаемых платформах см. в заметках о выпуске SQL Server 2019 для Linux.
Предупреждение
При остановке и удалении контейнера данные SQL Server в контейнере удаляются окончательно. Дополнительные сведения о сохранении данных, создании и копировании файла резервной копии из контейнера или использовании метода сохраняемости данных контейнера.
В этом кратком руководстве создаются контейнеры SQL Server 2019 (15.x). Если вы хотите создать контейнеры на Linux для других версий SQL Server, ознакомьтесь с версиями этой статьи для SQL Server 2017 (14.x) или SQL Server 2022 (16.x).
В этом кратком руководстве вы используете Docker для извлечения и запуска образа контейнера SQL Server 2022 (16.x) Linux, mssql-server-linux. Затем вы сможете подключиться с помощью sqlcmd, чтобы создать первую базу данных и выполнять запросы.
Дополнительные сведения о поддерживаемых платформах см . в заметках о выпуске SQL Server 2022 в Linux.
Предупреждение
При остановке и удалении контейнера данные SQL Server в контейнере удаляются окончательно. Дополнительные сведения о сохранении данных, создании и копировании файла резервной копии из контейнера или использовании метода сохраняемости данных контейнера.
В этом кратком руководстве создаются контейнеры SQL Server 2022 (16.x). Если вы хотите создать контейнеры на Linux для других версий SQL Server, ознакомьтесь с версиями этой статьи SQL Server 2017 (14.x) или SQL Server 2019 (15.x).
Этот образ состоит из SQL Server под управлением Linux на основе Ubuntu. Он может использоваться с Dосker Engine 1.8 и более поздних версий на Linux.
Начиная с SQL Server 2022 (16.x) CU 14 и SQL Server 2019 (15.x) CU 28, образы контейнеров включают новый пакет mssql-tools18 . Предыдущий каталог /opt/mssql-tools/bin
отменяется. Новый каталог для средств /opt/mssql-tools18/bin
Microsoft ODBC 18 соответствует последнему предложению инструментов. Дополнительные сведения об изменениях и улучшениях безопасности см. в статье ODBC Driver 18.0 для SQL Server Released.
В примерах этой статьи используются команды docker
. Однако большинство этих команд также работают с Podman. Podman предоставляет интерфейс командной строки, аналогичный подсистеме Docker. Дополнительные сведения о Podman см. здесь.
Внимание
Sqlcmd в настоящее время не поддерживает MSSQL_PID
параметр при создании контейнеров. Если вы используете инструкции sqlcmd в этом кратком руководстве, создайте контейнер с выпуском Sql Server для разработчиков. Используйте инструкции по интерфейсу командной строки (CLI), чтобы создать контейнер с помощью выбранной лицензии. Дополнительные сведения см. в статье "Развертывание и подключение к контейнерам SQL Server Linux".
Необходимые компоненты
- Docker Engine 1.8 и более поздних версий на любом поддерживаемом дистрибутиве Linux. Дополнительные сведения см. в разделе Установка Docker.
- Дополнительные сведения о требованиях к оборудованию и поддержке процессора см. в статье SQL Server 2016 и 2017: требования к оборудованию и программному обеспечению
- Дополнительные сведения о требованиях к оборудованию и поддержке процессора см. в статье SQL Server 2019: требования к оборудованию и программному обеспечению
- Дополнительные сведения о требованиях к оборудованию и поддержке процессора см. в статье SQL Server 2022: требования к оборудованию и программному обеспечению
Драйвер хранилища Docker
overlay2
. По умолчанию этот драйвер используется большинством пользователей. Если вы не используете этот поставщик хранилища и хотите изменить его, см. инструкции и предупреждения в документации по настройке overlay2 для Docker.Установите последнюю версию sqlcmd на узле Docker.
Не менее 2 ГБ места на диске.
Не менее 2 ГБ ОЗУ.
Извлечение и запуск образа контейнера SQL Server на Linux
Прежде чем начать следующие действия, убедитесь, что вы выбрали предпочтительную оболочку (bash, PowerShell или cmd) в верхней части этой статьи.
Для команд Bash в этой статье используется sudo
. Если вы не хотите использовать sudo
для запуска Docker, можно настроить группу docker
и добавить пользователей в эту группу. Дополнительные сведения см. в статье Действия после установки для Linux.
Извлечение контейнера из реестра
Извлеките образ контейнера SQL Server 2017 (14.x) на Linux из Реестра контейнеров Майкрософт.
sudo docker pull mcr.microsoft.com/mssql/server:2017-latest
docker pull mcr.microsoft.com/mssql/server:2017-latest
docker pull mcr.microsoft.com/mssql/server:2017-latest
В этом кратком руководстве создаются контейнеры SQL Server 2017 (14.x). Если вы хотите создать контейнеры на Linux для других версий SQL Server, ознакомьтесь с версиями этой статьи для SQL Server 2019 (15.x) или SQL Server 2022 (16.x).
Предыдущая команда извлекает последнюю версию образа контейнера SQL Server 2017 (14.x) на Linux. Если вы хотите извлечь конкретный образ, добавьте после двоеточия название метки, например mcr.microsoft.com/mssql/server:2017-GA-ubuntu
. Чтобы просмотреть все доступные изображения, см. Реестр артефактов Microsoft.
Запуск контейнера
Чтобы запустить образ контейнера на Linux с помощью Docker, выполните следующую команду в оболочке bash или в командной строке PowerShell с повышенными привилегиями.
Внимание
Переменная среды SA_PASSWORD
является нерекомендуемой. Вместо этого используйте MSSQL_SA_PASSWORD
.
sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" \
-p 1433:1433 --name sql1 --hostname sql1 \
-d \
mcr.microsoft.com/mssql/server:2017-latest
Если вы используете PowerShell Core, замените двойные кавычки одними кавычками.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
-p 1433:1433 --name sql1 --hostname sql1 `
-d `
mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
-p 1433:1433 --name sql1 --hostname sql1 `
-d `
mcr.microsoft.com/mssql/server:2017-latest
Пароль должен соответствовать политике паролей ПО умолчанию SQL Server, в противном случае контейнер не может настроить SQL Server и перестать работать. По умолчанию пароль должен быть не короче восьми символов и содержать три вида символов из следующих: прописные буквы, строчные буквы, десятичные цифры, специальные символы. Журнал ошибок можно проверить с помощью docker logs
команды.
По умолчанию в этом кратком руководстве создается контейнер с выпуском SQL Server Developer. Процесс запуска контейнера с производственными выпусками немного отличается. Дополнительные сведения см. в разделе Запуск образов контейнеров с производственными выпусками.
Следующая таблица содержит описание параметров запуска команды docker run
из предыдущего примера.
Параметр | Описание |
---|---|
-e "ACCEPT_EULA=Y" |
Задайте для переменной ACCEPT_EULA любое значение, чтобы подтвердить принятие соглашения о лицензировании конечных пользователей. Обязательный параметр для образа SQL Server. |
-e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" |
Укажите собственный надежный пароль, который не менее восьми символов и соответствует политике паролей. Обязательный параметр для образа SQL Server. |
-e "MSSQL_COLLATION=<SQL_Server_collation>" |
Укажите настраиваемые параметры сортировки SQL Server вместо параметров по умолчанию SQL_Latin1_General_CP1_CI_AS . |
-p 1433:1433 |
Сопоставление TCP-порта среды узла (первое значение) с TCP-портом в контейнере (второе значение). В этом примере SQL Server ожидает передачи данных из TCP-порта 1433 в контейнере, который перенаправляется на TCP-порт 1433 на узле. |
--name sql1 |
Укажите свое имя для контейнера вместо сгенерированного случайным образом. При запуске нескольких контейнеров нельзя использовать одинаковые имена. |
--hostname sql1 |
Используется для явного указания имени узла контейнера. Если имя узла не указано, по умолчанию используется идентификатор контейнера, который является случайным системным идентификатором GUID. |
-d |
Запустите контейнер в фоновом режиме (управляющая программа). |
mcr.microsoft.com/mssql/server:2017-latest |
Образ контейнера SQL Server на Linux. |
Просмотр списка контейнеров
Для просмотра ваших контейнеров Docker используйте команду
docker ps
.sudo docker ps -a
docker ps -a
docker ps -a
Выходные данные должны соответствовать следующему примеру.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d4a1999ef83e mcr.microsoft.com/mssql/server:2017-latest "/opt/mssql/bin/perm..." 2 minutes ago Up 2 minutes 0.0.0.0:1433->1433/tcp, :::1433->1433/tcp sql1
STATUS
Если столбец отображает состояниеUp
, SQL Server выполняется в контейнере и прослушивает порт, указанный в столбцеPORTS
. Если отображаетсяSTATUS
Exited
столбец контейнера SQL Server, см. статью "Устранение неполадок контейнеров Docker SQL Server". Сервер будет готов к подключению, когда журналы ошибок SQL Server отобразят сообщение:SQL Server is now ready for client connections. This is an informational message; no user action is required
. Чтобы просмотреть журнал ошибок SQL Server, выполните внутри контейнера следующую команду:sudo docker exec -t sql1 cat /var/opt/mssql/log/errorlog | grep connection
Параметр
--hostname
, как описано ранее, изменяет внутреннее имя контейнера на настраиваемое значение. Это значение — это имя, которое вы видите в следующем запросе Transact-SQL:SELECT @@SERVERNAME, SERVERPROPERTY('ComputerNamePhysicalNetBIOS'), SERVERPROPERTY('MachineName'), SERVERPROPERTY('ServerName');
Установка параметров
--hostname
и--name
равными позволяет легко идентифицировать целевой контейнер.В качестве последнего шага измените пароль SA в рабочей среде, так как
MSSQL_SA_PASSWORD
он отображается в выходных данных и хранится вps -eax
переменной среды с тем же именем.
Извлечение и запуск образа контейнера SQL Server на Linux
Прежде чем начать следующие действия, убедитесь, что вы выбрали предпочтительную оболочку (bash, PowerShell или cmd) в верхней части этой статьи.
Для команд Bash в этой статье используется sudo
. Если вы не хотите использовать sudo
для запуска Docker, можно настроить группу docker
и добавить пользователей в эту группу. Дополнительные сведения см. в статье Действия после установки для Linux.
Извлечение контейнера из реестра
Извлеките образ контейнера SQL Server 2019 (15.x) на Linux из Реестра контейнеров Майкрософт.
docker pull mcr.microsoft.com/mssql/server:2019-latest
docker pull mcr.microsoft.com/mssql/server:2019-latest
docker pull mcr.microsoft.com/mssql/server:2019-latest
В этом кратком руководстве создаются контейнеры SQL Server 2019 (15.x). Если вы хотите создать контейнеры на Linux для других версий SQL Server, ознакомьтесь с версиями этой статьи для SQL Server 2017 (14.x) или SQL Server 2022 (16.x).
Предыдущая команда извлекает последнюю версию образа контейнера SQL Server 2019 (15.x) на Linux. Если вы хотите извлечь конкретный образ, добавьте после двоеточия название метки, например mcr.microsoft.com/mssql/server:2019-GA-ubuntu
. Чтобы просмотреть все доступные изображения, см. Реестр артефактов Microsoft.
Запуск контейнера
Чтобы запустить образ контейнера на Linux с помощью Docker, выполните следующую команду в оболочке bash или в командной строке PowerShell с повышенными привилегиями.
Внимание
Переменная среды SA_PASSWORD
является нерекомендуемой. Вместо этого используйте MSSQL_SA_PASSWORD
.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" \
-p 1433:1433 --name sql1 --hostname sql1 \
-d \
mcr.microsoft.com/mssql/server:2019-latest
Если вы используете PowerShell Core, замените двойные кавычки одними кавычками.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
-p 1433:1433 --name sql1 --hostname sql1 `
-d `
mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
-p 1433:1433 --name sql1 --hostname sql1 `
-d `
mcr.microsoft.com/mssql/server:2019-latest
Пароль должен соответствовать политике паролей ПО умолчанию SQL Server, в противном случае контейнер не может настроить SQL Server и перестать работать. По умолчанию пароль должен быть не короче восьми символов и содержать три вида символов из следующих: прописные буквы, строчные буквы, десятичные цифры, специальные символы. Журнал ошибок можно проверить с помощью docker logs
команды.
По умолчанию в этом кратком руководстве создается контейнер с выпуском SQL Server Developer. Процесс запуска контейнера с производственными выпусками немного отличается. Дополнительные сведения см. в разделе Запуск образов контейнеров с производственными выпусками.
Следующая таблица содержит описание параметров запуска команды docker run
из предыдущего примера.
Параметр | Описание |
---|---|
-e "ACCEPT_EULA=Y" |
Задайте для переменной ACCEPT_EULA любое значение, чтобы подтвердить принятие соглашения о лицензировании конечных пользователей. Обязательный параметр для образа SQL Server. |
-e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" |
Укажите собственный надежный пароль, который не менее восьми символов и соответствует политике паролей. Обязательный параметр для образа SQL Server. |
-e "MSSQL_COLLATION=<SQL_Server_collation>" |
Укажите настраиваемые параметры сортировки SQL Server вместо параметров по умолчанию SQL_Latin1_General_CP1_CI_AS . |
-p 1433:1433 |
Сопоставление TCP-порта среды узла (первое значение) с TCP-портом в контейнере (второе значение). В этом примере SQL Server ожидает передачи данных из TCP-порта 1433 в контейнере, который перенаправляется на TCP-порт 1433 на узле. |
--name sql1 |
Укажите свое имя для контейнера вместо сгенерированного случайным образом. При запуске нескольких контейнеров нельзя использовать одинаковые имена. |
--hostname sql1 |
Используется для явного указания имени узла контейнера. Если имя узла не указано, по умолчанию используется идентификатор контейнера, который является случайным системным идентификатором GUID. |
-d |
Запустите контейнер в фоновом режиме (управляющая программа). |
mcr.microsoft.com/mssql/server:2019-latest |
Образ контейнера SQL Server на Linux. |
Просмотр списка контейнеров
Для просмотра ваших контейнеров Docker используйте команду
docker ps
.docker ps -a
docker ps -a
docker ps -a
Выходные данные должны соответствовать следующему примеру.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d4a1999ef83e mcr.microsoft.com/mssql/server:2019-latest "/opt/mssql/bin/perm..." 2 minutes ago Up 2 minutes 0.0.0.0:1433->1433/tcp, :::1433->1433/tcp sql1
STATUS
Если столбец отображает состояниеUp
, SQL Server выполняется в контейнере и прослушивает порт, указанный в столбцеPORTS
. Если отображаетсяSTATUS
Exited
столбец контейнера SQL Server, см. статью "Устранение неполадок контейнеров Docker SQL Server". Сервер будет готов к подключению, когда журналы ошибок SQL Server отобразят сообщение:SQL Server is now ready for client connections. This is an informational message; no user action is required
. Чтобы просмотреть журнал ошибок SQL Server, выполните внутри контейнера следующую команду:docker exec -t sql1 cat /var/opt/mssql/log/errorlog | grep connection
Параметр
--hostname
, как описано ранее, изменяет внутреннее имя контейнера на настраиваемое значение. Это значение — это имя, которое вы видите в следующем запросе Transact-SQL:SELECT @@SERVERNAME, SERVERPROPERTY('ComputerNamePhysicalNetBIOS'), SERVERPROPERTY('MachineName'), SERVERPROPERTY('ServerName');
Установка параметров
--hostname
и--name
равными позволяет легко идентифицировать целевой контейнер.В качестве последнего шага измените пароль SA в рабочей среде, так как
MSSQL_SA_PASSWORD
он отображается в выходных данных и хранится вps -eax
переменной среды с тем же именем.
Извлечение и запуск образа контейнера SQL Server на Linux
Прежде чем начать следующие действия, убедитесь, что вы выбрали предпочтительную оболочку (bash, PowerShell или cmd) в верхней части этой статьи.
Для команд Bash в этой статье используется sudo
. Если вы не хотите использовать sudo
для запуска Docker, можно настроить группу docker
и добавить пользователей в эту группу. Дополнительные сведения см. в статье Действия после установки для Linux.
Извлечение контейнера из реестра
Извлеките образ контейнера SQL Server 2022 (16.x) на Linux из Реестра контейнеров Майкрософт.
docker pull mcr.microsoft.com/mssql/server:2022-latest
docker pull mcr.microsoft.com/mssql/server:2022-latest
docker pull mcr.microsoft.com/mssql/server:2022-latest
В этом кратком руководстве создаются контейнеры SQL Server 2022 (16.x). Если вы хотите создать контейнеры на Linux для других версий SQL Server, ознакомьтесь с версиями этой статьи SQL Server 2017 (14.x) или SQL Server 2019 (15.x).
Предыдущая команда извлекает последнюю версию образа контейнера SQL Server 2022 (16.x) на Linux. Если вы хотите извлечь конкретный образ, добавьте после двоеточия название метки, например mcr.microsoft.com/mssql/server:2022-GA-ubuntu
. Чтобы просмотреть все доступные изображения, см. Реестр артефактов Microsoft.
Запуск контейнера
Чтобы запустить образ контейнера на Linux с помощью Docker, выполните следующую команду в оболочке bash или в командной строке PowerShell с повышенными привилегиями.
Внимание
Переменная среды SA_PASSWORD
является нерекомендуемой. Вместо этого используйте MSSQL_SA_PASSWORD
.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" \
-p 1433:1433 --name sql1 --hostname sql1 \
-d \
mcr.microsoft.com/mssql/server:2022-latest
Если вы используете PowerShell Core, замените двойные кавычки одними кавычками.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
-p 1433:1433 --name sql1 --hostname sql1 `
-d `
mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" `
-p 1433:1433 --name sql1 --hostname sql1 `
-d `
mcr.microsoft.com/mssql/server:2022-latest
Пароль должен соответствовать политике паролей ПО умолчанию SQL Server, в противном случае контейнер не может настроить SQL Server и перестать работать. По умолчанию пароль должен быть не короче восьми символов и содержать три вида символов из следующих: прописные буквы, строчные буквы, десятичные цифры, специальные символы. Журнал ошибок можно проверить с помощью docker logs
команды.
По умолчанию в этом кратком руководстве создается контейнер с выпуском SQL Server Developer. Процесс запуска контейнера с производственными выпусками немного отличается. Дополнительные сведения см. в разделе Запуск образов контейнеров с производственными выпусками.
Следующая таблица содержит описание параметров запуска команды docker run
из предыдущего примера.
Параметр | Описание |
---|---|
-e "ACCEPT_EULA=Y" |
Задайте для переменной ACCEPT_EULA любое значение, чтобы подтвердить принятие соглашения о лицензировании конечных пользователей. Обязательный параметр для образа SQL Server. |
-e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" |
Укажите собственный надежный пароль, который не менее восьми символов и соответствует политике паролей. Обязательный параметр для образа SQL Server. |
-e "MSSQL_COLLATION=<SQL_Server_collation>" |
Укажите настраиваемые параметры сортировки SQL Server вместо параметров по умолчанию SQL_Latin1_General_CP1_CI_AS . |
-p 1433:1433 |
Сопоставление TCP-порта среды узла (первое значение) с TCP-портом в контейнере (второе значение). В этом примере SQL Server ожидает передачи данных из TCP-порта 1433 в контейнере, который перенаправляется на TCP-порт 1433 на узле. |
--name sql1 |
Укажите свое имя для контейнера вместо сгенерированного случайным образом. При запуске нескольких контейнеров нельзя использовать одинаковые имена. |
--hostname sql1 |
Используется для явного указания имени узла контейнера. Если имя узла не указано, по умолчанию используется идентификатор контейнера, который является случайным системным идентификатором GUID. |
-d |
Запустите контейнер в фоновом режиме (управляющая программа). |
mcr.microsoft.com/mssql/server:2022-latest |
Образ контейнера SQL Server на Linux. |
Изменение пароля системного администратора
Учетная запись SA обладает правами администратора на экземпляре SQL Server, создаваемом во время установки. После создания контейнера SQL Server указанную вами переменную среды MSSQL_SA_PASSWORD
можно обнаружить, запустив echo $MSSQL_SA_PASSWORD
в контейнере. В целях безопасности необходимо изменить пароль SA в рабочей среде.
Назначьте для пользователя SA надежный пароль.
Используйте
docker exec
для запуска sqlcmd, чтобы изменить пароль с помощью Transact-SQL. В следующем примере старый и новый пароли считываются из вводимых пользователем данных.docker exec -it sql1 /opt/mssql-tools18/bin/sqlcmd \ -S localhost -U SA \ -P "$(read -sp "Enter current SA password: "; echo "${REPLY}")" \ -Q "ALTER LOGIN SA WITH PASSWORD=\"$(read -sp "Enter new SA password: "; echo "${REPLY}")\""
docker exec -it sql1 /opt/mssql-tools18/bin/sqlcmd ` -S localhost -U SA -P "<YourStrong@Passw0rd>" ` -Q "ALTER LOGIN SA WITH PASSWORD='<YourNewStrong@Passw0rd>'"
docker exec -it sql1 /opt/mssql-tools18/bin/sqlcmd ` -S localhost -U SA -P "<YourStrong@Passw0rd>" ` -Q "ALTER LOGIN SA WITH PASSWORD='<YourNewStrong@Passw0rd>'"
Последние версии sqlcmd по умолчанию защищены. Дополнительные сведения о шифровании подключений см. в программе sqlcmd для Windows и подключении с помощью sqlcmd для Linux и macOS. Если подключение не выполнено, можно добавить параметр в sqlcmd, чтобы указать
-No
, что шифрование является необязательным, а не обязательным.
Отключение учетной sa
записи в качестве рекомендации
Внимание
Эти учетные данные потребуются для последующих шагов. Обязательно запишите идентификатор пользователя и пароль, которые вы вводите здесь.
При подключении к экземпляру SQL Server с помощью sa
учетной записи в первый раз после установки важно выполнить эти действия, а затем немедленно отключить sa
имя входа в качестве рекомендации по безопасности.
Создайте новое имя входа и сделайте его членом роли сервера sysadmin .
В зависимости от того, есть ли у вас контейнер или неконтейнерное развертывание, включите проверка подлинности Windows и создайте новое имя входа под управлением Windows и добавьте его в роль сервера sysadmin.
В противном случае создайте имя входа с помощью проверки подлинности SQL Server и добавьте его в роль сервера sysadmin .
Подключитесь к экземпляру SQL Server с помощью созданного имени входа.
sa
Отключите учетную запись, как рекомендуется для обеспечения безопасности.
Просмотр списка контейнеров
Для просмотра ваших контейнеров Docker используйте команду
docker ps
.docker ps -a
docker ps -a
docker ps -a
Выходные данные должны соответствовать следующему примеру.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d4a1999ef83e mcr.microsoft.com/mssql/server:2022-latest "/opt/mssql/bin/perm..." 2 minutes ago Up 2 minutes 0.0.0.0:1433->1433/tcp, :::1433->1433/tcp sql1
STATUS
Если столбец отображает состояниеUp
, SQL Server выполняется в контейнере и прослушивает порт, указанный в столбцеPORTS
. Если отображаетсяSTATUS
Exited
столбец контейнера SQL Server, см. статью "Устранение неполадок контейнеров Docker SQL Server". Сервер будет готов к подключению, когда журналы ошибок SQL Server отобразят сообщение:SQL Server is now ready for client connections. This is an informational message; no user action is required
. Чтобы просмотреть журнал ошибок SQL Server, выполните внутри контейнера следующую команду:docker exec -t sql1 cat /var/opt/mssql/log/errorlog | grep connection
Параметр
--hostname
, как описано ранее, изменяет внутреннее имя контейнера на настраиваемое значение. Это значение — это имя, которое вы видите в следующем запросе Transact-SQL:SELECT @@SERVERNAME, SERVERPROPERTY('ComputerNamePhysicalNetBIOS'), SERVERPROPERTY('MachineName'), SERVERPROPERTY('ServerName');
Установка параметров
--hostname
и--name
равными позволяет легко идентифицировать целевой контейнер.
Подключение к SQL Server
В следующих шагах используется программа командной строки SQL Server, служебная программа sqlcmd в контейнере для подключения к SQL Server.
Выполните команду
docker exec -it
, чтобы запустить интерактивную оболочку bash внутри запущенного контейнера. В следующем примереsql1
используется имя, указанное параметром--name
при создании контейнера.docker exec -it sql1 "bash"
docker exec -it sql1 "bash"
docker exec -it sql1 "bash"
В контейнере подключитесь локально с помощью sqlcmd, используя полный путь.
/opt/mssql-tools/bin/sqlcmd -S localhost -U <userid> -P "<YourNewStrong@Passw0rd>"
Последние версии sqlcmd по умолчанию защищены. Дополнительные сведения о шифровании подключений см. в программе sqlcmd для Windows и подключении с помощью sqlcmd для Linux и macOS. Если подключение не выполнено, можно добавить параметр в sqlcmd, чтобы указать
-No
, что шифрование является необязательным, а не обязательным.Вы можете опустить пароль в командной строке. В этом случае вы получите приглашение для его ввода. Например:
/opt/mssql-tools/bin/sqlcmd -S localhost -U <userid>
В контейнере подключитесь локально с помощью sqlcmd, используя полный путь.
/opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid> -P "<YourNewStrong@Passw0rd>"
Последние версии sqlcmd по умолчанию защищены. Дополнительные сведения о шифровании подключений см. в программе sqlcmd для Windows и подключении с помощью sqlcmd для Linux и macOS. Если подключение не выполнено, можно добавить параметр в sqlcmd, чтобы указать
-No
, что шифрование является необязательным, а не обязательным.Вы можете опустить пароль в командной строке. В этом случае вы получите приглашение для его ввода. Например:
/opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid>
В контейнере подключитесь локально с помощью sqlcmd, используя полный путь.
/opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid> -P "<YourNewStrong@Passw0rd>"
Последние версии sqlcmd по умолчанию защищены. Дополнительные сведения о шифровании подключений см. в программе sqlcmd для Windows и подключении с помощью sqlcmd для Linux и macOS. Если подключение не выполнено, можно добавить параметр в sqlcmd, чтобы указать
-No
, что шифрование является необязательным, а не обязательным.Вы можете опустить пароль в командной строке. В этом случае вы получите приглашение для его ввода. Например:
/opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid>
- Если все сработает должным образом, вы перейдете к приглашению команды sqlcmd:
1>
.
Создание и запрос данных
В следующих разделах приведено пошаговое руководство по созданию базы данных, добавлению данных и запуску запроса с использованием sqlcmd и Transact-SQL.
Создание базы данных
Выполните следующие шаги, чтобы создать базу данных TestDB
.
В приглашении команды sqlcmd вставьте следующую команду Transact-SQL, чтобы создать тестовую базу данных:
CREATE DATABASE TestDB;
В следующей строке напишите запрос, который должен вернуть имена всех баз данных на сервере:
SELECT Name from sys.databases;
Две предыдущие команды не были выполнены сразу. Введите
GO
на новой строке, чтобы выполнить предыдущие команды:GO
Вставка данных
Теперь создайте таблицу Inventory
и вставьте две новых строки.
В приглашении команды sqlcmd переключите контекст на новую базу данных
TestDB
:USE TestDB;
Создайте таблицу
Inventory
:CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT);
Вставьте данные в новую таблицу:
INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);
Введите
GO
, чтобы выполнить предыдущие команды:GO
Выбор данных
Теперь выполните запрос, чтобы вернуть данные из таблицы Inventory
.
В приглашении команды sqlcmd введите запрос, который должен вернуть из таблицы
Inventory
строки, где количество превышает 152:SELECT * FROM Inventory WHERE quantity > 152;
Выполните команду:
GO
Выход из приглашения команды sqlcmd
Чтобы завершить сеанс sqlcmd, введите
QUIT
:QUIT
Чтобы выйти из интерактивной командной строки в контейнере, введите команду
exit
. Контейнер продолжит работать после выхода из интерактивной оболочки bash.
Подключение извне контейнера
Подключиться к экземпляру SQL Server на компьютере Docker можно также с помощью любого внешнего инструмента в macOS, Windows или Linux, поддерживающего подключения SQL. Внешнее средство использует IP-адрес для хост-компьютера.
В следующем примере используется sqlcmd вне контейнера для подключения к SQL Server, запущенному в контейнере. В этом примере предполагается, что в среде вне контейнера, из которой происходит подключение, уже установлены средства командной строки SQL Server. При использовании других средств действует тот же принцип, но процесс подключения является уникальным для каждого средства.
Найдите IP-адрес для хост-компьютера контейнера, используя
ifconfig
илиip addr
.В этом примере установите средство sqlcmd на клиентском компьютере. Дополнительные сведения см. в служебной программе sqlcmd или установке средств командной строки SQL Server sqlcmd и bcp в Linux.
Запустите sqlcmd, указав IP-адрес и порт, сопоставленный с портом 1433 в контейнере. В этом примере это тот же порт, что и порт 1433 на хост-компьютере. Если на хост-компьютере был указан другой сопоставленный порт, используйте его здесь. Чтобы разрешить подключение, необходимо также открыть соответствующий входящий порт в брандмауэре.
Последние версии sqlcmd по умолчанию защищены. Если подключение не выполнено, и вы используете версию 18 или более поздней, можно добавить параметр в sqlcmd, чтобы указать
-No
, что шифрование является необязательным, а не обязательным.sudo sqlcmd -S <ip_address>,1433 -U <userid> -P "<YourNewStrong@Passw0rd>"
sqlcmd -S <ip_address>,1433 -U <userid> -P "<YourNewStrong@Passw0rd>"
sqlcmd -S <ip_address>,1433 -U <userid> -P "<YourNewStrong@Passw0rd>"
Выполните команды языка Transact-SQL. По завершении введите
QUIT
.
Другие распространенные средства для подключения к SQL Server:
- Расширение SQL Server для Visual Studio Code
- Управление SQL Server на Linux с помощью SQL Server Management Studio в Windows
- Что такое Azure Data Studio?
- mssql-cli (предварительная версия).
- Управление SQL Server на Linux с помощью PowerShell Core
Удаление контейнера
Чтобы удалить контейнер SQL Server, используемый в этом руководстве, выполните следующие команды.
docker stop sql1
docker rm sql1
docker stop sql1
docker rm sql1
docker stop sql1
docker rm sql1
Демонстрация возможностей Docker
После завершения работы с образом контейнера SQL Server Linux для Docker может потребоваться узнать, как Docker используется для улучшения разработки и тестирования. Следующий видеоролик рассказывает о том, как можно использовать Docker в сценарии непрерывной интеграции и развертывания.
Связанные задачи
Связанный контент
- Восстановление базы данных SQL Server в контейнере Linux
- Устранение неполадок контейнеров Docker SQL Server
- репозиторий mssql-docker GitHub
Примите участие в разработке документации по SQL
Знаете ли вы, что содержимое SQL можно изменить самостоятельно? Это не только улучшит нашу документацию, но и даст вам статус участника в создании этой страницы.
Дополнительные сведения см. в разделе Участие в работе над документацией по SQL Server.