Запуск Microsoft SQL Server в Docker на Linux
Microsoft SQL Server — это надёжная и широко используемая система управления базами данных. Раньше SQL Server обычно развёртывали на выделённых серверах или виртуальных машинах, но Docker упростил тестирование, развёртывание и изоляцию окружений.
В этом руководстве показано, как запустить экземпляр SQL Server внутри Linux-контейнера в Docker, какие параметры важны, как подключиться и какие практики соблюдать в продакшне.
Преимущества запуска SQL Server в Docker
Коротко о плюсах для инженера:
- Экономия ресурсов: нет необходимости в отдельной VM или физическом сервере.
- Быстрое развертывание и воспроизводимость окружений.
- Лёгкая автоматизация через скрипты и CI/CD.
- Тот же образ можно использовать на macOS, Windows и Linux.
Важно: Docker отлично подходит для разработки, тестирования и CI. Для критичных продакшен-нагрузок оцените требования к устойчивости, хранению и мониторингу — иногда предпочтительнее управляемые сервисы или оркестрация.
Что нужно подготовить
- Docker 1.8+ (рекомендуется современная версия Docker Engine).
- Доступ к интернету для загрузки образа.
- Свободный порт 1433 на хосте (или переназначьте порт).
- Надёжный пароль для учетной записи SA.
- План резервного копирования и хранения данных (volumes, bind-mounts или сетевые тома).
Примечание: в примерах ниже использована версия образа SQL Server 2019. Обновляйте тег образа по мере выхода новых поддерживаемых версий.
Шаг 1: Получение Docker-образа SQL Server
Скачайте официальный образ Microsoft из реестра Microsoft Container Registry:
sudo docker pull mcr.microsoft.com/mssql/server:2019-latestЕсли вы настроили Docker для работы без sudo, команду можно запускать без префикса sudo.
Шаг 2: Просмотр образов и запуск контейнера
После загрузки образа можно просмотреть все локальные образы:
sudo docker imagesЕсли образ присутствует, запускаем контейнер. Ниже — разбор ключевых параметров:
Описание параметров docker run
- -e “ACCEPT_EULA=Y”: подтверждение лицензионного соглашения.
- -e “SA_PASSWORD=Adminxyz22#”: задаёт пароль для аккаунта SA; используйте надёжный пароль не короче 8 символов и соответствующий политикам безопасности.
- -p 1433:1433: проброс порта 1433 контейнера на порт 1433 хоста.
- –name: удобное имя контейнера для последующих команд.
- –hostname: задаёт hostname внутри контейнера.
- -d: запуск в фоновом режиме.
Пример запуска:
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Важно: для продакшена лучше не хранить пароли в явном виде в командной строке — используйте Docker secrets, переменные окружения из защищённого хранилища или инструменты управления конфигурацией.
Постоянное хранение данных
Контейнеры по умолчанию имеют эфемерную файловую систему. Чтобы сохранить данные БД между перезапусками, используйте Docker volume или bind-mount.
Пример с именованным томом:
sudo docker volume create mssql-data
sudo docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=StrongPass!23" -p 1433:1433 --name sql1 -v mssql-data:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2019-latestПояснение: SQL Server в Linux хранит данные в /var/opt/mssql. Монтируя туда том, вы сохраняете файлы базы между перезапусками контейнера.
Шаг 3: Подключение к SQL Server в контейнере
Вы можете подключаться любым клиентом: SQL Server Management Studio (Windows), Azure Data Studio, sqlcmd и т.д.
Чтобы выполнить команды внутри контейнера, зайдите в интерактивный шелл:
sudo docker exec -it sql1 "bash"Подключение через sqlcmd внутри контейнера:
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "Adminxyz22#"По умолчанию имя пользователя — SA. После подключения можно выполнять запросы, например:
SELECT Name FROM sys.DatabasesЗатем введите GO и нажмите Enter для выполнения запроса.
Бэкап и восстановление
Резервное копирование обязательно для любого окружения с данными.
Простой пример сохранения бэкапа из контейнера на хост:
- Внутри sqlcmd выполнить BACKUP DATABASE на путь внутри контейнера, например /var/opt/mssql/backup/mydb.bak.
- Скопировать файл с контейнера на хост:
sudo docker cp sql1:/var/opt/mssql/backup/mydb.bak ./mydb.bakДля автоматизации используйте планировщик задач на хосте, скрипты внутри контейнера или инструменты резервного копирования, поддерживающие SQL Server.
Практики безопасности и жёсткая настройка
- Используйте сложные пароли и храните их в менеджере секретов.
- Закрывайте ненужные порты на брандмауэре и разрешайте доступ по IP.
- Запускайте контейнеры с минимальными привилегиями; избегайте опции –privileged.
- Патчите образы и обновляйте теги регулярно.
- Логируйте доступ и аудит SQL Server.
Важно: учётные записи с правами SA не должны использоваться в приложениях; создавайте отдельные сервисные учётки с минимальным набором прав.
Отладки и распространённые ошибки
- Контейнер не запускается: проверьте логи контейнера
sudo docker logs sql1- Неверный пароль SA: при нескольких неудачных попытках SQL Server может блокировать соединения на уровне учетных записей — проверьте сообщения в логах.
- Порт занят на хосте: измените проброс, например -p 14330:1433.
- Проблемы с volume: убедитесь в правах на каталог при bind-mount.
Альтернативные подходы
- Managed DBaaS (Azure SQL, Amazon RDS) — меньше администрирования.
- Виртуальная машина с полным управлением ОС и SQL Server.
- Kubernetes с StatefulSet для упрощения масштабирования и управления томами в продакшене.
Когда Docker не подходит: для финансовых или критичных систем с требованиями высокой доступности и SLA лучше использовать оркестрацию или управляемые сервисы.
Чек-листы по ролям
Разработчик:
- Локально запускать контейнер с тестовыми дампами.
- Использовать .env файлы и не хранить секреты в репозитории.
- Писать миграции и автоматические тесты.
DBA / Инженер по данным:
- Настроить резервное копирование и проверку восстановлений.
- Планировать мониторинг и метрики (CPU, I/O, задержки запросов).
- Проводить обновления версий и проверять совместимость.
Опереживающий инженер (Ops):
- Обеспечить безопасный доступ (VPN, брандмауэры).
- Настроить логирование и централизованный сбор логов.
- Автоматизировать развёртывание через CI/CD.
Мини‑SOP: Быстрое развёртывание для тестовой среды
- Установить Docker.
- Создать том: sudo docker volume create mssql-data
- Запустить контейнер с переменными: см. пример выше.
- Проверить подключение через sqlcmd или Azure Data Studio.
- Импортировать схему и данные.
Критерии приёмки
- Контейнер запустился и работает в фоне.
- Подключение по TCP к порту 1433 успешно.
- Данные сохраняются в назначенном томе и переживают рестарт контейнера.
Тестовые случаи и приемочные критерии
- UT1: Контейнер стартует в течение 60 секунд.
- UT2: После рестарта контейнера данные в базе сохраняются.
- UT3: Подключение по SA с корректным паролем проходит успешно.
- UT4: Попытка подключения с неправильным паролем отклоняется.
(В описании тестов используйте автоматизированные сценарии CI для проверки этих кейсов.)
Ментальные модели и эвристики
- «Образ = шаблон, том = состояние». Сохраняйте состояние в volumes, а образ используйте для воспроизводимости.
- Разделяйте обязанности: контейнеры для приложений и базы данных — разные обязанности; для продакшена выбирайте устойчивую архитектуру.
- Минимизируйте привилегии: принцип наименьших прав для аккаунтов и контейнеров.
Короткая методология миграции в контейнеры
- Экспортируйте бэкап с исходного сервера.
- Запустите контейнер с проброшенным томом.
- Восстановите бэкап внутри контейнера.
- Проведите тесты консистентности и производительности.
- Переключите приложения на новый экземпляр по этапам.
Нюансы для локализации и окружения (Linux/Ubuntu)
- Пути и права в Linux критичны: убедитесь, что пользователь внутри контейнера имеет доступ к /var/opt/mssql.
- На Ubuntu используйте системный менеджер (systemd) для автозапуска Docker и мониторинга.
Заключение
Docker упрощает развёртывание SQL Server для разработки и тестирования, даёт воспроизводимость окружений и ускоряет CI. Однако для продакшена важно продумать хранение данных, резервное копирование, безопасность и возможную оркестрацию.
Важно: прежде чем переводить критичные базы в контейнеры, протестируйте производительность и восстановление в реальных сценариях нагрузки.
Ключевые действия для старта: скачать образ, запустить контейнер с пробросом порта и тома, подключиться и настроить бэкап.
Краткая сводка
- Используйте официальный образ mcr.microsoft.com/mssql/server:2019-latest.
- Всегда монтируйте persistent volume для /var/opt/mssql.
- Храните секреты безопасно и ограничивайте доступ по сети.
- Автоматизируйте резервные копии и периодически тестируйте восстановление.
Примечание: для Production-окружений рассмотрите Kubernetes, кластеризацию или управляемые сервисы для обеспечения высокой доступности и масштабирования.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone