Краткое руководство. Запуск образов контейнеров SQL Server на Linux с помощью Docker

Применимо к:SQL Server — Linux

В этом кратком руководстве вы научитесь использовать Docker для извлечения и запуска образа контейнера SQL Server 2017 (14.x) на Linux, mssql-server-linux. Затем вы сможете подключиться с помощью sqlcmd, чтобы создать первую базу данных и выполнять запросы.

Дополнительные сведения о поддерживаемых платформах см. в заметках о выпуске SQL Server 2017 для Linux.

Совет

В этом кратком руководстве создаются контейнеры SQL Server 2017 (14.x). Если вы хотите создать контейнеры на Linux для других версий SQL Server, ознакомьтесь с версиями этой статьи для SQL Server 2019 (15.x) или SQL Server 2022 (16.x).

В этом кратком руководстве вы научитесь использовать Docker для извлечения и запуска образа контейнера SQL Server 2019 (15.x) на Linux, mssql-server-linux. Затем вы сможете подключиться с помощью sqlcmd, чтобы создать первую базу данных и выполнять запросы.

Дополнительные сведения о поддерживаемых платформах см. в заметках о выпуске SQL Server 2019 для Linux.

Совет

В этом кратком руководстве создаются контейнеры 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 (16.x) на Linux.

Совет

В этом кратком руководстве создаются контейнеры SQL Server 2022 (16.x). Если вы хотите создать контейнеры на Linux для других версий SQL Server, ознакомьтесь с версиями этой статьи SQL Server 2017 (14.x) или SQL Server 2019 (15.x).

Этот образ содержит экземпляр SQL Server, выполняющийся в системе Linux на основе Ubuntu 20.04. Он может использоваться с Dосker Engine 1.8 и более поздних версий на Linux.

В примерах этой статьи используются команды docker. Однако большинство этих команд также работают с Podman. Podman предоставляет интерфейс командной строки, аналогичный подсистеме Docker. Дополнительные сведения о Podman см. здесь.

Необходимые компоненты

Извлечение и запуск образа контейнера SQL Server на Linux

Перед выполнением следующих действий убедитесь, что вы выбрали предпочтительную оболочку (bash, PowerShell или cmd) в начале этой статьи.

  1. Извлеките образ контейнера 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.

    Для команд Bash в этой статье используется sudo. Если вы не хотите использовать sudo для запуска Docker, можно настроить группу docker и добавить пользователей в эту группу. Дополнительные сведения см. в статье Действия после установки для Linux.

  2. Чтобы запустить образ контейнера на 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.
  3. Для просмотра ваших контейнеров 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
    
  4. STATUS Если столбец отображает состояниеUp, SQL Server выполняется в контейнере и прослушивает порт, указанный в столбцеPORTS. Если отображается STATUSExitedстолбец контейнера 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 равными позволяет легко идентифицировать целевой контейнер.

  5. В качестве последнего шага измените пароль SA, так как MSSQL_SA_PASSWORD отображается в выходных данных ps -eax и хранится в переменной среды с тем же именем. См. действия ниже.

Извлечение и запуск образа контейнера SQL Server на Linux

Перед выполнением следующих действий убедитесь, что вы выбрали предпочтительную оболочку (bash, PowerShell или cmd) в начале этой статьи.

  1. Извлеките образ контейнера SQL Server 2019 (15.x) на Linux из Реестра контейнеров Майкрософт.

    sudo 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.

    Для команд Bash в этой статье используется sudo. Если вы не хотите использовать sudo для запуска Docker, можно настроить группу docker и добавить пользователей в эту группу. Дополнительные сведения см. в статье Действия после установки для Linux.

  2. Чтобы запустить образ контейнера на 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: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.
  3. Для просмотра ваших контейнеров 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:2019-latest   "/opt/mssql/bin/perm..."   2 minutes ago   Up 2 minutes   0.0.0.0:1433->1433/tcp, :::1433->1433/tcp   sql1
    
  4. STATUS Если столбец отображает состояниеUp, SQL Server выполняется в контейнере и прослушивает порт, указанный в столбцеPORTS. Если отображается STATUSExitedстолбец контейнера 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 равными позволяет легко идентифицировать целевой контейнер.

  5. В качестве последнего шага измените пароль SA, так как MSSQL_SA_PASSWORD отображается в выходных данных ps -eax и хранится в переменной среды с тем же именем. См. действия ниже.

Извлечение и запуск образа контейнера SQL Server на Linux

Перед выполнением следующих действий убедитесь, что вы выбрали предпочтительную оболочку (bash, PowerShell или cmd) в начале этой статьи.

  1. Извлеките образ контейнера SQL Server 2022 (16.x) на Linux из Реестра контейнеров Майкрософт.

    sudo 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.

    Для команд Bash в этой статье используется sudo. Если вы не хотите использовать sudo для запуска Docker, можно настроить группу docker и добавить пользователей в эту группу. Дополнительные сведения см. в статье Действия после установки для Linux.

  2. Чтобы запустить образ контейнера на 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: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.
  3. Для просмотра ваших контейнеров 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:2022-latest   "/opt/mssql/bin/perm..."   2 minutes ago   Up 2 minutes   0.0.0.0:1433->1433/tcp, :::1433->1433/tcp   sql1
    
  4. STATUS Если столбец отображает состояниеUp, SQL Server выполняется в контейнере и прослушивает порт, указанный в столбцеPORTS. Если отображается STATUSExitedстолбец контейнера 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 равными позволяет легко идентифицировать целевой контейнер.

  5. В качестве последнего шага измените пароль SA, так как MSSQL_SA_PASSWORD отображается в выходных данных ps -eax и хранится в переменной среды с тем же именем. См. действия ниже.

Изменение пароля системного администратора

Учетная запись SA обладает правами администратора на экземпляре SQL Server, создаваемом во время установки. После создания контейнера SQL Server указанную вами переменную среды MSSQL_SA_PASSWORD можно обнаружить, запустив echo $MSSQL_SA_PASSWORD в контейнере. В целях безопасности смените пароль SA.

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

  2. Используйте docker exec для запуска sqlcmd, чтобы изменить пароль с помощью Transact-SQL. В следующем примере старый и новый пароли считываются из вводимых пользователем данных.

    sudo docker exec -it sql1 /opt/mssql-tools/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}")\""
    

    Примечание.

    Более новые версии sqlcmd по умолчанию защищены. Дополнительные сведения о шифровании подключений см. в программе sqlcmd для Windows и Подключение использовании sqlcmd для Linux и macOS. Если подключение не выполнено, можно добавить параметр в sqlcmd, чтобы указать-No, что шифрование является необязательным, а не обязательным.

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

  2. В следующем примере замените старый пароль <YourStrong@Passw0rd> и новый пароль <YourNewStrong@Passw0rd>собственными паролями.

    docker exec -it sql1 /opt/mssql-tools/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, что шифрование является необязательным, а не обязательным.

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

  2. В следующем примере замените старый пароль <YourStrong@Passw0rd> и новый пароль <YourNewStrong@Passw0rd>собственными паролями.

    docker exec -it sql1 /opt/mssql-tools/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, что шифрование является необязательным, а не обязательным.

Подключение к SQL Server

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

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

    sudo docker exec -it sql1 "bash"
    
    docker exec -it sql1 "bash"
    
    docker exec -it sql1 "bash"
    
  2. В контейнере подключитесь локально с помощью sqlcmd, используя полный путь.

    /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "<YourNewStrong@Passw0rd>"
    

    Примечание.

    Более новые версии sqlcmd по умолчанию защищены. Дополнительные сведения о шифровании подключений см. в программе sqlcmd для Windows и Подключение использовании sqlcmd для Linux и macOS. Если подключение не выполнено, можно добавить параметр в sqlcmd, чтобы указать-No, что шифрование является необязательным, а не обязательным.

    Вы можете опустить пароль в командной строке. В этом случае вы получите приглашение для его ввода. Например:

      /opt/mssql-tools/bin/sqlcmd -S localhost -U SA
    
  3. Если все сработает должным образом, вы перейдете к приглашению команды 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, что шифрование является необязательным, а не обязательным.

    sqlcmd -S <ip_address>,1433 -U SA -P "<YourNewStrong@Passw0rd>"
    
    sqlcmd -S <ip_address>,1433 -U SA -P "<YourNewStrong@Passw0rd>"
    
    sqlcmd -S <ip_address>,1433 -U SA -P "<YourNewStrong@Passw0rd>"
    
  4. Выполните команды языка Transact-SQL. По завершении введите QUIT.

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

Отключение учетной sa записи в качестве рекомендации

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

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

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

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

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

Чтобы удалить контейнер SQL Server, используемый в этом руководстве, выполните следующие команды.

sudo docker stop sql1
sudo docker rm sql1
docker stop sql1
docker rm sql1
docker stop sql1
docker rm sql1

Предупреждение

Остановка и удаление контейнера безвозвратно удаляет все данные SQL Server в контейнере. Чтобы сохранить данные, создайте и скопируйте файл резервной копии за пределы контейнера или используйте метод постоянного хранения данных контейнера.

Демонстрация возможностей Docker

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

Сведения о запуске нескольких контейнеров и сохраняемости данных.

Примите участие в разработке документации по SQL

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

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