Запуск Microsoft 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Ключевые параметры при запуске контейнера:
- -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Когда запуск в Docker не подходит
Контейнеризация упрощает развёртывание, но бывают случаи, когда Docker — не лучший выбор:
- Требуется сложная интеграция с аппаратными RAID или специфическим хранилищем, несовместимым с контейнерной файловой моделью.
- Необходима высокая доступность с автоматическим переключением на другую ноду без внешнего оркестратора (в таких случаях используют кластеры или управляемые сервисы).
- Жёсткие SLA и строгие требования к длительной сохранности локальных файлов без надёжных бэков.
Если нужен промышленных уровень HA, рассмотрите управляемые СУБД (Azure SQL, Amazon RDS) или развёртывание в Kubernetes с оператором SQL Server и внешним хранилищем.
Альтернативные подходы
- Виртуальные машины (VM): проще интегрировать с существующей системой мониторинга и бэкапа.
- Управляемые облачные сервисы: минимизируют администрирование, обеспечивают HA и обновления.
- Kubernetes + StatefullSet / оператор: для автоматизации масштабирования и высокодоступного развёртывания в облаке.
- Podman: бездемоновая альтернатива Docker для некоторых дистрибутивов Linux.
Выбор зависит от критичности данных, бюджета и требуемых SLA.
Ментальные модели и эвристики
- Контейнер = идемпотентный экземпляр образа. Данные — вне контейнера (смонтированные тома).
- Образ хранит только программное окружение и настройки, не данные: переносимые тома/volume важнее.
- Для разработки — создавайте контейнеры для каждого теста; для продакшна — используйте оркестрацию и внешние хранилища.
Мини-методология для перехода в продакшн
- Создайте образ с настройками безопасности и секретами вне образа (секреты в Docker Secrets или Vault).
- Настройте тома: монтируйте каталоги данных на надёжные хранилища (NFS, iSCSI, облачные диски).
- Настройте мониторинг и бэкапы: автоматические nightly-дампы или копии томов.
- Тестируйте восстановление: периодические упражнения по восстановлению резервных копий.
- Обновление образа: тестируйте обновления на стейджинге перед продом.
Критерии приёмки
- Экземпляр 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 и протестируйте сценарии отказоустойчивости и восстановления.
Похожие материалы
Резервное копирование фото на Android — как и где хранить
Как скрыть полное имя в Slack
Bitwarden на Raspberry Pi Zero 2 W — самохостинг
Удалённый доступ к Mac: локально и через интернет
Как создать качественные обои для рабочего стола