Поделиться через


Краткое руководство. Запуск образов контейнеров 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/binMicrosoft 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 на 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.

Просмотр списка контейнеров

  1. Для просмотра ваших контейнеров 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
    
  2. 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 равными позволяет легко идентифицировать целевой контейнер.

  3. В качестве последнего шага измените пароль 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.

Просмотр списка контейнеров

  1. Для просмотра ваших контейнеров 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
    
  2. 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 равными позволяет легко идентифицировать целевой контейнер.

  3. В качестве последнего шага измените пароль 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 в рабочей среде.

  1. Назначьте для пользователя SA надежный пароль.

  2. Используйте 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 имя входа в качестве рекомендации по безопасности.

  1. Создайте новое имя входа и сделайте его членом роли сервера sysadmin .

  2. Подключитесь к экземпляру SQL Server с помощью созданного имени входа.

  3. sa Отключите учетную запись, как рекомендуется для обеспечения безопасности.

Просмотр списка контейнеров

  1. Для просмотра ваших контейнеров 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
    
  2. 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.

  1. Выполните команду docker exec -it, чтобы запустить интерактивную оболочку bash внутри запущенного контейнера. В следующем примере sql1 используется имя, указанное параметром --name при создании контейнера.

    docker exec -it sql1 "bash"
    
    docker exec -it sql1 "bash"
    
    docker exec -it sql1 "bash"
    
  1. В контейнере подключитесь локально с помощью 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>
    
  1. В контейнере подключитесь локально с помощью 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>
    
  1. В контейнере подключитесь локально с помощью 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>
    
  1. Если все сработает должным образом, вы перейдете к приглашению команды sqlcmd: 1>.

Создание и запрос данных

В следующих разделах приведено пошаговое руководство по созданию базы данных, добавлению данных и запуску запроса с использованием sqlcmd и Transact-SQL.

Создание базы данных

Выполните следующие шаги, чтобы создать базу данных TestDB.

  1. В приглашении команды sqlcmd вставьте следующую команду Transact-SQL, чтобы создать тестовую базу данных:

    CREATE DATABASE TestDB;
    
  2. В следующей строке напишите запрос, который должен вернуть имена всех баз данных на сервере:

    SELECT Name from sys.databases;
    
  3. Две предыдущие команды не были выполнены сразу. Введите GO на новой строке, чтобы выполнить предыдущие команды:

    GO
    

Вставка данных

Теперь создайте таблицу Inventory и вставьте две новых строки.

  1. В приглашении команды sqlcmd переключите контекст на новую базу данных TestDB:

    USE TestDB;
    
  2. Создайте таблицу Inventory:

    CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT);
    
  3. Вставьте данные в новую таблицу:

    INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);
    
  4. Введите GO, чтобы выполнить предыдущие команды:

    GO
    

Выбор данных

Теперь выполните запрос, чтобы вернуть данные из таблицы Inventory.

  1. В приглашении команды sqlcmd введите запрос, который должен вернуть из таблицы Inventory строки, где количество превышает 152:

    SELECT * FROM Inventory WHERE quantity > 152;
    
  2. Выполните команду:

    GO
    

Выход из приглашения команды sqlcmd

  1. Чтобы завершить сеанс sqlcmd, введите QUIT:

    QUIT
    
  2. Чтобы выйти из интерактивной командной строки в контейнере, введите команду exit. Контейнер продолжит работать после выхода из интерактивной оболочки bash.

Подключение извне контейнера

Подключиться к экземпляру SQL Server на компьютере Docker можно также с помощью любого внешнего инструмента в macOS, Windows или Linux, поддерживающего подключения SQL. Внешнее средство использует IP-адрес для хост-компьютера.

В следующем примере используется sqlcmd вне контейнера для подключения к SQL Server, запущенному в контейнере. В этом примере предполагается, что в среде вне контейнера, из которой происходит подключение, уже установлены средства командной строки SQL Server. При использовании других средств действует тот же принцип, но процесс подключения является уникальным для каждого средства.

  1. Найдите IP-адрес для хост-компьютера контейнера, используя ifconfig или ip addr.

  2. В этом примере установите средство sqlcmd на клиентском компьютере. Дополнительные сведения см. в служебной программе sqlcmd или установке средств командной строки SQL Server sqlcmd и bcp в Linux.

  3. Запустите 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>"
    
  4. Выполните команды языка Transact-SQL. По завершении введите QUIT.

Другие распространенные средства для подключения к SQL Server:

Удаление контейнера

Чтобы удалить контейнер 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

Знаете ли вы, что содержимое SQL можно изменить самостоятельно? Это не только улучшит нашу документацию, но и даст вам статус участника в создании этой страницы.

Дополнительные сведения см. в разделе Участие в работе над документацией по SQL Server.