Гид по технологиям

Запуск Microsoft SQL Server в Docker на Linux

6 min read Базы данных Обновлено 29 Dec 2025
SQL Server в Docker на Linux — запуск и лучшие практики
SQL Server в Docker на Linux — запуск и лучшие практики

Преимущества запуска SQL Server в Docker

Запуск SQL Server в контейнере Docker даёт явные практические преимущества для разработчиков и инженеров по развёртыванию:

  • Экономия ресурсов: не требуется выделять отдельную виртуальную машину или физический сервер.
  • Быстрое воспроизведение окружения: одна и та же версия образа работает одинаково на macOS, Windows и Linux.
  • Автоматизация: развертывание можно интегрировать в CI/CD-пайплайны и скрипты.
  • Лёгкая чистка и тестирование: контейнер легко пересоздать, откатить или удалить.

Важно понимать: Docker отлично подходит для разработки, тестирования и некоторых сценариев продакшна, но требует дополнительных мер по безопасности и резервированию для боевых нагрузок.

Шаг 1: Получение Docker-образа SQL Server

Требование: Docker версии 1.8 или новее. На Ubuntu и популярных дистрибутивах Linux устанавливается официальный Docker Engine — следуйте документации Docker для вашего дистрибутива.

Скачайте официальный образ Microsoft SQL Server (в примерах используется SQL Server 2019):

sudo docker pull mcr.microsoft.com/mssql/server:2019-latest

Примечания:

  • Docker сначала попытается найти образ локально, и если его нет — загрузит из облачного реестра mcr.microsoft.com.
  • Если ваша учётная запись настроена для выполнения docker без sudo, sudo можно опустить.

Шаг 2: Запуск образа в контейнере

После загрузки образа можно просмотреть список локальных образов:

sudo docker images

Список Docker-образов в терминале

Ключевые параметры при запуске контейнера:

  • -e “ACCEPT_EULA=Y”: автоматически принимает лицензионное соглашение.
  • -e “SA_PASSWORD=Adminxyz22#”: задаёт пароль для пользователя SA. Используйте надёжный пароль не короче 8 символов.
  • -p 1433:1433: проброс порта 1433 (по умолчанию порт SQL Server) с хоста в контейнер.
  • –name: задаёт имя контейнера (удобно для управления и скриптов).
  • –hostname: задаёт hostname внутри контейнера.

Рекомендуем присваивать понятные имена контейнерам и хостам — они будут использоваться в строках подключения.

Запустите контейнер в фоновом режиме:

sudo docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Adminxyz22#" -p 1433:1433 --name sql1 --hostname sql1 -d mcr.microsoft.com/mssql/server:2019-latest

Пояснение: флаг -d запускает контейнер в режиме демона. Для отладки можно убрать -d и смотреть логи.

Шаг 3: Подключение к SQL Server внутри контейнера

Вы можете подключаться к экземпляру SQL Server из хоста или изнутри контейнера. Популярные клиенты: SQL Server Management Studio (Windows), Azure Data Studio (кроссплатформенный), а также командная утилита sqlcmd.

Пример подключения к терминалу контейнера и запуска sqlcmd:

sudo docker exec -it sql1 bash

Внутри контейнера:

/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "Adminxyz22#"

Стандартный логин в образе: пользователь SA. Пример запроса для списка баз данных:

SELECT Name FROM sys.Databases
GO

Выполнение SQL-запроса в контейнере SQL Server

Когда запуск в Docker не подходит

Контейнеризация упрощает развёртывание, но бывают случаи, когда Docker — не лучший выбор:

  • Требуется сложная интеграция с аппаратными RAID или специфическим хранилищем, несовместимым с контейнерной файловой моделью.
  • Необходима высокая доступность с автоматическим переключением на другую ноду без внешнего оркестратора (в таких случаях используют кластеры или управляемые сервисы).
  • Жёсткие SLA и строгие требования к длительной сохранности локальных файлов без надёжных бэков.

Если нужен промышленных уровень HA, рассмотрите управляемые СУБД (Azure SQL, Amazon RDS) или развёртывание в Kubernetes с оператором SQL Server и внешним хранилищем.

Альтернативные подходы

  • Виртуальные машины (VM): проще интегрировать с существующей системой мониторинга и бэкапа.
  • Управляемые облачные сервисы: минимизируют администрирование, обеспечивают HA и обновления.
  • Kubernetes + StatefullSet / оператор: для автоматизации масштабирования и высокодоступного развёртывания в облаке.
  • Podman: бездемоновая альтернатива Docker для некоторых дистрибутивов Linux.

Выбор зависит от критичности данных, бюджета и требуемых SLA.

Ментальные модели и эвристики

  • Контейнер = идемпотентный экземпляр образа. Данные — вне контейнера (смонтированные тома).
  • Образ хранит только программное окружение и настройки, не данные: переносимые тома/volume важнее.
  • Для разработки — создавайте контейнеры для каждого теста; для продакшна — используйте оркестрацию и внешние хранилища.

Мини-методология для перехода в продакшн

  1. Создайте образ с настройками безопасности и секретами вне образа (секреты в Docker Secrets или Vault).
  2. Настройте тома: монтируйте каталоги данных на надёжные хранилища (NFS, iSCSI, облачные диски).
  3. Настройте мониторинг и бэкапы: автоматические nightly-дампы или копии томов.
  4. Тестируйте восстановление: периодические упражнения по восстановлению резервных копий.
  5. Обновление образа: тестируйте обновления на стейджинге перед продом.

Критерии приёмки

  • Экземпляр SQL Server доступен на порту 1433 с корректной аутентификацией.
  • Данные сохраняются между перезапусками контейнера (томы не теряются).
  • Минимальные тестовые запросы выполняются успешно, e.g., SELECT 1.
  • Параметры безопасности (строгий пароль SA, закрытые ненужные порты) применены.
  • Резервное копирование успешно выполняется и восстановление проверено.

Проверки и тесты (test cases)

  • Подключение: подключиться с помощью sqlcmd и GUI-клиента.
  • Целостность данных: создать таблицу, записать строки, перезапустить контейнер, проверить данные.
  • Производительность: прогон нагрузочного сценария и мониторинг показателей CPU/IO.
  • Восстановление: восстановить базу из бэкапа в чистый контейнер.

Чек-лист по ролям

DevOps / Инженер по развёртыванию:

  • Настроить тома для хранения данных.
  • Интегрировать контейнер в систему мониторинга.
  • Настроить бэкапы и оповещения.

DBA:

  • Настроить политику бэкапов и проверять восстановление.
  • Управлять пользователями и правами.
  • Следить за параметрами производительности.

Разработчик:

  • Использовать контейнер в локальной разработке для воспроизводимости окружения.
  • Не хранить секреты в образе.

Жёсткая настройка безопасности

  • Пароли: используйте сильные секреты, храните их вне образов (Docker Secrets, HashiCorp Vault).
  • Ограничьте сетевую доступность: пробрасывайте порт только при необходимости и используйте firewall/Network Policies.
  • Монтируйте тома с правами, чтобы процессы в контейнере не имели лишних привилегий.
  • Обновления: регулярно обновляйте образ до актуальных патчей и версий.
  • Минимизируйте доступ к пользователю SA: создайте отдельные аккаунты с минимальными правами для приложений.

Совместимость, миграция и особенности

  • Образ в примерах использует SQL Server 2019; перед миграцией проверьте совместимость схем и функций.
  • При переносе данных используйте резервные копии (.bak) или инструменты миграции, а не копирование файлов данных без остановки СУБД.
  • Убедитесь, что все зависимые службы (логирование, очередь, backup storage) доступны контейнеру.

Шаблон команды и подсказки (cheat sheet)

  • Скачивание образа:
sudo docker pull mcr.microsoft.com/mssql/server:2019-latest
  • Запуск контейнера:
sudo docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=YourStrong!Pass1" -p 1433:1433 --name sql1 --hostname sql1 -d mcr.microsoft.com/mssql/server:2019-latest
  • Подключение в контейнере:
sudo docker exec -it sql1 bash
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "YourStrong!Pass1"
  • Просмотр логов:
sudo docker logs -f sql1
  • Остановка и удаление контейнера:
sudo docker stop sql1
sudo docker rm sql1

Резюме

Запуск Microsoft SQL Server в Docker на Linux — быстрый и удобный способ получить воспроизводимое окружение для разработки и тестирования. Для продакшн‑окружений требуются дополнительные меры: надёжные тома для данных, автоматические бэкапы, мониторинг и строгая настройка безопасности. Взвесьте преимущества контейнеризации против требований к доступности и соответствию вашей инфраструктуры.

Важно: перед внедрением в продакшн ознакомьтесь с официальной документацией Microsoft и протестируйте сценарии отказоустойчивости и восстановления.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Резервное копирование фото на Android — как и где хранить
Mobile

Резервное копирование фото на Android — как и где хранить

Как скрыть полное имя в Slack
Приватность

Как скрыть полное имя в Slack

Bitwarden на Raspberry Pi Zero 2 W — самохостинг
DevOps

Bitwarden на Raspberry Pi Zero 2 W — самохостинг

Удалённый доступ к Mac: локально и через интернет
Руководство

Удалённый доступ к Mac: локально и через интернет

Как создать качественные обои для рабочего стола
Руководство

Как создать качественные обои для рабочего стола

Как выбрать подставку для MacBook
Аксессуары

Как выбрать подставку для MacBook