Краткое руководство. Запуск образов контейнеров SQL Server на Linux с помощью Docker
В этом кратком руководстве вы научитесь использовать 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).
Этот образ содержит экземпляр SQL Server, выполняющийся в системе Linux на основе Ubuntu 20.04. Он может использоваться с Dосker Engine 1.8 и более поздних версий на Linux.
В примерах этой статьи используются команды docker
. Однако большинство этих команд также работают с Podman. Podman предоставляет интерфейс командной строки, аналогичный подсистеме Docker. Дополнительные сведения о Podman см. здесь.
Предварительные требования
Docker Engine 1.8 и более поздних версий на любом поддерживаемом дистрибутиве Linux. Дополнительные сведения см. в разделе Установка Docker.
Дополнительные сведения о требованиях к аппаратному обеспечению и поддерживаемых процессорах см. в следующих источниках:
- Требования к оборудованию и программному обеспечению для SQL Server 2016 и 2017
- SQL Server 2019: Требования к аппаратному и программному обеспечению
Драйвер хранилища overlay2
Docker. По умолчанию этот драйвер используется большинством пользователей. Если вы не используете этот поставщик хранилища и хотите изменить его, см. инструкции и предупреждения в документации по настройке overlay2 для Docker.
Не менее 2 ГБ места на диске.
Не менее 2 ГБ ОЗУ.
Требования к системе для SQL Server на Linux.
Извлечение и запуск образа контейнера SQL Server на Linux
Перед выполнением следующих действий убедитесь, что вы выбрали предпочтительную оболочку (bash, PowerShell или cmd) в начале этой статьи.
Извлеките образ контейнера SQL Server 2019 (15.x) на Linux из Реестра контейнеров Майкрософт.
BashКопировать
sudo 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
. Список всех доступных образов см. на странице mssql-server Docker Hub.
Для команд Bash в этой статье используется sudo
. Если вы не хотите использовать sudo
для запуска Docker, можно настроить группу docker
и добавить в нее пользователей. Дополнительные сведения см. в статье Действия после установки для Linux.
Чтобы запустить образ контейнера на Linux с помощью Docker, выполните следующую команду в оболочке bash или в командной строке PowerShell с повышенными привилегиями.
BashКопировать
sudo docker run -e "ACCEPT_EULA=Y" -e "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 "SA_PASSWORD=<YourStrong@Passw0rd>" | Укажите свой надежный пароль длиной не меньше восьми символов, соответствующий требованиям к паролям в SQL Server. Обязательный параметр для образа SQL Server. |
-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
.
BashКопировать
sudo 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
контейнера с SQL Server отображается Exited
(завершен), см.руководство Устранение неполадок конфигурации. Сервер будет готов к подключению, когда журналы ошибок SQL Server отобразят сообщение: SQL Server is now ready for client connections. This is an informational message; no user action is required
. Чтобы просмотреть журнал ошибок SQL Server, выполните внутри контейнера следующую команду:
BashКопировать
Параметр --hostname
, как указано выше, позволяет изменить внутреннее имя контейнера на пользовательское значение. Это значение отображается при выполнении следующего запроса Transact-SQL.
SQLКопировать
Установка параметров --hostname
и --name
равными позволяет легко идентифицировать целевой контейнер.
SELECT @@SERVERNAME,
SERVERPROPERTY('ComputerNamePhysicalNetBIOS'),
SERVERPROPERTY('MachineName'),
SERVERPROPERTY('ServerName');
docker exec -t sql1 cat /var/opt/mssql/log/errorlog | grep connection
В качестве последнего шага измените пароль SA, так как SA_PASSWORD
отображается в выходных данных ps -eax
и хранится в переменной среды с тем же именем. См. действия ниже.
Изменение пароля системного администратора
Учетная запись SA обладает правами администратора на экземпляре SQL Server, создаваемом во время установки. После создания контейнера SQL Server указанную вами переменную среды SA_PASSWORD
можно обнаружить, запустив echo $SA_PASSWORD
в контейнере. В целях безопасности смените пароль SA.
Назначьте для пользователя SA надежный пароль.
Используйте docker exec
для запуска sqlcmd, чтобы изменить пароль с помощью Transact-SQL. В следующем примере старый и новый пароли считываются из вводимых пользователем данных.
BashКопировать
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}")\""
Подключение к SQL Server
На следующем шаге воспользуемся средством командной строки SQL Server sqlcmd внутри контейнера для подключения к SQL Server.
Выполните команду docker exec -it
, чтобы запустить интерактивную оболочку bash внутри запущенного контейнера. В следующем примере sql1
— это имя, заданное в параметре --name
при создании контейнера.
BashКопировать
sudo docker exec -it sql1 "bash"
В контейнере подключитесь локально с помощью sqlcmd, используя полный путь.
BashКопировать
Совет
Вы можете опустить пароль в командной строке. В этом случае вы получите приглашение для его ввода.
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "<YourNewStrong@Passw0rd>"
Если все сработает должным образом, вы перейдете к приглашению команды sqlcmd: 1>
.
Создание и запрос данных
В следующих разделах приведено пошаговое руководство по созданию базы данных, добавлению данных и запуску запроса с использованием sqlcmd и Transact-SQL.
Создание базы данных
Выполните следующие шаги, чтобы создать базу данных TestDB
.
В приглашении команды sqlcmd вставьте следующую команду Transact-SQL, чтобы создать тестовую базу данных:
SQLКопировать
CREATE DATABASE TestDB;
В следующей строке напишите запрос, который должен вернуть имена всех баз данных на сервере:
SQLКопировать
SELECT Name from sys.databases;
Две предыдущие команды не были выполнены сразу. Введите GO
на новой строке, чтобы выполнить предыдущие команды:
SQLКопировать
GO
Добавление данных
Теперь создайте таблицу Inventory
и вставьте две новых строки.
В приглашении команды sqlcmd переключите контекст на новую базу данных TestDB
:
SQLКопировать
USE TestDB;
Создайте таблицу Inventory
:
SQLКопировать
CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT);
Вставьте данные в новую таблицу:
SQLКопировать
INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);
Введите GO
, чтобы выполнить предыдущие команды:
SQLКопировать
GO
Выбор данных
Теперь выполните запрос, чтобы вернуть данные из таблицы Inventory
.
В приглашении команды sqlcmd введите запрос, который должен вернуть из таблицы Inventory
строки, где количество превышает 152:
SQLКопировать
SELECT * FROM Inventory WHERE quantity > 152;
Выполните приведенную ниже команду.
SQLКопировать
GO
Выход из приглашения команды sqlcmd
Чтобы завершить сеанс sqlcmd, введите QUIT
:
SQLКопировать
QUIT
Чтобы выйти из интерактивной командной строки в контейнере, введите команду exit
. Контейнер продолжит работать после выхода из интерактивной оболочки bash.
Подключение из-за пределов контейнера
Подключиться к экземпляру SQL Server на компьютере Docker можно также с помощью любого внешнего инструмента в macOS, Windows или Linux, поддерживающего подключения SQL.
В следующем примере используется sqlcmd вне контейнера для подключения к SQL Server, запущенному в контейнере. В этом примере предполагается, что в среде вне контейнера, из которой происходит подключение, уже установлены средства командной строки SQL Server. При использовании других средств действует тот же принцип, но процесс подключения является уникальным для каждого средства.
Найдите IP-адрес хост-компьютера своего контейнера с помощью ifconfig
или ip addr
.
В этом примере установите средство sqlcmd на клиентском компьютере. Дополнительные сведения см. в статье Установка sqlcmd в Windows или Установка sqlcmd в Linux.
Запустите sqlcmd, указав IP-адрес и порт, сопоставленный с портом 1433 в контейнере. В этом примере это тот же порт, что и порт 1433 на хост-компьютере. Если на хост-компьютере был указан другой сопоставленный порт, используйте его здесь. Кроме того, чтобы разрешить подключение, необходимо открыть соответствующий входящий порт в брандмауэре.
BashКопировать
sqlcmd -S <ip_address>,1433 -U SA -P "<YourNewStrong@Passw0rd>"
Выполните команды языка Transact-SQL. По завершении введите QUIT
.
Другие распространенные средства для подключения к SQL Server:
- Visual Studio Code
- SQL Server Management Studio (SSMS) в Windows;
- Azure Data Studio
- mssql-cli (предварительная версия).
- PowerShell Core
Удаление контейнера
Чтобы удалить контейнер SQL Server, используемый в этом руководстве, выполните следующие команды.
BashКопировать
sudo docker stop sql1
sudo docker rm sql1
Предупреждение
Остановка и удаление контейнера безвозвратно удаляет все данные SQL Server в контейнере. Чтобы сохранить данные, создайте и скопируйте файл резервной копии за пределы контейнера или используйте метод постоянного хранения данных контейнера.
Демонстрация возможностей Docker
После того как вы научились использовать образ контейнера SQL Server на Linux для Docker, возможно, вы захотите узнать, как использовать Docker для упрощения разработки и тестирования. Следующий видеоролик рассказывает о том, как можно использовать Docker в сценарии непрерывной интеграции и развертывания.
Lальнейшие действия
- Восстановление базы данных SQL Server в контейнере на Linux.
- Сведения о запуске нескольких контейнеров и сохраняемости данных.
- Устранение неполадок с контейнерами SQL Server на Linux.
Кроме того, в репозитории GitHub mssql docker вы найдете ресурсы, отзывы и известные проблемы.
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.