Подключение к 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 "" Совет Вы можете опустить пароль в командной строке. В этом случае вы получите приглашение для его ввода. Ниже приведен пример: Bash /opt/mssql-tools/bin/sqlcmd -S localhost -U SA Если все сработает должным образом, вы перейдете к приглашению команды 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); Копирование файла резервной копии в контейнер В этом руководстве используется образец базы данных Wide World Importers. Выполните следующие действия, чтобы скачать файл резервной копии базы данных Wide World Importers и скопировать его в контейнер SQL Server. Сначала используйте docker exec для создания папки резервной копии. Следующая команда создает /var/opt/mssql/backup каталог в контейнере SQL Server. Bash sudo docker exec -it sql1 mkdir /var/opt/mssql/backup Затем скачайте файл WideWorldImporters-Full.bak на хост-компьютер. Следующие команды переходит в каталог home/user и скачивает файл резервной копии как wwi.bak. Bash cd ~ curl -L -o wwi.bak 'https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak' Используйте docker cp для копирования файла резервной копии в контейнер в каталоге /var/opt/mssql/backup . Bash sudo docker cp wwi.bak sql1:/var/opt/mssql/backup Восстановление базы данных Вставьте данные в новую таблицу: 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 ,1433 -U SA -P "" Выполните команды языка Transact-SQL. По завершении введите QUIT. docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd ' -S localhost -U SA -P 'Resto#test' -Q "BACKUP DATABASE [Clearbat2] TO [Backups] WITH FORMAT, INIT, MEDIANAME = N'Clearbat', NAME = N'Clearbat2-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10" docker cp sql1:/var/opt/mssql/data/Clearbat2.bak Cleabbat.bak